1、centos6、centos7安装后相应文件对比
centos6 | centos7 | 备注 | |
配置文件 |
/etc/httpd/conf/httpd.conf /etc/httpd/conf.d/*.conf |
/etc/httpd/conf/httpd.conf /etc/httpd/conf.d/*.conf |
|
服务脚本 | /etc/rc.d/init.d/httpd |
/usr/lib/systemd/system/httpd.service | |
脚本配置文件 | /etc/sysconfig/httpd | ||
主程序文件 | /usr/sbin/httpd /usr/sbin/httpd.event /usr/sbin/httpd.worker |
/usr/sbin/httpd |
httpd2.4支持pmp动态切换 |
日志文件 | /var/log/httpd{acces_log,error_log} | /var/log/httpd{acces_log,error_log} | |
模块文件路径 |
/usr/lib64/httpd/modules/ | /etc/httpd/conf.modules.d/*.conf |
|
站点文档 |
/var/www/html |
/var/www/html | |
服务控制 |
service {stats |stop|restart|status|reload|configtest} httpd |
systemctl httpd {stats |stop|restart|status} |
|
开机启动 |
chkconfig httpd on | systemctl enable httpd.service |
2、centos6主配置文件组成:/etc/httpd/conf/httpd.conf
[root@localhost ~]# grep -i "section" /etc/httpd/conf/httpd.conf
主要有三部分组成:
Section 1: Global Environment //4.1-4.4为此部分位置
Section 2: 'Main' server configuration
Section 3: Virtual Hosts
注意:一般而言,section2是定义默认主机的和匹配不到section3配置的默认处理设置
3、主配置文件格式:
directive value //指令 值
directive:不区分字符大小写
value:为路径时,是否区分字符大小写,取决于文件系统的属性4、
4、主文件常用配置:建议作个备份(#cp )
备份:[root@localhost conf]# cp -iv httpd.conf httpd.conf.bak
或者[root@localhost conf]# cp -iv httpd.conf{,.bak}
4.1、修改监听都得IP和端口:
Listen IP[:80] //监听绑定的httpd服务主机的ip地址:端口信息 ;可以监听多个地址和端口
如: Listen 80
Listen 1.1.1.1:80
Listen 2.2.2.2:80
4.2、持久连接:persistent connections
tcp连接建立后,每个资源获取完成后不会断开,而是继续等待其他资源请求的进行。那么怎么断开比较合理呢?可以通过连接的数量和时间进行限制。
数量限制:MaxKeepAliveRequests 100 //默认一个会话最大传输100个资源
时间限制:KeepAliveTimeout 15 //默认最大请求持续时间15s
持久连接的副作用:
对并发访问量较大的服务器,长连接机制会使得后续某些请求无法得到正常响应。
折中方法:
使用较短的持久连接时长,以及较少的请求数量。
持久连接配置示例:
KeepAlive Off|On //关闭或开启长连接
MaxKeepAliveRequests 100
KeepAliveTimeout 15
测试方法:
telnet WEB_SERVER_IP PORT
GET /URL HTTP/1.1
HOST: WEB_SERVER_IP
如:
[root@localhost ~]# telnet 192.168.0.105 80
Trying 192.168.0.105...
Connected to 192.168.0.105.
Escape character is '^]'.
GET /test.html http/1.1
host 192.168.0.105
注意:敲两次回车,第一次是换行符,第二次是回车符
4.3、配置MPM机制:(multipath processing modules:多路处理模块)
httpd-2.2不支持同时编译多个MPM模块,所以只能编译选定要使用的那个模块;
centos6的MPM包为此专门提供了三个应用程序文件:httpd(prefork)、httpd.worker、httpd.event,分别用于实现对不同的MPM机制的支持。
[root@localhost conf.d]# ps aux | grep httpd
root 4229 0.0 0.0 105444 1000 pts/0 S+ 10:50 0:00 less /etc/httpd/conf/httpd.conf
root 4699 0.0 0.3 173484 3740 ? Ss 11:55 0:00 /usr/sbin/httpd //使用httpd(prefork)
[root@localhost conf.d]# /usr/sbin/httpd -l
默认使用的为:/usr/sbin/httpd,其为prefork的MPM模块;
查看httpd程序的模块列表:
查看静态编译的模块:[root@localhost conf.d]# httpd -L | less
产看静态编译及动态编译的模块:[root@localhost conf.d]# httpd -M
更换使用httpd程序,以支持MPM机制:
修改脚本配置文件:/etc/sysconfig/httpd;更改如下配置:
HTTPD=/usr/sbin/httpd.worker.{worker,event}
[root@localhost conf.d]# ps aux | grep httpd
root 4229 0.0 0.0 105444 1000 pts/0 S+ 10:50 0:00 less /etc/httpd/conf/httpd.conf
root 4561 0.0 0.3 173688 3944 ? Ss 11:50 0:00 /usr/sbin/httpd.worker //使用httpd(worker)
注意:重启服务方可生效,event在centos6处于测试阶段。
[root@localhost conf.d]# watch -n1 `ps aux | grep httpd` //每1s刷新一次`ps aux | grep httpd` 命令执行的结果
4.3.2、MPM配置:
prefork的配置:
<IfModule prefork.c>
StartServers 8 //进程启动时,启动8个子进程
MinSpareServers 5//最小空闲进程数量
MaxSpareServers 20 //最大空闲进程数量
ServerLimit 256 //最大服务器进程数量
MaxClients 256 //允许启动的服务器进程的最大数目,即最大并发访问量
MaxRequestsPerChild 4000 //每个进程可以处理的最大请求,达到后即销毁,在创建一个进程
</IfModule>
worker的配置:
<IfModule worker.c>
StartServers 4 //进程启动时,启动4个子进程
MaxClients 300 //同时客户端连接的最大数目
MinSpareThreads 25 //最小空闲线程
MaxSpareThreads 75 //最大空闲线程
ThreadsPerChild 25 //每个进程生成的线程
MaxRequestsPerChild 0 //每个进程处理的请求不受限制
</IfModule>
pv:page view
uv:user view
4.4、DSO:dynamic shared object,动态共享对象
配置指令实现模块加载:
方法:LoadModule <MOD_NAME> <MOD_PATH>
MOD_NAME:模块名称
MOD_PATH:模块路径,可使用相对路径和绝对路径,相对路径是对于SERVEROOT而言,默认/etc/httpd
[root@localhost httpd]# ls /etc/httpd/modules/
mod_actions.so mod_authz_owner.so mod_ext_filter.so mod_proxy_ftp.so
mod_alias.so mod_authz_user.so mod_filter.so mod_proxy_http.so
mod_asis.so mod_autoindex.so mod_headers.so mod_proxy_scgi.so
mod_auth_basic.so mod_cache.so mod_ident.so mod_proxy.so
mod_auth_digest.so mod_cern_Meta.so mod_include.so mod_reqtimeout.so
mod_authn_alias.so mod_cgid.so mod_info.so mod_rewrite.so
mod_authn_anon.so mod_cgi.so mod_ldap.so mod_setenvif.so
mod_authn_dbd.so mod_dav_fs.so mod_log_config.so mod_speling.so
mod_authn_dbm.so mod_dav.so mod_log_forensic.so mod_status.so
mod_authn_default.so mod_dbd.so mod_logio.so mod_substitute.so
mod_authn_file.so mod_deflate.so mod_mime_magic.so mod_suexec.so
mod_authnz_ldap.so mod_dir.so mod_mime.so mod_unique_id.so
mod_authz_dbm.so mod_disk_cache.so mod_negotiation.so mod_userdir.so
mod_authz_default.so mod_dumpio.so mod_proxy_ajp.so mod_usertrack.so
mod_authz_groupfile.so mod_env.so mod_proxy_balancer.so mod_version.so
mod_authz_host.so mod_expires.so mod_proxy_connect.so mod_vhost_alias.so
DSO配置示例:
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
4.5、定义“main server”文档页面路径,中心主机配置
定义页面资源访问的根:即资源都放在此目录下
DocumentRoot "/var/www/html"
文档路径映射:
DocumentRoot指向的路径为URL路径的起始位置,其相当于站点;
在centos6的httpd-2.2中修改了文档页面路径,重启或reload后生效;但在httpd-2.4中必须修改站点访问控制才能生效。
4.6、站点访问控制:常见机制
可基于两种机制指明对哪些资源进行何种访问控制。
·文件系统路径
·URL路径
文件系统路径:/var/www/html/index.html
URL: /index.html
4.6.2、站点访问控制格式:
文件系统路径访问控制:
方法一:对目录
<Directory "路径" > //对目录及此目录下的所有资源内容,定义指定产生的效用
指令
</Directory >
<File"文件路径" >
指令
</File >
方法三:基于模式匹配
<FileMatch "PATTERN" > //基于匹配模式进程访问控制,但由于效率低不建议使用此种方法
指令
</FileMatch >
URL路径访问控制
方法一:
<Location "文件或目录" >
指令
</Location >
方法二:
<LocationMatch "路径匹配"
指令
</LocationMatch>
4.6.3、<directory>中基于“源地址”实现访问控制:
①、options:定义此目录中资源访问的特性,后跟一个或多个空白字符分隔的“选项”列表
常见的选项:
Indexes:指定的URL路径下不存在与定义的主页面资源相符的资源文件时,返回索引列表给用户,indexes在下载站点中有用,否则很危险。
FollowSymLinks:允许跟踪符号链接文件指向的源文件;此选项也很危险
SymLinksifOwnerMatch
ExecCGI
MultiViews
建议:options None
②、AllowOverride:与访问控制相关的哪些指令可以放在(.htaccess)文件中;.htaccess在每个目录下都可以有一个;
All:所有指令都可以存放
None:所有指令都不可以存放
建议:AllowOverride None
③、order和allow、deny:基于源地址作访问控制
order:定义生效次序,写在后面的表示默认法则
Allow from
Deny from
来源地址:IP或网络,格式如下:
172.16
172.16.0.0
172.16.0.0/16
172.16.0.0/255.255.255.0
格式:DirectoryIndex index.html index.html.var
4.8、定义路径别名:
格式:Alias /URL "/PATH/TO/SOMEDIR"
示例解析:
定义文档根路径:
DocumentRoot "/var/www/html"
本机资源路径:/var/www/html/bash-4.4.rpm
URL路径:http://magedu.com/bash-4.4.rpm
若果定义了别名:如下:
Alias /download/ "/rpms/pub/" //注意“/”符号要对应
此时:
URL路径:http://magedu.com/download/bash-4.4.rpm
对应的本地文档为:
/var/www/html/rpms/pub/bash-4.4.rpm
但是URL路径:http://magedu.com/images/logo.png
对应的本地文档仍为:/var/www/html/images/logo.png
注意:只有定义了路径别名的download路径才会被转到rpms/pub路径下
示例:
在配置文件中随便找个位置添加,建议和系统中的Alias放一起
Alias /download/ "/hostsfile/"
4.9、设定默认字符集:
AddDefaultCharset UTF-8
中文字符集:GBK、GBK2312、GBK18030
4.10、日志设定:
日志类型:访问日志、错误日志(程序产生的错误、用户访问错误)
错误日志:ErrorLog logs/error_log //logs是一个符号链接文件,指向/var/logs
日志等级:LogLevel warn //日志等级有:debug,info,notice,warn,error,crit,alert,emerg.
访问日志:CustomLog logs/access_log common //common指明日志格式的格式串名称。
它定义在此处:
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
%h:remotehost;客户端IP地址
%l:remotehostname;远程用户名,通常为一个横杠“-”
%u:remoteuser;分为登录访问时,为一个横杠“-”
%t:服务器收到请求时的时间
\%r\:请求报文的首行;GET /URL HTTP/1.0,记录了此次请求的方法、url、以及协议版本。
%>s:响应状态码
%b:不包含响应报文的http首部,响应报文的大小(单位是字节)
\"%{Referer}i\:请求报文中首部“referer”的值,即从哪个页面中的超链接跳转至当前页面的。
\"%{User-Agent}i\:请求报文中首部“user-agent”的值,即发出请求的程序。
格式串中各参数意义参考:httpd.apache.org网站查看日志中的格式意义。
4.11、基于用户的访问控制
认证质询:authenticate
服务器响应给客户端一个www-authenticate:响应码为401,拒绝客户端请求,并说明要求客户端提供账号和密码
认证:authorization:
客户端填入账号和密码后再次发送请求报文,认证通过时,则服务器发送响应的资源
认证方式有两种:
basic:明文
digest:消息摘要认证
安全域:
需要认证后方能访问的路径,应该通过名称对其进行标识,以便于告知用户认证的原因
用户账号和密码的存放:
虚拟账号:仅用于访问某些服务时用到的认证标识。
存储格式:
文本文件
ldap目录存储
basic认证配置格式:
①、定义安全域:
<directory "文件路径">
Options None
Allowoverride None
AuthType Basic
AuthName "sting" //认证时的提示信息
AuthuserFile "认证时使用的文件" //指定用户认证的文件
Require user username1 username2 ... //仅允许哪个用户进行访问
Require group ....
AuthGroupFile "/PATH/TO/HTTPD_GROUP_FILE" //指定组认证的文件
Require valid-user //允许账号文件(authuserfile)中的所有用户登录。
</directory>
②、提供账号和密码存储文件(文本文件),使用专用命令完成此类文件的创建和用户管理
htpasswd命令:专门用来对文本文件格式的用户名和密码管理的工具
命令格式:htpasswd [options] /PATH/TO/HTTPD_PASSWD_FILE USERNAME
OPTIONS:
-c:自动创建此处指定的文件,因此仅应该在此文件不存在时使用。
-m:md5格式加密
-s:sha格式加密
③、重载httpd服务。
或 #service httpd configtest //检查配置文件语法错误
#service httpd reload
basic用户认证配置示例:
① 定义安全域
<Directory "/var/www/html">
OPtions None
Order allow,deny
Allow from all
AllowOverride None
AuthType Basic
AuthName "attions please"
AuthUserFile /etc/httpd/conf/.htpasswd
Require user tom
</Directory>
②、创建用户名和密码:
[root@localhost ~]# htpasswd -c /etc/httpd/conf/.htpasswd tom //创建密码文件并创建用户,仅在第一次时创建文件
[root@localhost ~]# htpasswd -m /etc/httpd/conf/.htpasswd jerry //在原有的文件中创建用户和密码
③、重载服务
[root@localhost ~]# httpd -t
[root@localhost ~]# service httpd reload
basic用户组认证配置格式:
①、定义安全域:
<directory "文件路径">
Options None
Allowoverride None
AuthType Basic
AuthName "sting" //认证时的提示信息
AuthGroupFile "/PATH/TO/HTTPD_GROUP_FILE" //指定组认证的文件
Require valid-user //允许账号文件中的所有用户登录。一般和Require user使用其中之一。
</directory>
·使用专用命令(htpasswd)完成此类文件的创建和用户管理;htpasswd命令:专门用来对文本文件格式的用户名和密码管理的工具
格式如下:每一行定义一个组,然后把用户加到组中。
Group_name:username1 username2 username...
htpasswd命令格式:htpasswd [options] /PATH/TO/HTTPD_PASSWD_FILE USERNAME
OPTIONS:
-c:自动创建此处指定的文件,因此仅应该在此文件不存在时使用。
-m:md5格式加密
-s:sha格式加密
③、重载httpd服务。
或 #service httpd configtest //检查配置文件语法错误
#service httpd reload
4.12、虚拟主机配置
站点标识:socket
IP相同,但端口不同 //用户访问时需要加端口号
IP不同,但端口仍为默认端口 //每个站点一个IP地址,但是对于外网来说也要将其映射为不同的外网IP地址,用户方可访问
IP相同、端口相同、但FQDN不同,它通过在http请求报文首部标识(如:HOST://www.magedu.com)来区分不同站点,
虚拟主机实现方式:以下三者可同时使用。
基于IP:为每个虚拟主机准备至少一个IP地址
基于PORT:为每个虚拟主机使用使用至少一个独立的PORT
基于FQDN:为每个虚拟主机使用至少一个FQDN。
注意:一般虚拟主机不要与中心主机混用;因此要使用虚拟主机,得先禁用“main主机”
禁用方法:注释掉主机的DocumentRoot指定即可。
虚拟主机的配置方法:每个虚拟主机专用配置段。
<VirtualHost IP:PORT> //定义虚拟主机的IP和port
ServerName FQDN
DocumentRoot "/path/to/root_path" //指定站点路径
</VirtualHost>
其他可用指令:
ServerAlias:虚拟主机的别名,可多次使用
ErrorLog:虚拟主机专用的错误日志
CustomLog:虚拟主机的专用访问日志
<Directory " ">
指令....
</Directory>
Alias //路径别名
4.12.1、虚拟主机基于不同IP地址配置示例:
①、配置主机IP地址:eth0:192.168.0.105;eth0:0:192.168.0.112;eth0:1:192.168.0.113
②、创建站点路径:[root@localhost ~]# mkdir -pv /www/{a.com,b.net,c.org}/htdocs
③、创建站点内网页:
[root@localhost ~]# vim /www/a.com/htdocs/index.html
[root@localhost ~]# vim /www/b.net/htdocs/index.html
[root@localhost ~]# vim /www/c.org/htdocs/index.html
④、注释掉中心主机配置:#DocumentRoot "/var/www/html"
⑤、添加虚拟主机:建议在/etc/httpd/conf.d/目录下新建,便于以后自动化运维
[root@localhost ~]# cat /etc/httpd/conf.d/vhost.conf
<VirtualHost 192.168.0.105:80>
ServerName www.a.com
DocumentRoot "/www/a.com/htdocs/"
</Virtualhost>
<VirtualHost 192.168.0.112:80>
ServerName www.b.net
DocumentRoot "/www/b.net/htdocs/"
</Virtualhost>
<VirtualHost 192.168.0.113:80>
ServerName www.c.org
DocumentRoot "/www/c.org/htdocs/"
</Virtualhost>
[root@localhost ~]#
⑥、检查配置文件语法:
[root@localhost ~]# httpd -t
⑦、重启服务:
[root@localhost ~]# service httpd reload
⑧、验证:
http://192.168.0.105
http://192.168.0.112
http://192.168.0.113
注意:验证时需关闭selinux、iptables,否则不成功。
4.12.2、虚拟主机基于同一个IP地址、不同端口配置示例:
[root@localhost conf.d]# cat /etc/httpd/conf.d/vhost.conf
listen 808 //添加监听端口,在主配置文件中添加也是一样的
listen 8080 //添加监听端口,在主配置文件中添加也是一样的
<VirtualHost 192.168.0.105:80>
ServerName www.a.com
DocumentRoot "/www/a.com/htdocs/"
</Virtualhost>
<VirtualHost 192.168.0.105:808>
ServerName www.b.net
DocumentRoot "/www/b.net/htdocs/"
</Virtualhost>
<VirtualHost 192.168.0.105:8080>
ServerName www.c.org
DocumentRoot "/www/c.org/htdocs/"
</Virtualhost>
[root@localhost conf.d]#
4.12.3、虚拟主机基于FQDN配置示例:
[root@localhost conf.d]# cat vhost.conf
NameVirtualHost 192.168.0.105:80 //如果要基于FQDN访问网站,httpd-2.2中必须有此项,httpd-2.4中可以没有,此配置在主配置文件项中添加也可以。
<VirtualHost 192.168.0.105:80>
ServerName www.a.com
DocumentRoot "/www/a.com/htdocs/"
</Virtualhost>
<VirtualHost 192.168.0.105:80>
ServerName www.b.net
DocumentRoot "/www/b.net/htdocs/"
</Virtualhost>
<VirtualHost 192.168.0.105:80>
ServerName www.c.org
DocumentRoot "/www/c.org/htdocs/"
</Virtualhost>
[root@localhost conf.d]#
注意:测试是基于FQDN的,如果没有Dns,可以在要访问的的主机的hosts文件中添加名称映射关系。
4.13、status页面(httpd进程状态页面):主配置文件
①、LoadModule status_module modules/mod_status.so //确保主文件中有加载此模块,否则status不可用。
②、启用<Location /server-status>
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from .example.com //需要考虑安全访问。
</Location>
③、检查配置文件语法:
#httpd -t
④、找一个可以的页面,在其后面加上server-status
如:http://www.a.com/server-status
http://www.a.com/server-status Apache Server Status for www.a.comServer Version: Apache/2.2.15 (Unix) DAV/2Server Built: Dec 5 2012 04:03:01Current Time: Wednesday,07-Feb-2018 20:54:26 CSTRestart Time: Wednesday,07-Feb-2018 20:54:20 CSTParent Server Generation: 0Server uptime: 5 seconds1 requests currently being processed,7 idle workers__W_____........................................................................................................................................................................................................................................................scoreboard Key:"_" Waiting for Connection,"S" Starting up,"R" Reading Request,"W" Sending Reply,"K" Keepalive (read),"D" DNS Lookup,"C" Closing connection,"L" Logging,"G" Gracefully finishing,"I" Idle cleanup of worker,"." Open slot with no current processPID Key: 6643 in state: _,6644 in state: _,6645 in state: W 6646 in state: _,6647 in state: _,6648 in state: _ 6649 in state: _,6650 in state: _,To obtain a full report with current status information you need to use the ExtendedStatus On directive.Apache/2.2.15 (Red Hat) Server at www.a.com Port 80 |