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机制的支持。
确认现在使用的是哪个程序文件(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的配置:
StartServers 8 //进程启动时,启动8个子进程
MinSpareServers 5 //最小空闲进程数量
MaxSpareServers 20 //最大空闲进程数量
ServerLimit 256 //最大服务器进程数量
MaxClients 256 //允许启动的服务器进程的最大数目,即最大并发访问量
MaxRequestsPerChild 4000 //每个进程可以处理的最大请求,达到后即销毁,在创建一个进程
worker的配置:
StartServers 4 //进程启动时,启动4个子进程
MaxClients 300 //同时客户端连接的最大数目
MinSpareThreads 25 //最小空闲线程
MaxSpareThreads 75 //最大空闲线程
ThreadsPerChild 25 //每个进程生成的线程
MaxRequestsPerChild 0 //每个进程处理的请求不受限制
pv:page view
uv:user view
4.4、DSO:dynamic shared object,动态共享对象
配置指令实现模块加载:
方法:LoadModule
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、站点访问控制格式:
文件系统路径访问控制:
方法一:对目录
指令
方法二:对单个文件
指令
方法三:基于模式匹配
指令
URL路径访问控制
方法一:
指令
方法二:
指令
4.6.3、
①、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
4.7、定义站点主页面:
格式: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:消息摘要认证
安全域:
需要认证后方能访问的路径,应该通过名称对其进行标识,以便于告知用户认证的原因
用户账号和密码的存放:
虚拟账号:仅用于访问某些服务时用到的认证标识。
存储格式:
文本文件
sql数据库
ldap目录存储
basic认证配置格式:
①、定义安全域:
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)中的所有用户登录。
②、提供账号和密码存储文件(文本文件),使用专用命令完成此类文件的创建和用户管理
htpasswd命令:专门用来对文本文件格式的用户名和密码管理的工具
命令格式:htpasswd [options] /PATH/TO/HTTPD_PASSWD_FILE USERNAME
OPTIONS:
-c:自动创建此处指定的文件,因此仅应该在此文件不存在时使用。
-m:md5格式加密
-s:sha格式加密
③、重载httpd服务。
#httpd -t //检查配置文件语法错误
或 #service httpd configtest //检查配置文件语法错误
#service httpd reload
basic用户认证配置示例:
① 定义安全域
OPtions None
Order allow,deny
Allow from all
AllowOverride None
AuthType Basic
AuthName "attions please"
AuthUserFile /etc/httpd/conf/.htpasswd
Require user tom
②、创建用户名和密码:
[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用户组认证配置格式:
①、定义安全域:
Options None
Allowoverride None
AuthType Basic
AuthName "sting" //认证时的提示信息
AuthGroupFile "/PATH/TO/HTTPD_GROUP_FILE" //指定组认证的文件
Require valid-user //允许账号文件中的所有用户登录。一般和Require user使用其中之一。
②、提供账号和密码存储文件(文本文件),
·使用专用命令(htpasswd)完成此类文件的创建和用户管理; htpasswd命令:专门用来对文本文件格式的用户名和密码管理的工具
·然后使用文本编辑工具(如vim),进行创建组用户文件;
格式如下:每一行定义一个组,然后把用户加到组中。
Group_name:username1 username2 username...
htpasswd命令格式:htpasswd [options] /PATH/TO/HTTPD_PASSWD_FILE USERNAME
OPTIONS:
-c:自动创建此处指定的文件,因此仅应该在此文件不存在时使用。
-m:md5格式加密
-s:sha格式加密
③、重载httpd服务。
#httpd -t //检查配置文件语法错误
或 #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指定即可。
虚拟主机的配置方法:每个虚拟主机专用配置段。
ServerName FQDN
DocumentRoot "/path/to/root_path" //指定站点路径
其他可用指令:
ServerAlias:虚拟主机的别名,可多次使用
ErrorLog:虚拟主机专用的错误日志
CustomLog:虚拟主机的专用访问日志
指令....
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
ServerName www.a.com
DocumentRoot "/www/a.com/htdocs/"
ServerName www.b.net
DocumentRoot "/www/b.net/htdocs/"
ServerName www.c.org
DocumentRoot "/www/c.org/htdocs/"
[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 //添加监听端口,在主配置文件中添加也是一样的
ServerName www.a.com
DocumentRoot "/www/a.com/htdocs/"
ServerName www.b.net
DocumentRoot "/www/b.net/htdocs/"
ServerName www.c.org
DocumentRoot "/www/c.org/htdocs/"
[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中可以没有,此配置在主配置文件项中添加也可以。
ServerName www.a.com
DocumentRoot "/www/a.com/htdocs/"
ServerName www.b.net
DocumentRoot "/www/b.net/htdocs/"
ServerName www.c.org
DocumentRoot "/www/c.org/htdocs/"
[root@localhost conf.d]#
注意:测试是基于FQDN的,如果没有Dns,可以在要访问的的主机的hosts文件中添加名称映射关系。
4.13、status页面(httpd进程状态页面):主配置文件
①、LoadModule status_module modules/mod_status.so //确保主文件中有加载此模块,否则status不可用。
②、启用
SetHandler server-status
Order deny,allow
Deny from all
Allow from .example.com //需要考虑安全访问。
③、检查配置文件语法:
#httpd -t
④、找一个可以的页面,在其后面加上server-status
如:http://www.a.com/server-status
http://www.a.com/server-status Apache Server Status for www.a.com Server Version: Apache/2.2.15 (Unix) DAV/2 Server Built: Dec 5 2012 04:03:01 Current Time: Wednesday, 07-Feb-2018 20:54:26 CST Restart Time: Wednesday, 07-Feb-2018 20:54:20 CST Parent Server Generation: 0 Server uptime: 5 seconds 1 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 process PID 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 |