- 默认虚拟主机
- Apache 用户认证
- 域名跳转
- Apache 访问日志
- 使 Apache 访问日志不记录静态文件
- 访问日志切割
- 静态元素过期时间
~在同一台 Apache 服务器上,配置两个站点(虚拟主机),分别对应不同的主机名。当客户程序向 Apache 服务器发出请求时,客户想要访问的主机名也通过请求头中的“Host:”语句传递给 Apache 服务器。Apache 服务器程序接收到这个请求后,可以通过检查“Host:”语句,来判定客户程序请求是哪个虚拟主机的服务,然后再进一步的处理。
~对于未在 Apache 服务器中定义的主机名,如果转到该 Apache 服务器,则将访问默认虚拟主机
一旦虚拟主机生效,httpd.conf 中的 ServerName、DirectoryRoot 等配置就失效了
## 在 httpd.conf 文件中搜索关键字:vhosts
[root@VMware01 ~]# vim /usr/local/apache2.4/conf/httpd.conf
.
.
.
475 # Virtual hosts
476 Include conf/extra/httpd-vhosts.conf # 将该行的注释去掉
[root@VMware01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
23 80>
24 DocumentRoot "/usr/local/apache2.4/htdocs/upload/" # 定义默认虚拟主机的根目录
25 ServerName www.111.com # 定义默认虚拟主机的主机名
26 ServerAlias 111.com # 定义默认虚拟主机的别名
27 ErrorLog "logs/111.com-error_log" # 定义错误日志路径及命名
28 CustomLog "logs/111.com-access_log" common # 定义访问日志路径及命名以及日志类型
29
30
31
32 80> # 定义第二台虚拟主机的相关信息,配置项与第一台相同
33 DocumentRoot "/usr/local/apache2.4/htdocs/test/"
34 ServerName www.kkk.com
35 ServerAlias kkk.com
36 ErrorLog "logs/kkk.com-error_log"
37 CustomLog "logs/kkk.com-access_log" common
38
[root@VMware01 ~]# apachectl -t #检测配置与法
Syntax OK
[root@VMware01 ~]# apachectl graceful #刷新配置
编辑 windows中的C:\Windows\System32\drivers\etc
,增加一行如下:
192.168.1.3 www.111.com www.kkk.com 111.com kkk.com www.abc.com # 将虚拟主机的主机名与IP对应上
ps.完成hosts文件的正确编辑后,即可在本地将域名与IP进行绑定
[root@VMware01 ~]# ls /usr/local/apache2.4/htdocs/upload/ # 默认虚拟主机的目录下本就有 Discuz 的内容
admin.php archiver cp.php favicon.ico home.php member.php portal.php source uc_client
api config crossdomain.xml forum.php index.php misc.php robots.txt static uc_server
api.php connect.php data group.php install plugin.php search.php template userapp.php
[root@VMware01 ~]# vim /usr/local/apache2.4/htdocs/test/index.php # 第二台虚拟主机的目录下有一个PHP的信息文件
1 2 phpinfo();
3 ?>
## 通过主机名 www.111.com 能够准确找到其根目录下的 forum.php 文件
[root@VMware01 ~]# curl -x 192.168.1.3:80 www.111.com/forum.php -I
HTTP/1.1 200 OK
Date: Fri, 29 Jun 2018 02:49:26 GMT
Server: Apache/2.4.33 (Unix) PHP/5.6.32
X-Powered-By: PHP/5.6.32
Set-Cookie: HkhI_2132_saltkey=rrb4Tt1R; expires=Sun, 29-Jul-2018 02:49:26 GMT; Max-Age=2592000; path=/; httponly
Set-Cookie: HkhI_2132_lastvisit=1530236966; expires=Sun, 29-Jul-2018 02:49:26 GMT; Max-Age=2592000; path=/
Set-Cookie: HkhI_2132_sid=euwwYO; expires=Sat, 30-Jun-2018 02:49:26 GMT; Max-Age=86400; path=/
Set-Cookie: HkhI_2132_lastact=1530240566%09forum.php%09; expires=Sat, 30-Jun-2018 02:49:26 GMT; Max-Age=86400; path=/
Set-Cookie: HkhI_2132_onlineusernum=2; expires=Fri, 29-Jun-2018 02:54:26 GMT; Max-Age=300; path=/
Set-Cookie: HkhI_2132_sid=euwwYO; expires=Sat, 30-Jun-2018 02:49:26 GMT; Max-Age=86400; path=/
Content-Type: text/html; charset=utf-8
## 通过主机名 www.kkk.com 就找不到 forum.php,因为这个文件是在默认虚拟主机上的,而不是在 www.kkk.com 这台虚拟主机上的
[root@VMware01 ~]# curl -x 192.168.1.3:80 www.kkk.com/forum.php -I
HTTP/1.1 404 Not Found
Date: Fri, 29 Jun 2018 02:49:41 GMT
Server: Apache/2.4.33 (Unix) PHP/5.6.32
Content-Type: text/html; charset=iso-8859-1
## 但是能够在 www.kkk.com 这台虚拟主机上找到 index.php
[root@VMware01 ~]# curl -x 192.168.1.3:80 www.kkk.com/index.php -I
HTTP/1.1 200 OK
Date: Fri, 29 Jun 2018 02:51:51 GMT
Server: Apache/2.4.33 (Unix) PHP/5.6.32
X-Powered-By: PHP/5.6.32
Content-Type: text/html; charset=UTF-8
## 我们再使用其他没有定义的主机名进行访问,也能访问到默认虚拟主机下的资源
[root@VMware01 ~]# curl -x 192.168.1.3:80 www.abc.com/forum.php -I
HTTP/1.1 200 OK
Date: Fri, 29 Jun 2018 02:52:55 GMT
Server: Apache/2.4.33 (Unix) PHP/5.6.32
X-Powered-By: PHP/5.6.32
Set-Cookie: HkhI_2132_saltkey=AQ1QNzND; expires=Sun, 29-Jul-2018 02:52:56 GMT; Max-Age=2592000; path=/; httponly
Set-Cookie: HkhI_2132_lastvisit=1530237176; expires=Sun, 29-Jul-2018 02:52:56 GMT; Max-Age=2592000; path=/
Set-Cookie: HkhI_2132_sid=Wo9Ss3; expires=Sat, 30-Jun-2018 02:52:56 GMT; Max-Age=86400; path=/
Set-Cookie: HkhI_2132_lastact=1530240776%09forum.php%09; expires=Sat, 30-Jun-2018 02:52:56 GMT; Max-Age=86400; path=/
Set-Cookie: HkhI_2132_onlineusernum=2; expires=Fri, 29-Jun-2018 02:57:56 GMT; Max-Age=300; path=/
Set-Cookie: HkhI_2132_sid=Wo9Ss3; expires=Sat, 30-Jun-2018 02:52:56 GMT; Max-Age=86400; path=/
Content-Type: text/html; charset=utf-8
不是登录邮箱、登录论坛的那种认证,而是在请求到特定资源时,由浏览器弹出对话框,要求进行认证后才能访问。
该功能并不常用,一般用在对站点中部分需要重点保护的目录及文件的访问限制上
23 80>
24 DocumentRoot "/usr/local/apache2.4/htdocs/upload/"
25 ServerName www.111.com
26 ServerAlias 111.com
27 ## 添加如下代码块
28 .4/htdocs/upload> # 指定需要认证的访问目录
29 AllowOverride AuthConfig # 认证的开关
30 AuthName "Default vServer Auth" # 认证弹出窗口中显示的认证名
31 AuthType Basic # 认证类型
32 AuthUserFile /data/.htpasswd # 认证所需的 账号/密码 文件
33 require valid-user # 仅允许存在于 账号/密码文件中的账号登录
34
35
36
37 ErrorLog "logs/111.com-error_log"
38 CustomLog "logs/111.com-access_log" common
39
[root@VMware01 ~]# apachectl -t
Syntax OK
[root@VMware01 ~]# apachectl graceful
htpasswd
## -c 选项代表新建账/密文件,-m 选项指定加密算法为 MD5,后接账/密文件名以及带创建的账户
[root@VMware01 ~]# htpasswd -c -m /data/.htpasswd chocolee
New password:
Re-type new password:
Adding password for user chocolee
[root@VMware01 ~]# cat /data/.htpasswd
chocolee:$apr1$XwjtRMu0$PfnkYzOeG2LihTBZAoihF.
## 不指定账号密码进行访问
[root@VMware01 ~]# curl -x 192.168.1.3:80 www.111.com/forum.php -I
HTTP/1.1 401 Unauthorized # 此时HTTP状态码为401 未授权
Date: Fri, 29 Jun 2018 03:38:19 GMT
Server: Apache/2.4.33 (Unix) PHP/5.6.32
WWW-Authenticate: Basic realm="Default vServer Auth"
Content-Type: text/html; charset=iso-8859-1
## 指定账号密码
[root@VMware01 ~]# curl -x 192.168.1.3:80 -u chocolee:123123 www.111.com/forum.php -I
HTTP/1.1 200 OK # 指定账号密码后,HTTP状态码为200,成功
Date: Fri, 29 Jun 2018 03:40:08 GMT
Server: Apache/2.4.33 (Unix) PHP/5.6.32
X-Powered-By: PHP/5.6.32
Set-Cookie: HkhI_2132_saltkey=H55lznw9; expires=Sun, 29-Jul-2018 03:40:08 GMT; Max-Age=2592000; path=/; httponly
Set-Cookie: HkhI_2132_lastvisit=1530240008; expires=Sun, 29-Jul-2018 03:40:08 GMT; Max-Age=2592000; path=/
Set-Cookie: HkhI_2132_sid=Cm3Uqx; expires=Sat, 30-Jun-2018 03:40:08 GMT; Max-Age=86400; path=/
Set-Cookie: HkhI_2132_lastact=1530243608%09forum.php%09; expires=Sat, 30-Jun-2018 03:40:08 GMT; Max-Age=86400; path=/
Set-Cookie: HkhI_2132_onlineusernum=5; expires=Fri, 29-Jun-2018 03:45:08 GMT; Max-Age=300; path=/
Set-Cookie: HkhI_2132_sid=Cm3Uqx; expires=Sat, 30-Jun-2018 03:40:08 GMT; Max-Age=86400; path=/
Content-Type: text/html; charset=utf-8
域名更换时,一是由于客户可能更多的使用老域名,所以需要在一段较长的时间内保持新老域名的共存,作为新老域名的过渡时期;二是考虑到搜索引擎的 SEO 排名,如果两个不同域名但是相同内容的站点,搜索引擎由于经常与老域名打交道,其可能会将新域名识别为仿冒站点而不做理会,导致新域名在搜索引擎中的排名迟迟无法提高
## 在默认虚拟主机的配置块内,增加如下配置
[root@VMware01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.111.com$
RewriteRule ^/(.*)$ http://www.111.com/$1 [R=301.L]
</IfModule>
[root@VMware01 ~]# vim /usr/local/apache2.4/conf/httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so
[root@VMware01 ~]# curl -x 192.168.1.3:80 abc.com -I
HTTP/1.1 301 Moved Permanently
Date: Fri, 29 Jun 2018 07:21:07 GMT
Server: Apache/2.4.33 (Unix) PHP/5.6.32
Location: http://www.111.com/
Cache-Control: max-age=0
Expires: Fri, 29 Jun 2018 07:21:07 GMT
Content-Type: text/html; charset=iso-8859-1
Apache 访问日志记录了用户的每个请求,其中的相应字段自己可以进行调整
[root@VMware01 ~]# tail /usr/local/apache2.4/logs/111.com-access_log
192.168.1.1 - - [29/Jun/2018:12:08:12 +0800] "GET /upload/static/image/common/pt_item.png HTTP/1.1" 404 236
## 访问原IP 日期 动作 状态码 文件大小
282 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
283 LogFormat "%h %l %u %t \"%r\" %>s %b" common # 默认用 common 格式
%h
:host,用户主机的IP%l
:%u
:user,用户名%t
:time,时间%r
:request,请求%s
:state,HTTP状态码%b
:bytes,文件大小%{Referer}i
:从哪里跳转过来%{User-Agent}i
:使用的浏览器类型[root@VMware01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
.
.
.
80>
DocumentRoot "/usr/local/apache2.4/htdocs/upload/"
ServerName www.111.com
ServerAlias 111.com
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" combined # 修改默认虚拟主机的访问日志格式为 combined
[root@VMware01 ~]# apachectl -t
Syntax OK
[root@VMware01 ~]# apachectl graceful
[root@VMware01 ~]# tail /usr/local/apache2.4/logs/111.com-access_log
192.168.1.1 - - [29/Jun/2018:13:49:18 +0800] "GET /upload/static/image/common/px.png HTTP/1.1" 404 231 "http://www.111.com/data/cache/style_1_common.css?etm" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"
一个页面中往往包含大量的静态文件,如果每个静态文件都产生一条日志,日志量将相当庞大,不仅费磁盘,还会占用大量磁盘 I/O
[root@VMware01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
23 80>
24 DocumentRoot "/usr/local/apache2.4/htdocs/upload/"
25 ServerName www.111.com
26 ServerAlias 111.com
27 ## 插入如下代码块,将请求文件包含gif、jpg、js、css等文件的请求定义为 img 类型
28 SetEnvIf Request_URL ".*\.gif$" img
29 SetEnvIf Request_URL ".*\.jpg$" img
30 SetEnvIf Request_URL ".*\.png$" img
31 SetEnvIf Request_URL ".*\.jpeg$" img
32 SetEnvIf Request_URL ".*\.bmp$" img
33 SetEnvIf Request_URL ".*\.swf$" img
34 SetEnvIf Request_URL ".*\.css$" img
35 SetEnvIf Request_URL ".*\.js$" img
36
37 ErrorLog "logs/111.com-error_log"
38 CustomLog "logs/111.com-access_log" combined env=!img # 访问日志设定的最后加上不产生与 img 类型的日志
39
[root@VMware01 logs]# tail 111.com-access_log
192.168.1.1 - - [29/Jun/2018:14:24:18 +0800] "GET /baidu.png HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"
[root@VMware01 ~]# apachectl -t
Syntax OK
[root@VMware01 ~]# apachectl graceful
## 并未显示 bd.png 相关的日志
[root@VMware01 logs]# tail 111.com-access_log
192.168.1.1 - - [29/Jun/2018:14:24:18 +0800] "GET /baidu.png HTTP/1.1" 304 - "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"
日志是以追加的方式不断地增加的,因此日志文件会不断增大,最终会占满磁盘。日志切割可以以某一段时间为周期,按周期地不断产生新的日志文件,这样能够更方便地找到某一日期的日志,且日志文件按周期产生,能够方便删除无用的日志
[root@VMware01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
## 其实就是用 apache 自带的 rotatelogs 工具,指定周期进行日志文件的生成
CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400" combined env=!img
[root@VMware01 ~]# ll /usr/local/apache2.4/logs/
总用量 108
-rw-r--r--. 1 root root 194 6月 29 14:45 111.com-access_20180629.log # 新产生的日志文件
-rw-r--r--. 1 root root 0 6月 29 08:38 111.com-error_log
-rw-r--r--. 1 root root 55763 6月 28 14:45 access_log
-rw-r--r--. 1 root root 30754 6月 29 14:45 error_log
-rw-r--r--. 1 root root 5 6月 29 14:45 httpd.pid
-rw-r--r--. 1 root root 1570 6月 29 12:06 kkk.com-access_log
-rw-r--r--. 1 root root 5931 6月 29 12:06 kkk.com-error_log
浏览器浏览网页时,会缓存网站的静态文件,那缓存下来的文件能保留多久,在 Apache 上可以定义
由于之前请求过 bd.png 文件,这时刷新页面,能够看到该文件的状态码为 304
80>
24 DocumentRoot "/usr/local/apache2.4/htdocs/upload/"
25 ServerName www.111.com
26 ServerAlias 111.com
27
28 SetEnvIf Request_URL ".*\.gif$" img
29 SetEnvIf Request_URL ".*\.jpg$" img
30 SetEnvIf Request_URL ".*\.png$" img
31 SetEnvIf Request_URL ".*\.jpeg$" img
32 SetEnvIf Request_URL ".*\.bmp$" img
33 SetEnvIf Request_URL ".*\.swf$" img
34 SetEnvIf Request_URL ".*\.css$" img
35 SetEnvIf Request_URL ".*\.js$" img
36 ## 添加如下代码块
37
38 ExpiresActive on
39 ExpiresByType image/gif "access plus 1 day"
40 ExpiresByType image/jpeg "access plus 24 hours"
41 ExpiresByType image/png "access plus 24 hours"
42 ExpiresByType image/css "now plus 2 hours"
43 ExpiresByType application/x-javascript "now plus 2 hours"
44 ExpiresByType application/javascript "now plus 2 hours"
45 ExpiresByType application/x-shockwave-flash "now plus 2 hours"
46 ExpiresDefault "now plus 0 min"
47
48
49 ErrorLog "logs/111.com-error_log"
50 CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400" combined env=!img
51
52
[root@VMware01 ~]# vim /usr/local/apache2.4/conf/httpd.conf
109 LoadModule expires_module modules/mod_expires.so # 去掉该行的注释