httpd 2.4 常用配置
yum安装后默认配置文件
1 ~]# cat /etc/httpd/conf/httpd.conf 2 ServerRoot "/etc/httpd" 3 Listen 80 4 Include conf.modules.d/*.conf 5 User apache 6 Group apache 7 ServerAdmin root@localhost 8 ServerName www.example.com:80 910 AllowOverride none 11 Require all denied 12 13 DocumentRoot "/var/www/html" 14 15 AllowOverride None 16 Require all granted 17 18 19 Options Indexes FollowSymLinks 20 AllowOverride None 21 Require all granted 22 23 24 DirectoryIndex index.html 25 26 27 Require all denied 28 29 ErrorLog "logs/error_log" 30 LogLevel warn 31 32 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 33 LogFormat "%h %l %u %t \"%r\" %>s %b" common 34 35 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio 36 37 CustomLog "logs/access_log" combined 38 39 40 ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" 41 42 43 AllowOverride None 44 Options None 45 Require all granted 46 47 48 TypesConfig /etc/mime.types 49 AddType application/x-compress .Z 50 AddType application/x-gzip .gz .tgz 51 AddType text/html .shtml 52 AddOutputFilter INCLUDES .shtml 53 54 AddDefaultCharset UTF-8 55 56 MIMEMagicFile conf/magic 57 58 EnableSendfile on 59 IncludeOptional conf.d/*.conf
配置格式:directive value;directive 不区分字符大小写;value 为路径时,是否区分大小写,取决于文件系统。
1、显示服务器版本信息
ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full
ServerTokens Prod #建议关闭显示服务器版本号
2、修改监听的IP和Port
Listen [ip:]port 省略ip表示本机所有IP都监听,至少要有一个监听,此指令可重复出现多次
Listen 80
3、持久连接
Persistent Connection:连接建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成,默认关闭持久连接
KeepAlive On #启用长连接功能
KeepAliveTimeout 15 #保持连接15秒
MaxKeepAliveRequests 100 #断开条件
4、MPM多路处理模块
~]# httpd -M |grep mpm
mpm_prefork_module (shared) #默认prefork处理模式
~]# vim /etc/httpd/conf.modules.d/00-mpm.conf #在此文件中配置使用那种处理模块
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
#LoadModule mpm_event_module modules/mod_mpm_event.so
5、DSO加载动态模块配置
配置指定实现模块加载格式: LoadModule
示例:
~]# vim /etc/httpd/conf.modules.d/00-base.conf
LoadModule auth_basic_module modules/mod_auth_basic.so
6、定义'Main' Server的文档页面路径
DocumentRoot "/path" 指向的路径为URL路径的起始位置
DocumentRoot "/var/www/html"
Require all granted #授权可以访问
7、定义站点主页面
DirectoryIndex index.html index.php
8、站点访问控制常见机制
基于文件系统路径:
#控制文件夹
...
#控制指定文件
...
#支持正则表达式
...
基于URL路径:
<Location "">
...
Location>
<LocationMatch "PATTERN">
...
LocationMatch>
1)Options [+|-]option [[+|-]option] ... :后跟1个或多个以空白字符分隔的选项列表在选项前的 +,- 表示增加或删除指定选项,默认Options FollowSymlinks
- Indexes:指明的URL路径下不存在与定义的主页面资源相符的资源文件时,返回索引列表给用户
- FollowSymLinks:允许访问符号链接文件所指向的源文件
- All:全部允许
- None:全部禁用
2)AllowOverride All|None|directive-type [directive-type] ... :与访问控制相关的哪些指令可以放在指定目录下的.htaccess(由AccessFileName指定)文件中,覆盖之前的配置指令;只对
- All: 所有指令都有效
- None:.htaccess 文件无效
- AuthConfig Indexes 除了AuthConfig 和Indexes的其它指令都无法覆盖
3)Order Deny,Allow :定义生效次序;写在后面的表示默认法则,2.4版本不再支持
- Allow from和Deny from:定义客户端地址,拒绝或允许
例:拒绝访问站点下所有以.conf结尾的文件
DocumentRoot "/data/website"
Require all granted
Require all denied
例:允许访问符号链接文件所指向的源文件,但是不允许返回索引列表给用户
Require all granted
Options -Indexes +FollowSymLinks
9、中“基于源地址”实现访问控制
不允许指定的主机访问
DocumentRoot "/data/website"
Require all granted
Require not ip 192.168.0.2 #不允许0.2的主机访问
只允许指定主机访问
DocumentRoot "/data/website"
Require all denied
Require ip 192.168.0.2 #只允许0.2主机访问
10、日志设定
~]# vim /etc/httpd/conf/httpd.conf
ErrorLog "logs/error_log" #错误日志记录文件
LogLevel warn #默认warn级别的错误记录
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
CustomLog "logs/access_log" combined #默认日志记录方式
错误日志的 LogLevel 可选:debug, info, notice, warn, error,crit, alert, emerg
访问日志:
- %h 客户端IP地址
- %l 远程用户,启用mod_ident才有效,通常为减号“-”
- %u 验证(basic,digest)远程用户,非登录访问时,为一个减号“-”
- %t 服务器收到请求时的时间
- %r First line of request,即表示请求报文的首行;记录了此次请求的“方法”,“URL”以及协议版本
- %>s 响应状态码
- %b 响应报文的大小,单位是字节;不包括响应报文http首部
- %{Referer}i 请求报文中首部“referer”的值;即从哪个页面中的超链接跳转至当前页面的
- %{User-Agent}i 请求报文中首部“User-Agent”的值;即发出请求的应用程序
建议:自定义日志记录格式
LogFormat "%h %l %u %{%F %T}t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" custlog
CustomLog "logs/access_log" custlog
</IfModule>
11、设定默认字符集
AddDefaultCharset utf-8 #设置默认字符集为utf-8,默认为AddDefaultCharset Off
Require all granted
AddDefaultCharset utf-8
12、定义路径别名
格式: Alias /URL/ "/PATH/"
Alias /web2 /data/website2
Require all granted
访问:http://192.168.0.7/web2
则是访问/data/website
这个目录下的站点
13、基于用户的访问控制
允许账号文件中的所有用户登录访问:Require valid-user
例:基于单用户认证
1)定义安全域
Alias /admin "/data/admin"
<Directory "/data/admin">
AuthType Basic
AuthName "please input your user and password!"
AuthUserFile "conf.d/.htuser"
Require user admin
Directory>
2)提供账号和密码存储(文本文件)
~]# htpasswd -mc /etc/httpd/conf.d/.htuser admin
~]# cat /etc/httpd/conf.d/.htuser
admin:$apr1$Yfglmncl$BC1hebCpPjn1Sn.azt/Zu.
~]# systemctl restart httpd
3)测试访问 :http://192.168.0.7/admin/
,输入用户名密码即可访问
例:基于组账号进行认证
1)定义安全域
Alias /admin "/data/admin"
"/data/admin">
AuthType Basic
AuthName "please input your user and password!"
AuthUserFile "conf.d/.htuser"
AuthGroupFile "conf.d/.htgroup"
Require group gadmin gadmin2
2)提供账号和密码存储(文本文件)
~]# htpasswd -c /etc/httpd/conf.d/.htuser tom
~]# htpasswd /etc/httpd/conf.d/.htuser jerry
~]# htpasswd /etc/httpd/conf.d/.htuser maria
~]# echo 'gadmin: tom jerry' > /etc/httpd/conf.d/.htgroup
~]# echo 'gadmin2: tom maria' >> /etc/httpd/conf.d/.htgroup
3)测试访问 :http://192.168.0.7/admin/
,输入用户名密码即可访问
14、基于模块mod_userdir.so实现用户家目录的http共享
~]# vim /etc/httpd/conf.d/userdir.conf
#UserDir disabled
UserDir public_html
AuthType Basic
AuthName "user1 home dir"
AuthUserFile "conf.d/.htuser"
Require user user1
~]# htpasswd -c /etc/httpd/conf.d/.htuser user1
~]# systemctl restart httpd
~]# su -user1
~]$ mkdir public_html
~]$ echo "user1 home dir" > public_html/index.html
~]$ setfacl -m u:apache:x /home/user1/
访问:http://192.168.0.7/~user1/
站点,输入密码即可登录
15、ServerSignature On | Off | EMail
当客户请求的网页并不存在时,服务器将产生错误文档,如果于打开了ServerSignature选项,错误文档的最后一行将包含服务器的名字、Apache的版本等信息;如果不对外显示这些信息,就可以将这个参数设置为Off;设置为Email,将显示ServerAdmin 的Email提示;2.4版本默认值关闭,2.2版本默认开启
16、status页面
LoadModule status_module modules/mod_status.so 确认此模块已加载
httpd]# vim conf.d/myhttp.conf
SetHandler server-status
Require all granted
~]# systemctl restart httpd
访问http://192.168.0.7/status
查看服务器状态信息
- "**_**" 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 空闲sock个数
17、虚拟主机
注意:一般虚拟机不要与main主机混用;因此,要使用虚拟主机,一般先禁用main主机;注释中心主机的DocumentRoot指令即可。
2.4版本基于FQDN的虚拟主机不再需要NameVirutalHost指令
data]# mkdir website{1..3}
data]# echo 'website 1' > website1/index.html
data]# echo 'website 2' > website2/index.html
data]# echo 'website 3' > website3/index.html
~]# vim /etc/httpd/conf/httpd.conf
#Listen 80
#DocumentRoot "/var/www/html"
三种实现方案:
- 基于PORT:为每个虚拟主机使用至少一个独立的PORT
~]# vim /etc/httpd/conf.d/virtualhost.conf
Listen 81
Listen 82
Listen 83
Require all granted
81 >
DocumentRoot "/data/website1"
ServerName www.web1.com
ErrorLog "logs/web1_error_log"
TransferLog "logs/web1_access_log"
82 >
DocumentRoot "/data/website2"
ServerName www.web2.com
ErrorLog "logs/web2_error_log"
TransferLog "logs/web2_access_log"
83 >
DocumentRoot "/data/website3"
ServerName www.web3.com
ErrorLog "logs/web3_error_log"
TransferLog "logs/web3_access_log"
~]# systemctl restart httpd
分别访问:
http://192.168.0.7:81
和http://192.168.0.7:82
和http://192.168.0.7:83
- 基于IP:为每个虚拟主机准备至少一个IP地址
~]# ip a a 192.168.0.11/24 dev eth0
~]# ip a a 192.168.0.12/24 dev eth0
~]# ip a a 192.168.0.13/24 dev eth0
~]# vim /etc/httpd/conf.d/virtualhost.conf
Listen 80
Require all granted
192.168 .0.11:80>
DocumentRoot "/data/website1"
ServerName www.web1.com
ErrorLog "logs/web1_error_log"
TransferLog "logs/web1_access_log"
192.168 .0.12:80>
DocumentRoot "/data/website2"
ServerName www.web2.com
ErrorLog "logs/web2_error_log"
TransferLog "logs/web2_access_log"
192.168 .0.13:80>
DocumentRoot "/data/website3"
ServerName www.web3.com
ErrorLog "logs/web3_error_log"
TransferLog "logs/web3_access_log"
~]# systemctl restart httpd
分别访问:
192.168.0.11
和192.168.0.12
和192.168.0.13
- 基于FQDN:为每个虚拟主机使用至少一个FQDN
~]# vim /etc/httpd/conf.d/virtualhost.conf
Listen 80
Require all granted
80 >
DocumentRoot "/data/website1"
ServerName www.web1.com
ErrorLog "logs/web1_error_log"
TransferLog "logs/web1_access_log"
80 >
DocumentRoot "/data/website2"
ServerName news.web2.com
ErrorLog "logs/web2_error_log"
TransferLog "logs/web2_access_log"
80 >
DocumentRoot "/data/website3"
ServerName bbs.web3.com
ErrorLog "logs/web3_error_log"
TransferLog "logs/web3_access_log"
~]# systemctl restart httpd
客户端测试:
~]# vim /etc/hosts 添加以下内容 192.168.0.7 www.web1.com news.web2.com bbs.web3.com ~]# curl www.web1.com ~]# curl news.web2.com ~]# curl bbs.web3.com
18、使用mod_deflate模块压缩页面优化传输速度
LoadModule deflate_module modules/mod_deflate.so 模块默认已经加载
# httpd -M |grep deflate
deflate_module (shared)
conf.d]# vim myhttpd.conf
# 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
DeflateCompressionLevel 9 #压缩比为 9
19、启用Sendfile功能
~]# vim /etc/httpd/conf/httpd.conf
EnableSendfile On