1.Apache默认虚拟主机
httpd的默认虚拟主机 一台服务器可以访问多个网站,每个网站都是一个虚拟主机
先打开Windows的host文件查看域名并做实验
之后再Windows里面ping一下域名看看能否ping通
任何一个域名只要指向这个ip都可以认为是访问这个站点,这个站点称为虚拟主机
Linux下配置虚拟主机
第一步:编辑配置文件httpd.conf,去掉以下的#号,使虚拟主机的配置文件生效,然后保存退出
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
第二步:vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf #虚拟主机配置文件
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/abc.com" #定义网站的跟目录
ServerName abc.com #定义域名只能写一个
ServerAlias www.abc.com 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>
第三步: 创建和虚拟主机对应的站点根目录,以及新建相应index.php
第四步:ping 设置的www.abc.com,此时明显是外网的域名
第五步:用curl -x192.168.50.128:80 abc.com 来测试
2.Apache用户认证
在虚拟主机配置文件 httpd-vhosts.conf ,配置另一台虚拟主机信息
[root@localhost ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
配置第二台虚拟主机(第一台是默认虚拟主机)
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.example.com
<Directory /data/wwwroot/111.com> //指定认证的目录
AllowOverride AuthConfig //这个相当于打开认证的开关
AuthName "111.com user auth" //自定义认证的名字,作用不大
AuthType Basic //认证的类型,一般为Basic
AuthUserFile /data/.htpasswd //指定密码文件所在位置
require valid-user //指定需要认证的用户为全部可用用户
</Directory>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
创建密码htpasswd Apache自带的创建命令
[root@localhost ~]# /usr/local/apache2.4/bin/htpasswd -c -m /data/.htpasswd aming
再增加一个用户,就不用再添加-c;c是creat,创建的意思
在链接测试
curl命令的 -u 参数,可以登录用户名,及密码
故意输错密码,就会报错
单个文件进行认证
在不是默认虚拟主机上进行配置文件
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.example.com
#<Directory /data/wwwroot/111.com>
<FilesMatch 123.php>
AllowOverride AuthConfig
AuthName "111.com user auth"
AuthType Basic
AuthUserFile /data/.htpasswd
require valid-user
</FilesMatch>
#</Directory>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
进行测试
用-u参数,把用户名 ying,密码 www123 带上,在测试123.php
3.域名跳转
域名跳转类似于将网页重新指向另一个网站,但区别是域名跳转会将域名本身重新指向网站,而不使用HTML或脚本来进行重新指向。当域名被设置为跳转至另一网站,域名的地址将不会保留在浏览器的URL栏中,该栏显示的会是新页面的URL。如果您希望保留该栏中的URL,则需要使用隐形跳转
配置域名跳转vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.example.com
#<Directory /data/wwwroot/111.com>
# <FilesMatch 123.php>
# AllowOverride AuthConfig
# AuthName "111.com user auth"
# AuthType Basic
# AuthUserFile /data/.htpasswd
# require valid-user
# </FilesMatch>
#</Directory>
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} !^111.com$
RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]
</IfModule>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
修改完成之后要检测一下然后在加载
修改配置文件/httpd.conf ,把rewrite模块 加载上
:::80 代表监听全网端口 现在进行测试
4.Apache访问日志
Apache访问日志所在位置 /usr/local/apache2.4/logs/
[root@localhost ~]# ls /usr/local/apache2.4/logs/111.com-access_log
查看日志
打开apache主配置文件,查找日志的格式内容
更改日志格式 vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
重新加载虚拟主机配置文件,测试123.php,目的是为了生成新的日志
5.访问日志不记录静态文件
很多网站大多为静态网页,网页内部的图片、css文件等同样有其网址链接,如果不设置,这些无效的信息也将被存入访问日志中,会导致访问日志文件大小快速增加,占用大量存储空间。我们可以通过设置不记录某些文件来减少无效信息,节省内存资源
先访问一个jpg文件
配置虚拟主机的配置文件:vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} !^111.com$
RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]
</IfModule>
ErrorLog "logs/111.com-error_log"
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
以上模块释义: 将所有访问图片的请求定义为变量img,在访问记录(日志)中将其排除即可。重新加载后使用curl访问img变量中所指定格式的文件内容时将不会产生访问记录。img是变量
总结:日志配置成功
6.访问日志切割
配置文件,按下面更改 访问日志的内容
CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400" combined env=!img
- /usr/local/apache2.4/bin/rotatelogs工具是apache自带的分割日志的工具
- -l参数按当前系统时间为基准进行切割(我国为CST),否则默认UTC
- %Y%m%d表示年月日,这样会每天记录一个带日期的日志文件,更方便
- 86400(s)表示每天都进行切割,一天24小时等于86400秒
修改好之后访问日志检测
7.静态元素过期时间
启用expires模块
虚拟主机下增加模块
<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>