- Apache默认虚拟主机
- Apache用户认证
- 域名跳转
- Apache访问日志
- 访问日志不记录静态文件
- 访问日志切割
- 静态元素过期时间
1. Apache默认虚拟主机
一台服务器可以访问多个网站,每个网站都是一个虚拟主机
概念:域名(主机名)、DNS、解析域名、hosts
任何一个域名解析到这台机器,都可以访问的虚拟主机就是默认虚拟主机
vim /usr/local/apache2.4/conf/httpd.conf #搜索httpd-vhost,去掉#
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
/usr/local/apache2.4/bin/apachectl -t #检查是否有错
/usr/local/apache2.4/bin/apachectl graceful #重新加载
curl #打开网页
curl -x
结论
在主配置文件中打开了 Virtual hosts后,虚拟主机配置文件生效;
主配置文件中配置的 DocumentRoot 以及ServerName失效;
虚拟主机配置打开,里面可以定义很多VirtualHost
一对VirtualHost就表示一个站点
默认虚拟主机,无论任何域名解析到这个ip上都会去访问这个默认虚拟主机
2. Apache用户认证(输入用户名密码后才能打开网页)
配置虚拟主机用户认证,如图
报错
删除注释及文字后正常
/usr/local/apache2.4/bin/htpasswd -cm /data/.htpasswd aming #-c创建 -m表示MD5加密方式
/usr/local/apache2.4/bin/htpasswd -m /data/.htpasswd lisi #第二次执行不用创建则去掉-c
curl -x127.0.0.1:80 www.123.com
[root@test ~]# curl -x127.0.0.1:80 www.123.com -ulisi:123456789 -I
- 针对当文件进行认证
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/www.123.com"
ServerName www.123.com
<FilesMatch admin.php> #使用FilesMatch 针对admin.php文件做认证
AllowOverride AuthConfig
AuthName "123.com user auth"
AuthType Basic
AuthUserFile /data/.htpasswd
require valid-user
</FilesMatch>
</VirtualHost>
3. 域名跳转
场景更换域名的时候
配置如下
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host2.example.com
DocumentRoot "/data/wwwroot/111.com"
ServerName www.111.com
ServerAlias www.789.com
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.111.com$
RewriteRule ^/(.*)$ http://www.111.com/$1 [R=301,L]
</IfModule>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
说明
将不是www.111.com的域名跳转到www.111.com
主域名后面的文件不操作继续带
状态码301表示永久重定向会将原域名的权重加给新域名
状态码302表示临时重定向
[root@test ~]# /usr/local/apache2.4/bin/apachectl -M|grep -i rewrite
[root@test ~]# vi /usr/local/apache2.4/conf/httpd.conf
[root@test ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@test ~]# /usr/local/apache2.4/bin/apachectl graceful
[root@test ~]# /usr/local/apache2.4/bin/apachectl -M|grep -i rewrite
rewrite_module (shared)
- 跳转成功
[root@test ~]# curl -x127.0.0.1:80 www.789.com -i
HTTP/1.1 301 Moved Permanently
Date: Thu, 09 May 2019 15:25:48 GMT
Server: Apache/2.4.38 (Unix) PHP/5.6.30
Location: http://www.111.com/
Content-Length: 227
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="http://www.111.com/">here</a>.</p>
</body></html>
4. Apache访问日志
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
- 更改虚拟主机log配置文件
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/data/wwwroot/abc.com"
ServerName abc.com
ServerAlias www.abc.com
ErrorLog "logs/abc.com-error_log"
CustomLog "logs/abc.com-access_log" combined #combined定义了日志格式
</VirtualHost>
- 更改后格式样式
182.150.172.160 - - [09/May/2019:23:49:03 +0800] "GET / HTTP/1.1" 200 7 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36"
182.150.172.160 - - [09/May/2019:23:49:08 +0800] "GET / HTTP/1.1" 200 7 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36"
5. 访问日志不记录静态文件
不记录图片,js,css等静态文件,可以预防日志文件过大
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/data/wwwroot/abc.com"
ServerName abc.com
ServerAlias www.abc.com
ErrorLog "logs/abc.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/abc.com-access_log" combined env=!img
</VirtualHost>
说明: 先给gif,ipg,png,bmp,swf,js,css等打上标记,
然后在用env=!img来过滤
6. 访问日志切割
日志一直记录总有一天会把整个磁盘占满,所以有必要让它自动切割,并删除老的日志文件
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/data/wwwroot/abc.com"
ServerName abc.com
ServerAlias www.abc.com
ErrorLog "logs/abc.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 "|/usr/local/apache2.4/bin/rotatelogs -l logs/abc.com-access_%Y%m%d.log 86400" combined env=!img
</VirtualHost>
说明:
给日志指定一个httpd带的一个切割工具,-l指定时间CST
需要切割所以指定文件名变量用年月日来表示
切割时间为86400秒表示1天
7. 静态元素过期时间
- 配置静态元素过期时间
<IfModule mod_expires.c>
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/data/wwwroot/abc.com"
ServerName abc.com
ServerAlias www.abc.com
<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>
ErrorLog "logs/abc.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 "|/usr/local/apache2.4/bin/rotatelogs -l logs/abc.com-access_%Y%m%d.log 86400" combined env=!img
</VirtualHost>
检测expaire模块是否打开
[root@test ~]# /usr/local/apache2.4/bin/apachectl -M|grep -i expire
[root@test ~]#
没有打开
编辑主配置文件
vim /usr/local/apache2.4/conf/httpd.conf
#LoadModule expires_module modules/mod_expires.so
去掉模块前面的注释
下载apr-1.6、apr-util-1.6以及httpd-2.4,分别解压三个源码包
把apr-1.6.3 放到httpd源码包的/srclib/下,改名apr
把apr-util-1.6.1 放到httpd源码包的/srclib/下,改名apr-util4)编译参数./configure --prefix=/dir/
--enable-so --enable-mpms-shared=all --with-mpm=event --enable-mods-shared=most
--with-included-apr
说明:这里的/dir/为apache安装路径,根据需求定目录
扩展
apache的一些学习文档: https://github.com/aminglinux/apache