第十三章 httpd详解

13.1 httpd简介

httpd是Apache超文本传输协议(HTTP)服务器的主程序。被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程的池。

通常,httpd不应该被直接调用,而应该在类Unix系统中由apachectl调用,在Windows中作为服务运行。

13.2 httpd版本

本文主要介绍httpd的两大版本,httpd-2.2和httpd-2.4。

CentOS6系列的版本默认提供的是httpd-2.2版本的rpm包,而CentOS7默认提供的是httpd-2.4版本的rpm包

13.2.1 httpd的特性

httpd有很多特性,下面就分别来说说httpd-2.2版本和httpd-2.4版本各自的特性。

  httpd-2.2的特性:

a) 事先创建进程

b) 按需维持适当的进程

c) 模块化设计,核心比较小,各种功能通过模块添加(包括PHP),支持运行时配置,支持单独编译模块

d) 支持多种方式的虚拟主机配置,如基于ip的虚拟主机,基于端口的虚拟主机,基于域名的虚拟主机等

e) 支持https协议(通过mod_ssl模块实现)

f) 支持用户认证

g) 支持基于IP或域名的ACL访问控制机制

h) 支持每目录的访问控制(用户访问默认主页时不需要提供用户名和密码,但是用户访问某特定目录时需要提供用户名和密码)

i) 支持URL重写

j) 支持MPM(Multi Path Modules,多处理模块)。用于定义httpd的工作模型(单进程、单进程多线程、多进程、多进程单线程、多进程多线程)

prefork:多进程模型,预先生成进程,一个请求用一个进程响应

一个主进程负责生成n个子进程,子进程也称为工作进程;

每个子进程处理一个用户请求,即使没有用户请求,也会预先生成多个空闲进程,随时等待请求到达,最大不会超过1024个

worker:基于线程工作,一个请求用一个线程响应(启动多个进程,每个进程生成多个线程)

event:基于事件的驱动,一个进程处理多个请求

  httpd-2.4的新特性:

a) MPM支持运行DSO机制(Dynamic Share Object,模块的动态装/卸载机制),以模块形式按需加载

b) 支持event MPM,eventMPM模块生产环境可用

c) 支持异步读写

d) 支持每个模块及每个目录分别使用各自的日志级别

e) 每个请求相关的专业配置,使用<If>来配置

f) 增强版的表达式分析器

g) 支持毫秒级的keepalive timeout

h) 基于FQDN的虚拟主机不再需要NameVirtualHost指令

i) 支持用户自定义变量

j) 支持新的指令(AllowOverrideList)

k) 降低对内存的消耗

13.2.2 httpd-2.4新增的模块

  httpd-2.4在之前的版本基础上新增了几大模块,下面就几个常用的来介绍一下。

mod_proxy_fcgi:反向代理时支持apache服务器后端协议的模块

mod_ratelimit:提供速率限制功能的模块

mod_remoteip:基于ip的访问控制机制被改变,不再支持使用Order,Deny,Allow来做基于IP的访问控制

13.3 httpd基础

13.3.1 httpd自带的工具程序

htpasswd:basic认证基于文件实现时,用到的帐号密码生成工具

apachectl:httpd自带的服务控制脚本,支持start,stop,restart

apxs:由httpd-devel包提供的,扩展httpd使用第三方模块的工具

rotatelogs:日志滚动工具

access.log -->

access.log,access.1.log

access.log,access.1.log,access.2.log

suexec:访问某些有特殊权限配置的资源时,临时切换至指定用户运行的工具

ab:apache benchmark,httpd的压力测试工具

13.3.2 rpm包安装的httpd程序环境

  httpd-2.2版本程序环境:

配置文件:

/etc/httpd/conf/httpd.conf

