11.16-11.17Apache默认虚拟主机(上下)
1. 打开Windows系统中hosts文件 :
路径:C:\Windows\System32\drivers\etc
2. 用记事本打开Windows系统下的hosts文件 :
自定义设定域名指向ip:Linux服务器ip 自定义网址
192.168.223.128 www.abc www.123.com
(自定义的网址,在windows下访问会跳到前面Linux服务器ip)
记得保存hosts记事本!!!
3. 在Windows系统下,查看hosts里设定的网址,是否跳转到Linux 服务器ip :
C:\Users\VULCAN>ping www.abc.com
C:\Users\VULCAN>ping www.123.com
4. 编辑httpd.conf配置文件 :
[root@hao-001 ~]# vim /usr/local/apache2.4/conf/httpd.conf
搜索:httpd-vhosts关键词,把这行行首#号 删掉!!!(解除注释)
5. 编辑虚拟主机配置文件 :
[root@hao-001 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
更改内容:
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/abc.com"
ServerName abc.com
ServerAlias www.abc www.123.com
ErrorLog "logs/abc.com-error_log"
CustomLog "logs/abc.com-access_log" common
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.example.com
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
DocumentRoot:定义网站根目录
ServerName:指定主域名
ServerAlias:指定别名域名(可以有多个别名域名,同时指向一个ip)
ErrorLog:设定错误日志
CustomLog:设定访问日志
6. 创建上面文件中对应的网站目录 :
[root@hao-001 ~]# mkdir /data/wwwroot/
[root@hao-001 ~]# mkdir /data/wwwroot/abc.com/
[root@hao-001 ~]# mkdir /data/wwwroot/111.com/
7. abc网站目录,创建对应文件 :
[root@hao-001 ~]# vim /data/wwwroot/abc.com/index.php
添加内容:
<?php
echo "abc.com";
8.111网站目录,创建对应文件 :
[root@hao-001 ~]# vim /data/wwwroot/111.com/index.php
添加内容:
<?php
echo "111.com";
9. 检查配置文件语法是否正确无误 ?
[root@hao-001 ~]# /usr/local/apache2.4/bin/apachectl -t
10. 重新加载配置文件(不会重启服务) :
[root@hao-001 ~]# /usr/local/apache2.4/bin/apachectl graceful
11. curl -x的作用 :
[root@hao-001 ~]# curl -x192.168.223.128:80 abc.com
www.123.com 是第一个(默认)虚拟主机的主域名
www.baidu.com 是没有设定过的域名,
www.baidu.com这种没有设定过的域名,会解析到默认虚拟主机主域名!!!
[root@hao-001 ~]# curl -x192.168.223.128:80 111.com
111.com 是第二个虚拟主机的主域名
www.example.com 是第二个虚拟主机的别名域名
www.baidu.com 是没有设定过的域名,
www.baidu.com这种没有设定过的域名,会解析到默认虚拟主机主域名!!!
因此:只有设定过的域名,才能会解析到对应的主域名上,
没设定过得域名,都会解析到默认虚拟主机域名上!!!
1. 编辑第二个虚拟主机,设定Apache用户认证(访问网站需要用户密码认证)
[root@hao-01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
插入内容如下(设定指定网站访问认证参数如下,位置在虚拟主机下面添加) :
<Directory /data/wwwroot/111.com>
AllowOverride AuthConfig
AuthName "111.com user auth"
AuthType Basic
AuthUserFile /data/.htpasswd
require valid-user
</Directory>
2. 第一次创建可访问用户名,自定义密码 (-c 参数 自动创建生成密码文件) :
[root@hao-01 ~]# /usr/local/apache2.4/bin/htpasswd -c -m 密码文件 自定义用
[root@hao-01 ~]# /usr/local/apache2.4/bin/htpasswd -c -m /data/.htpasswd hao1
3. 第二次后创建可访问用户名,自定义密码(不要加-c 参数 会覆盖掉密码文件的) :
[root@hao-01 ~]# /usr/local/apache2.4/bin/htpasswd -m /data/.htpasswd hao2
4. 查看密码文件内容 :
[root@hao-01 ~]# cat /data/.htpasswd
5. 检测虚拟主机配置文件是否有错误 ?
[root@hao-01 ~]# /usr/local/apache2.4/bin/apachectl -t
6. 启动apache2.4/httpd :
[root@hao-01 ~]# /usr/local/apache2.4/bin/apachectl start
7. 重新加载配置文件(不会重启服务) :
[root@hao-01 ~]# /usr/local/apache2.4/bin/apachectl graceful
8. curl 访问这个虚拟主机的主域名111.com,是否访问成功 ? 报错如下 :
[root@hao-01 ~]# curl -x127.0.0.1:80 111.com -I
报错 :401(用户认证加密访问受限了)
9. 用记事本打开Windows系统中hosts文件 :
路径:C:\Windows\System32\drivers\etc
添加上虚拟主机2的设定的主域名:111.com
(记得保存hosts记事本)
10. 在Windows上,检查Linux服务器ip的80端口是否打开 ?
C:\Users\VULCAN>telnet 192.168.223.128 80
11. Linux服务器上打开80端口(必须是httpd已启动) :
[root@hao-001 ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
(关闭80端口:iptables -D INPUT -p tcp --dport 80 -j ACCEPT )
12. 再次在Windows上,检查Linux服务器ip的80端口是否打开 ?
C:\Users\VULCAN>telnet 192.168.223.128 80
快捷键组合退出: Ctrl 跟 ]
13. Window游览器上,访问虚拟主机2加密认证的主域名111.com地址 :
此时,有些游览器会报401,并让其登陆加密访问的用户密码,就是刚刚设定的!
14. 用curl命令,来访问虚拟主机2加密认证的主域名111.com :
-u用来指定用户名密码,此时就是200 ok成功!
[root@hao-01 ~]# curl -x127.0.0.1:80 -uhao:admin 111.com -i
下面的方法用于 :
主网站的下级网站,不想被其他人访问时候,增加的用户认证!
1. 编辑虚拟主机配置文件中,第二个虚拟主机参数 :
针对单个文件进行认证:
[root@hao-01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
增加内容(注意增加位置,,如图):
<FilesMatch 123.php>
</FilesMatch>
2. 检测虚拟主机配置文件是否有错误 ?
[root@hao-01 ~]# /usr/local/apache2.4/bin/apachectl -t
3. 重新加载配置文件(不会重启服务) :
[root@hao-01 ~]# /usr/local/apache2.4/bin/apachectl graceful
4. 创建并编辑123.php文件到111.com目录下 :
[root@hao-01 ~]# vim /data/wwwroot/111.com/123.php
添加内容:
<?php
echo "123.php";
5. 访问111.com不会受限 :
(设定了:访问111.com下123.php才会需要认证)!
[root@hao-01 ~]# curl -x127.0.0.1:80 111.com -i
6. 用curl命令,访问111.com/123.php,访问是受限的,
(针对这个123.php文件做了认证,需要-u跟用户名密码才可访问)
[root@hao-01 ~]# curl -x127.0.0.1:80 111.com/123.php -i
7. 用curl命令,访问111.com/123.php (-u 参数跟用户名 密码) :
[root@hao-01 ~]# curl -x127.0.0.1:80 -uhao1:admin 111.com/123.php -i
11.19-11.20 域名跳转(上下)
1. 编辑虚拟主机配置文件,更改第二个虚拟主机做实验 :
[root@hao-01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
添加内容(这里定义的www.111.com是别名域名跳转到的 网站域名):
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} !^111.com$
RewriteRule ^/(.*)$ http://www.111.com/$1 [R=301,L]
</IfModule>
2. 检测虚拟机配置文件是否有错误 :
[root@hao-01 ~]# /usr/local/apache2.4/bin/apachectl -t
3. 重新加载配置文件(不会重启服务) :
[root@hao-01 ~]# /usr/local/apache2.4/bin/apachectl graceful
4. 查找apache是否加载了rewrite模块 ?
[root@hao-01 ~]# /usr/local/apache2.4/bin/apachectl -M |grep rewrite
没查到rewrite模块,看下吗步骤打开!
5. 编辑httpd.conf文件 :
[root@hao-01 ~]# vim /usr/local/apache2.4/conf/httpd.conf
查找rewrite,找到含有rewrite行,把这行前的#号删掉!
6. 检测虚拟机配置文件是否有错误 :
[root@hao-01 ~]# /usr/local/apache2.4/bin/apachectl -t
7. 重新加载配置文件(不会重启服务) :
[root@hao-01 ~]# /usr/local/apache2.4/bin/apachectl graceful
8. 再次查找apache是否加载了rewrite模块?
[root@hao-01 ~]# /usr/local/apache2.4/bin/apachectl -M |grep rewrite
9. 用curl 命令访问别名域名,跳转到了设定跳转的域名下!
[root@hao-01 ~]# curl -x127.0.0.1:80 www.example.com
在虚拟机配置文件中,下图位置,设定跳转到指定的网站域名!!!
11.21 Apache访问日志
1. 两种日志格式:combined 、 commo
2. 更改虚拟主机配置文件,把日志格式改为combined :
[root@hao-01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
更改内容(更改访问日志格式):
commo改为:combined
3. 检测虚拟机配置文件是否有错误 :
[root@hao-01 ~]# /usr/local/apache2.4/bin/apachectl -t
4. 重新加载配置文件(不会重启服务) :
[root@hao-01 ~]# /usr/local/apache2.4/bin/apachectl graceful
5. 在Windows上,访问到111.com/123.php网站(需要先把这个网站地址,发在其他博客或帖子中,再点击这个超链接111.com/123.php,即可在服务器上记录上访问日志!
6. 查看Apache,combined格式的访问日志 :
[root@hao-01 ~]# tail /usr/local/apache2.4/logs/111.com-access_log
由上图看出,从51cto博客里页面,跳转到了这个111.com下的123.php
11.22 访问日志不记录静态文件
• 网站大多元素为静态文件,如图片、css、js等,这些元素可以不用记录
1. 编辑虚拟机配置文件,增加访问日志不记录图片静态文件等规则:
[root@hao-01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
增加内容(针对访问日志过滤掉图片访问):
SetEnvIf Request_URI ".*\.gif$" img
SetEnvIf Request_URI ".*\.jpg$" img
SetEnvIf Request_URI ".*\.png$" img
SetEnvIf Request_URI ".*\.bmp$" img
SetEnvIf Request_URI ".*\.swf$" img
SetEnvIf Request_URI ".*\.js$" img
SetEnvIf Request_URI ".*\.css$" img
CustomLog "logs/111.com-access_log" combined env=!img
2. 检测虚拟机配置文件是否有错误 :
[root@hao-01 ~]# /usr/local/apache2.4/bin/apachectl -t
3. 启动apache2.4/httpd :
[root@hao-01 apache2.4]# /usr/local/apache2.4/bin/apachectl start
4. 重新加载配置文件(不会重启服务) :
[root@hao-01 ~]# /usr/local/apache2.4/bin/apachectl graceful
5. 进入111网站目录下 :
[root@hao-01 ~]# cd /data/wwwroot/111.com
6. 从window上传一张图片到当前目录下 :
[root@hao-01 111.com]# rz
[root@hao-01 111.com]# ls
7. curl命令访问111.com/图片名称,可以通(200 OK) :
[root@hao-01 111.com]# curl -x127.0.0.1:80 111.com/1.jpg -I
8. 在Windows游览器中,不断刷新访问111.com/图片名称 :
111.com/1.jpg
9. 查看访问日志,有没有刚刚访问111.com/1.jpg jpg格式的访问日志 ???
[root@hao-01 111.com]# tail /usr/local/apache2.4/logs/111.com-access_log
由上图可以看出,没有的,没有记录1.jpg的访问日志呢!
11.23 访问日志切割
• 日志一直记录总有一天会把整个磁盘占满,
所以有必要让它自动切割,并删除老的日志文件
1. 编辑虚拟机配置文件,把日志规定为以每天日期创建为一个访问日志文件 :
[root@hao-01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
访问日志增加更改如下规则(设定日志切割成多个文件):
CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400" combined env=!img
2. 检测虚拟机配置文件是否有错误 ?
[root@hao-01 ~]# /usr/local/apache2.4/bin/apachectl -t
3. 重新加载配置文件(不会重启服务) :
[root@hao-01 ~]# /usr/local/apache2.4/bin/apachectl graceful
4. 用curl命令,访问111.com网站下的123.php文件 :
[root@hao-01 ~]# curl -x127.0.0.1:80 111.com/123.php
5. 列出 apache访问日志目录下全部日志(可看到以日期命名的日志) :
[root@hao-01 ~]# ls /usr/local/apache2.4/logs/
6. 查看刚刚访问后,生成的日期命名的日志内容(刚刚访问123.php):
[root@hao-01 ~]# cat /usr/local/apache2.4/logs/123.php/111.com-access_20170801.log
11.24 静态元素过期时间
1. 修改虚拟主机配置文件,定义静态图片等元素过期时间 :
[root@hao-01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
插入内容(静态图片等元素过期时间的定义) :
<IfModule mod_expires.c>
ExpiresActive on
ExpiresByType image/gif "access plus 1 days"
ExpiresByType image/jpeg "access plus 24 hours"
ExpiresByType image/png "access plus 24 hours"
ExpiresByType text/css "now plus 2 hour"
ExpiresByType application/x-javascript "now plus 2 hours"
ExpiresByType application/javascript "now plus 2 hours"
ExpiresByType application/x-shockwave-flash "now plus 2 hours"
ExpiresDefault "now plus 0 min"
</IfModule>
2. 检测虚拟机配置文件是否有错误 :
[root@hao-01 ~]# /usr/local/apache2.4/bin/apachectl -t
3. 重新加载配置文件(不会重启服务) :
[root@hao-01 ~]# /usr/local/apache2.4/bin/apachectl graceful
4. 编辑apache主配置,搜索到expires这行(删除行首的注释符#号) :
5. 搜索apache,expire模块是否打开 ?
[root@hao-01 ~]# /usr/local/apache2.4/bin/apachectl -M |grep expire
6. 用curl命令,访问111.com目录下的静态图片1.jpg :
(显示了当前访问时间和缓存静态过期时间,过期就会清理掉了)
[root@hao-01 ~]# curl -x127.0.0.1:80 111.com/1.jpg -I