19.2、httpd2.2配置介绍

前端之家收集整理的这篇文章主要介绍了19.2、httpd2.2配置介绍前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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的配置:

<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


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认证配置格式:

①、定义安全域:

<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服务。

#httpd -t //检查配置文件语法错误

或 #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命令:专门用来对文本文件格式的用户名和密码管理的工具

·然后使用文本编辑工具(如vim),进行创建组用户文件

格式如下:每一行定义一个组,然后把用户加到组中。

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

猜你在找的CentOS相关文章