/etc/httpd/conf.d/*.conf

配置文件的组成:grep "Section" /etc/httpd/conf/httpd.conf

### Section 1: Global Environment
### Section 2: ‘Main‘ server configuration
### Section 3: Virtual Hosts

配置格式:directive value

directive:指令,不区分字符大小写

value:为路径时,取决于文件系统

服务脚本:

/etc/rc.d/init.d/httpd

服务脚本的配置文件:

/etc/sysconfig/httpd

主程序文件:

/usr/sbin/httpd

/usr/sbin/httpd.event

/usr/sbin/httpd.worker

日志文件目录:

/var/log/httpd/

access.log:访问日志

error_log:错误日志

站点文档目录:

/var/www/html/

模块文件路径:

/usr/lib64/httpd/modules/

  httpd-2.4版本程序环境:

主配置文件:/etc/httpd/conf/httpd.conf

模块配置文件:/etc/httpd/conf.modules.d/*.conf

辅助配置文件:/etc/httpd/conf.d/*.conf

mpm:以DSO机制提供,配置文件为/etc/httpd/conf.modules.d/00-mpm.conf

13.3.3 web相关的命令

curl命令:

curl是基于URL语法在命令行方式下工作的文件传输工具,它支持FTP,FTPS,HTTP,HTTPS,GOPHER,TELNET,DICT,FILE及LDAP等协议。

curl支持:

https认证

http的POST/PUT等方法

ftp上传

kerberos认证

http上传

代理服务器

cookies

用户名/密码认证

下载文件断点续传

socks5代理服务器

通过http代理服务器上传文件到ftp服务器

语法:curl [options] [URL ...]

常用的options:

-A/--user-agent <string>:设置用户代理发送给服务器

-basic:使用Http基本认证

--tcp-nodelay:使用TCP_NODELAY选项

-e/--referer <URL>:来源网址

--cacert <file>:CA证书(SSL)

--compressed:要求返回时压缩的格式

-H/--header <line>:自定义请求首部信息传递给服务器

-I/--head:只显示响应报文首部信息

--limit-rate <rate>:设置传输速度

-u/--user <user[:password]>:设置服务器的用户和密码

-0/--http1:使用http 1.0版本,默认使用1.1版本。这个选项是数字0而不是字母o

elinks命令:

语法:elinks [options] [URL ...]

常用的options:

-dump:不进入交互式模式,而直接将URL的内容输出至标准输出

httpd命令:

语法:httpd [options]

常用的options:

-l:查看静态编译的模块,列出核心中编译了哪些模块。它不会列出使用LoadModule指令动态加载的模块

-M:输出一个已经启用的模块列表,包括静态编译在服务器中的模块和作为DSO动态加载的模块

-v:显示httpd的版本,然后退出

-V:显示httpd和apr/apr-util的版本和编译参数,然后退出

-X:以调试模式运行httpd。仅启动一个工作进程,并且服务器不与控制台脱离

13.4 编译安装httpd-2.4

httpd依赖于apr-1.4+,apr-util-1.4+,[apr-icon]

apr:apache portable runtime

CentOS6提供的apr是1.3.9版本,而apr-util也是1.3.9版本,所以想在CentOS6上安装httpd-2.4版本时需要先安装apr-1.4+和apr-util-1.4+,而在CentOS7中则不用另行安装

  httpd-2.4编译安装步骤:

a) 安装开发环境(yum groupinstall)

b) 下载并安装apr-1.4+和apr-util-1.4+。此步骤仅需在CentOS6系列上执行,CentOS7无需执行此步

cd /usr/src/
wget http://mirrors.hust.edu.cn/apache//apr/apr-1.5.2.tar.bz2
wget https://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-util-1.5.4.tar.bz2
tar xvf apr-1.5.2.tar.bz2
tar xvf apr-util-1.5.4.tar.bz2
cd apr-1.5.2
./configure --prefix=/usr/local/apr
make && make install
cd ../apr-util-1.5.4
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make && make install

c) 编译安装httpd

groupadd -r apache
useradd -r -g apache apache
yum -y install openssl-devel pcre-devel
./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork
make && make install

13.5 httpd常用配置

  httpd-2.2常用配置:

修改监听的IP和端口:

Listen [IP:]PORT

省略IP表示监听所有地址。Listen可重复出现多次

持久连接:即长连接

Persistent Connection:连接建立,每个资源获取完成后不会立即断开连接,而是继续等待其它的请求完成

如何断开?

数量限制:默认获取100个资源后会自动断开连接

时间限制:可配置,对于并发很大的服务器来说,此值不能设定太大

副作用:对于并发访问量较大的服务器,持久连接功能会使有些请求得不到响应

折衷:使用较短的持久连接时间。httpd-2.4支持毫秒级持久时间

KeepAlive {On | Off}:设定是否启用持久连接
MaxKeepAliveRequests 100:设定最大允许获取的资源数,当达到些设定值时将自动断开连接
KeepAliveTimeout 15:设定时间限制,当达到些时间限制时将自动断开连接

测试持久连接:

telnet HOST PORT                # telnet 192.168.1.1 80
GET /URL HTTP/1.1              # GET /index.html HTTP/1.1
Host: HOSTNAME or IP        # Host: 192.168.1.1

MPM:Multi Path Modules,多处理模块。用于定义httpd的工作模型(单进程、单进程多线程、多进程、多进程单线程、多进程多线程)

httpd-2.2不支持同时编译多个模块,所以只能编译时选定一个

rpm安装的包提供了三个二进制程序文件,分别用于实现对不同MPM机制的支持。确认方法:

ps aux |grep httpd

默认为/usr/sbin/httpd,其使用prefork

更换使用的httpd程序:编辑/etc/sysconfig/httpd文件,并重启服务使之生效

HTTPD={httpd | httpd.worker | httpd.event}

配置MPM:编辑主配置文件/etc/httpd/conf/httpd.conf

prefork的配置:

StartServers:服务启动时启动的服务器进程数(提供服务的子进程数,不包含主进程)
MinSpareServers:最少空闲进程数
MaxSpareServers:最大空闲进程数
ServerLimit:为MaxClients所准备的在其服务生命周期内所允许的进程数量最大值
MaxClients:最大并发请求数
MaxRequestsPerChild:一个服务器进程最多能够响应多少次的请求

worker的配置:

StartServers:服务启动时启动的服务器进程数(提供服务的子进程数,不包含主进程)
MaxClients:服务端最多启动的线程数量
MinSpareThreads:最少空闲线程数
MaxSpareThreads:最多空闲线程数
ThreadsPerChild:每个进程所能够启动的线程数
MaxRequestsPerChild:每个线程所能够响应的最大请求数量,0表示无限制

DSO:Dynamic Share Object,模块的动态装/卸载机制

配置指令实现模块加载:

LoadModule <mod_name> <mod_path>

模块路径(mod_path)可使用相对路径:

相对于ServerRoot(/etc/httpd)指向的路径而言

/etc/httpd/modules   -->  /usr/lib64/httpd/modules

定义“Main”server的文档页面路径,DocumentRoot

文档路径映射:

DocumentRoot指向的路径为URL路径的起始位置

DocumentRoot "/var/www/html"

test/index.html  -->  http://HOST:PORT/test/index.html

站点访问控制:

可基于两种类型的路径指明对哪些资源进行访问控制:

针对文件系统路径:

<Directory ""> </Directory>
<File ""> </File>
<FileMatch ""> </FileMatch>

针对URL路径:

<Location ""> </Location>
<LocationMatch ""> </LocationMatch>

访问控制机制:

基于来源地址

基于帐号

Directory中“基于来源地址”实现访问控制:httpd-2.2版本

a) Options

所有可用特性:

Indexes  Includes  FollowSymLinks  SymLinksifOwnerMatch  ExecCGI  MultiViews

Indexes:索引,当不指定要访问的页面具体路径而又没有默认主页(index.html)时,以链接形式列出根(默认为/var/www/html)下的所有内容

FollowSymLinks:允许跟踪符号链接文件

b) 基于来源地址的访问控制机制

Order:检查次序
Order allow,deny    先允许后拒绝。默认所有都拒绝,只有明确允许的才允许访问
Order deny,allow    先拒绝后允许。默认所有都允许,只有明确拒绝的才拒绝访问
Allow from 来源地址
Deny from 来源地址

来源地址可以为:

IP:如192.168.1.1

NetAddr:

172.16

172.16.0.0

172.16.0.0/16

172.16.0.0/255.255.0.0

FQDN:可以是完整的主机名,也可以是一个域名,如*.idfsoft.com

All

基于用户的访问控制:

认证质询:此处是一个响应报文

WWW-Authenticate:响应码为401,拒绝客户端请求,并说明要求客户提供帐号和密码

认证:此处是一个请求报文

Authorization:客户端用户填入帐号和密码后再次发送请求报文,认证通过,则服务器发送响应的资源

认证类型:

basic:明文

digest:消息摘要,经过MD5加密

安全域:需要用户认证后才能访问的路径称之为安全域

应该通过名称对其进行标识,并用于告知用户认证的原因

用户的帐号和密码存储于何处:

虚拟帐号:仅用于访问某服务时用到的认证标识

存储机制:

文本文件

SQL数据库

ldap

nis

basic认证:基于文本文件的存储机制

a) 定义安全域

<Directory "">
  Options None
  AllowOverride None
  AuthType Basic
  AuthName "String"
  AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE"
  Require user username1 username2 ...     #只允许帐号文件中指定的用户登录访问
</Directory>

允许帐号文件中的所有用户登录访问:
  在<Directory> </Directory>之间添加Require valid-user

b) 提供帐号和密码存储(使用htpasswd命令)

htpasswd [options] passwordfile username

常用的options:

-c:自动创建passwordfile,因此,仅应该在添加第一个用户时使用

-m /path/to/passwordfile:md5加密用户密码

-s:sha1加密用户密码

-D:删除指定用户

c) 实现基于组进行认证

<Directory "">
  Options None
  AllowOverride None
  AuthType Basic
  AuthName "String"
  AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE"
  AuthGroupFile "/PATH/TO/HTTPD_GROUP_FILE"
  Require group GROUP1 GROUP2 ...
</Directory>

要提供用户帐号文件和组文件:

组文件:只能手动定义,每一行定义一组。格式如下:

GROUP_NAME:user1 user2 user3 ...

在组文件中的user必须在帐号文件中存在。

定义默认主页面:

DirectoryIndex index.html index.html.var

日志设定:

定义日志格式:LogFormat

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

常用的日志格式定义宏:详情请看 官方文档

%h:客户端IP地址
%l:小写的L,远程登录的用户名,Remote logname (from identd,if supplied). -表示为空
%u:远程用户。Remote user, (from auth; may be bogus if return status (%s) is 401)
%t:服务器收到请求的时间
%r:请求报文的首行信息(请求的方法,URL,协议版本)
%>s:响应状态码
%b:响应报文的大小,不包含响应报文首部,单位是字节
%{Referer}i:请求报文当中"referer"首部的值。当前资源的访问入口,即从哪个页面中的超链接跳转而来
%{User-Agent}i:请求报文当中"User-Agent"首部的值。即发出请求用到的应用程序

错误日志:

Errorlog logs/error_log
LogLevel <日志级别>    #默认是warn级别

日志级别有以下这些:从低到高,日志级别越低,记录越详细

debug

info

notice

warn

error

crit

alert

emerg

访问日志:

CustomLog logs/access_log combined

路径别名:把一个URL映射至别的路径上

Alias /URL/ "/PATH/TO/SOMEDIR/"
如:Alias /bbs/ "/bbs/htdocs"

设定默认字符集:

AddDefaultCharset UTF-8

虚拟主机:

有三种实现方案:

基于ip:为每个虚拟主机准备至少一个ip地址

基于port:为每个虚拟主机准备至少一个专用port,实践中很少使用

基于域名:为每个虚拟主机准备至少一个专用域名

需要将NameVirtualHost的注释去掉

可混合使用上述三种方式中任意方式

注意:一般虚拟主机莫与中心主机混用,所以,要使用虚拟主机,必须先禁用中心主机

禁用中心主机:注释DocumentRoot

每个虚拟主机都有专用配置:还可以在虚拟主机中通过Directory进行访问控制

<VirtualHost *:80>    #此处的*可以换成指定的IP地址
  ServerAdmin [email protected]
  DocumentRoot /www/docs/dummy-host.example.com
  ServerName dummy-host.example.com
  ErrorLog logs/dummy-host.example.com-error_log
  CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>

内置的status页面:可以查看服务器的状态

<Location /server-status>
  SetHandler server-status
  Order deny,allow
  Deny from all
  Allow from .example.com
</Location>

使用mod_deflate模块压缩页面优化传输速度:适用于httpd-2.2版本

适用场景:

a) 节约带宽,额外消耗CPU,同时,可能有些较老浏览器不支持

b) 压缩适于压缩的资源,例如文本文件

方法:

a) 编辑主配置文件/etc/httpd/conf/httpd.conf,查找mod_deflate.so,将其前面的注释去掉,启用mod_deflate模块

b) 将以下内容添加至主配置文件:

SetOutputFilter DEFLATE        #调用DEFLATE输出过滤器

# mod_deflate configuration
# Restrict compression to these MIME types    对下面指定的类型进行压缩
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/css
# Level of compression (Highest 9 - Lowest 1)    设定压缩比率
DeflateCompressionLevel 9

# Netscape 4.x has some problems.    根据首部的User-Agent基于正则模式匹配浏览器类型和版本
BrowserMatch ^Mozilla/4 gzip-only-text/html        #浏览器是Mozilla/4时,用gzip压缩,但只压缩text/html格式的文档
# Netscape 4.06-4.08 have some more problems    根据首部的User-Agent基于正则模式匹配浏览器类型和版本
BrowserMatch ^Mozilla/4\.0[678] no-gzip                #浏览器是Mozilla的4.0、4.6、4.7或4.8版本时不压缩
# MSIE masquerades as Netscape, but it is fine    根据首部的User-Agent基于正则模式匹配浏览器类型和版本
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html    #浏览器是IE6.0之前的版本时,不压缩,若要压缩则只用gzip压缩text/html格式的文档

配置httpd支持https:

a) 为服务器申请数字证书

测试:通过私建CA发证书

创建私有CA

在服务器创建证书签署请求

CA签证

b) 配置httpd支持使用ssl,及使用的证书

yum -y install mod_ssl

配置文件:/etc/httpd/conf.d/ssl.conf

DocumentRoot = ??
ServerName = ??
SSLCertificateFile = ??
SSLCertificateKeyFile = ??

c) 测试基于https访问相应的主机

openssl s_client [-connect host:port] [-cert filename] [-CApath directory] [-CAfile filename]

  httpd-2.4常用配置:

切换使用MPM(编辑/etc/httpd/conf.modules.d/00-mpm.conf文件):

LoadModule mpm_NAME_module modules/mod_mpm_NAME.so

#   NAME:有三种,分别为prefork,event,worker

修改“Main" Server的DocumentRoot

基于IP的访问控制法则:

允许所有主机访问: Require all granted

拒绝所有主机访问: Require all deny

控制特定IP访问:

Require ip IPADDR:授权指定来源地址的主机访问
Require not ip IPADDR:拒绝指定来源地址的主机访问

IPADDR的类型:
  IP:192.168.1.1
  Network/mask:192.168.1.0/255.255.255.0
  Network/Length:192.168.1.0/24
  Net:192.168

控制特定主机(HOSTNAME)访问:

Require host HOSTNAME
Require not host HOSTNAME

HOSTNAME的类型:
  FQDN:特定主机的全名
  DOMAIN:指定域内的所有主机

注意:httpd-2.4版本默认是拒绝所有主机访问的,所以安装以后必须做显示授权访问

示例:

<RequireAll>
  Require not ip 192.168.1.20
  Require all granted
</RequireAll>

虚拟主机:

基于IP、PORT和域名都支持

基于域名的不再需要NameVirtualHost指令

ssl:

启用模块:编辑/etc/httpd/conf.modules.d/00-base.conf文件,添加下面这行,如果已经有了但是注释了,则取消注释即可

LoadModule ssl_module modules/mod_ssl.so

服务脚本:

CentOS6编译安装的服务脚本:apachectl {start | stop | restart}

CentOS7的服务脚本:httpd.service,使用systemctl控制

时间: 2024-08-03 08:48:33

第十三章 httpd详解的相关文章

第十四章 nginx详解

14.1 nginx简介 Nginx(发音同engine x)是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行. Nginx由俄罗斯的程序设计师Igor Sysoev所开发,最初供俄国大型的入口网站及搜寻引擎Rambler使用. 第一个公开版本0.1.0发布于2004年10月4日.其将源代码以类BSD许可证的形式发布,因它的稳定性.丰富的功能集.示例配置文件和低系统资源的消耗而闻名.2011年6月1日,nginx 1.0.4

httpd详解(三)

18.curl命令 curl命令简介 curl是基于URL语法在命令行方式下工作的文件传输工具,它支持FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE及LDAP等协议.curl支持HTTPS认证,并且支持HTTP的POST.PUT等方法, FTP上传, kerberos认证,HTTP上传,代理服务器, cookies, 用户名/密码认证, 下载文件断点续传,上载文件断点续传,,http代理服务器管道( proxy tunneling), 甚至它

httpd详解

_3_2HTTPD和http.md #APACHE ##相关概念 URI:统一资源标识符,全局范围内.路径. URL:统一资源定位符. PV:page view 每天页面访问量 UV:user view每天独立IP访问量 超链接:跳转文档 端口: 0-1023:众所周知,永久地分配给固定的应用使用,特权端口: 1024-41951:亦为注册端口,但要求不是特别严格,分配给程序注册为某应用使用:3306/tcp, 11211/tcp: 41952+:客户端程序随机使用的端口,动态端口,或私有端口:

【转】apue《UNIX环境高级编程第三版》第一章答案详解

原文网址:http://blog.csdn.net/hubbybob1/article/details/40859835 大家好,从这周开始学习apue<UNIX环境高级编程第三版>,在此,我要感谢网易的一个工程师朋友和室友,没有他们,我不会开始真正的学习这本书,希望大家以后开始慢慢进步.废话少说,直接上课后习题了. UNIX高级编程第一章习题答案: 1.1在系统上验证,除根目录外,目录l和l l是不同的. 答:这个验证有很多方法可使用命令ls .cd.vim等,目录.指向当前目录,目录..指

httpd详解(二)

13.脚本路径别名(CGI接口) CGI(Common Gateway Interface)是一个用于定Web服务器与外部程序之间通信方式的标准,使得外部程序能生成HTML.图像或者其他内容,而服务器处理的方式与那些非外部程序生成的HTML.图像或其他内容的处理方式是相同的.使用CGI的原因在于它是一个定义良好并被广泛支持的标准,没有CGI就不可能实现动态的Web页面,除非使用一些服务器中提供的特殊方法(如今,也有除CGI之外的其他技术逐渐在成为标准).这里使用shell进行测试使用CGI生成动

第三章 DispatcherServlet详解

3.1.DispatcherServlet作用 DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,而且负责职责的分派,而且与Spring IoC容器无缝集成,从而可以获得Spring的所有好处. 具体请参考第二章的图2-1. DispatcherServlet主要用作职责调度工作,本身主要用于控制流程,主要职责如下: 1.文件上传解析,如果请求类型是multipart将通过MultipartResolver进行文件上传解析: 2.通过Ha

ASP.NET Core微服务 on K8S(Jessetalk)(第一章:详解基本对象及服务发现)(持续更新)

课程链接:http://video.jessetalk.cn/course/explore 良心课程,大家一起来学习哈! 任务1:课程介绍 任务2:Labels and Selectors 所有资源对象(包括Pod, Service, Namespace, Volume)都可以打 Label,定义标签 Selectors:=, !=, in, not in, and 关系 Kubernetes Labels 和 Selectors #deploy.yaml apiVersion: apps/v1

OpenCV探索之路(十三):详解掩膜mask

在OpenCV中我们经常会遇到一个名字:Mask(掩膜).很多函数都使用到它,那么这个Mask到底什么呢? 一开始我接触到Mask这个东西时,我还真是一头雾水啊,也对无法理解Mask到底有什么用.经过查阅大量资料后,也对Mask有一点自己的理解了,下面就说说我的理解. 比如我要对一幅图进行抠图操作,这就要用到Mask了,那我就以抠图为例,解释Mask在里面的作用. 先上程序,再一句一句剖析. 该程序的功能就是抠出指定区域. #include "opencv2/highgui/highgui.hp

《Java开发手册》学习进程之第3章运算符详解

运算符重载是指同一个运算符在不同的情况下执行不同的操作. 例如,"+"运算符在Java中就有不同的功能: 加法运算 数值正号 字符串连接 特别要注意要在字符串连接的表达式中字符串与其他基本数据类型的变量的连接问题. 例如: (1)System.out.println(a + m + n)中,a为一String对象,m和n为int型变量(也可以是byte,short,float等其他基本数据类型).根据此表达式中的运算符优先级可知,a先与m相连接,其合并为一个字符串,然后再与n连接并以字