- Apache默认虚拟主机
- Apache用户认证
- 域名跳转
- Apache访问日志
- 访问日志不记录静态文件
- 访问日志切割
- 静态元素过期时间
- 拓展:apache虚拟主机开启php的短标签 http://ask.apelearn.com/question/5370
apache日志记录代理IP以及真实客户端IP http://ask.apelearn.com/question/960
apache只记录指定URI的日志 http://ask.apelearn.com/question/981
apache日志记录客户端请求的域名 http://ask.apelearn.com/question/1037
apache 日志切割问题 http://ask.apelearn.com/question/566
一.Apache默认虚拟主机
- 一台服务器可以访问多个网站,每个网站都是一个虚拟主机
- 概念:域名(主机名)、DNS、解析域名、hosts
- 任何一个域名解析到这台机器,都可以访问的虚拟主机就是默认虚拟主机
- vim /usr/local/apache2/conf/httpd.conf //搜索httpd-vhost,去掉#
- vim /usr/local/apache2/conf/extra/httpd-vhosts.conf //改为如下
- <VirtualHost *:80>
- DocumentRoot "/data/wwwroot/aming.com"
- ServerAdmin admin@aminglinux.com
- ServerName aming.com
- ServerAlias www.aming.com
- ErrorLog "logs/aming.com-error_log"
- CustomLog "logs/aming.com-access_log" common
- </VirtualHost>
- <VirtualHost *:80>
- DocumentRoot "/data/wwwroot/www.123.com"
- ServerName www.123.com
- ErrorLog "logs/123.com-error_log"
- CustomLog "logs/123.com-access_log" common
- </VirtualHost>
- /usr/local/apache2/bin/apachectl –t 检查语法是否正确
- /usr/local/apache2/bin/apachectl graceful 重新加载配置文件
- mkdir /data/wwwroot/
- mkdir /data/wwwroot/aming.com
- mkdir /data/wwwroot/123.com
- vim /data/wwwroot/123.com/index.php 写一个php文件
- /usr/local/apache2/bin/apachectl –t 检查语法是否正确
- /usr/local/apache2/bin/apachectl graceful 重新加载配置文件
- 用curl 测试一下
示例二:
- C:\windows\System32\drivers\etc\hosts Windows的hosts路径
- 可以如下图,自定义:
- vim /usr/local/apache2/conf/httpd.conf //搜索httpd-vhost
- 定义网址的根目录在哪
- /ServerName 查找到该位置
- 用来定义网站的域名,
- 任意域名都可以访问它,只要指向到该网址的,就会打开Apache的默认虚拟主机
- /extra 搜索
- 这个是虚拟主机,将这一行的#去掉,前面设置的那些失效,不用了。
- 打开虚拟主机配置文件
- 编辑更改一下
- 创建对应的目录
- 编辑定义一下
- 111.com也定义一下
- 检查并重启服务
- #curl 命令,-x 用来指定网址 ,后面是指定域名,结论是指定域名访问地址
二.Apache用户认证
- vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //把123.com那个虚拟主机编辑成如下内容
- <VirtualHost *:80>
- DocumentRoot "/data/wwwroot/www.123.com"
- ServerName www.123.com
- <Directory /data/wwwroot/www.123.com> //指定认证的目录
- AllowOverride AuthConfig //这个相当于打开认证的开关
- AuthName "123.com user auth" //自定义认证的名字,作用不大
- AuthType Basic //认证的类型,一般为Basic,其他类型阿铭没用过
- AuthUserFile /data/.htpasswd //指定密码文件所在位置
- require valid-user //指定需要认证的用户为全部可用用户
- </Directory>
- </VirtualHost>
- /usr/local/apache2.4/bin/htpasswd -cm /data/.htpasswd aming 用Apache自带的密码工具生成一个密码
- 重新加载配置-t , graceful
- 绑定hosts,浏览器测试
- curl -x127.0.0.1:80 www.123.com //状态码为401
- curl -x127.0.0.1:80 -uaming:passwd www.123.com //状态码为200 指定用户名和密码
实验:一
- 编辑vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //把123.com那个虚拟主机编辑成如下内容
- 生成密钥,-m 是指定加密类型,-c是创建
- 重新加载一下
- 访问一下,提示要用户认证
- -u 指定用户认证密码与用户
实验:二
- 还可以针对单个文件进行认证
- <VirtualHost *:80>
- DocumentRoot "/data/wwwroot/www.123.com"
- ServerName www.123.com
- <FilesMatch admin.php>
- AllowOverride AuthConfig
- AuthName "123.com user auth"
- AuthType Basic
- AuthUserFile /data/.htpasswd
- require valid-user
- </FilesMatch>
- </VirtualHost>
- 配置更改一下
- 重新加载一下
- 编辑一下123.PHP文件
- 访问其他的不会401,访问123.php才会认证
三. 域名跳转
- 需求,把123.com域名跳转到www.123.com,配置如下:
- <VirtualHost *:80>
- DocumentRoot "/data/wwwroot/www.123.com"
- ServerName www.123.com
- ServerAlias 123.com
- <IfModule mod_rewrite.c> //需要mod_rewrite模块支持
- RewriteEngine on //打开rewrite功能
- RewriteCond %{HTTP_HOST} !^www.123.com$ //定义rewrite的条件,主机名(域名)不是www.123.com满足条件
- RewriteRule ^/(.*)$ http://www.123.com/$1 [R=301,L] //定义rewrite规则,当满足上面的条件时,这条规则才会执行 </IfModule>
- </VirtualHost>
- /usr/local/apache2/bin/apachectl -M|grep -i rewrite //若无该模块,需要编辑配置文件httpd.conf,删除rewrite_module (shared) 前面的#
- curl -x127.0.0.1:80 -I 123.com //状态码为301
实验:一
- 编辑一下配置
- 重新加载一下
- 检查这个模块是否加载,没有加载的话,就编辑这个文件
- /rewrite 搜索一下,取消#号,打开模块
- 重新加载一下这个模块
- 测试一下,301就表示是域名跳转的
四.Apache访问日志
示例一:
- 访问日志记录用户的每一个请求
- vim /usr/local/apache2.4/conf/httpd.conf //搜索LogFormat
- LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 会记录referer和user-agent。
- LogFormat "%h %l %u %t \"%r\" %>s %b" common 简单记录日志
- 把虚拟主机配置文件改成如下:
- <VirtualHost *:80>
- DocumentRoot "/data/wwwroot/www.123.com"
- ServerName www.123.com
- ServerAlias 123.com
- CustomLog "logs/123.com-access_log" combined 定义为记录referer和user-agent格式的日志
- </VirtualHost>
- 重新加载配置文件 -t,graceful
- curl -x127.0.0.1:80 -I 123.com
- tail /usr/local/apache2.4/logs/123.com-access_log
- 查看一下logs日志
- /LogFormat 搜索一下,日志的格式
五. 访问日志不记录静态文件
示例一:
- 网站大多元素为静态文件,如图片、css、js等,这些元素可以不用记录
- 把虚拟主机配置文件改成如下:
- <VirtualHost *:80>
- DocumentRoot "/data/wwwroot/www.123.com"
- ServerName www.123.com
- ServerAlias 123.com
- 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/123.com-access_log" combined env=!img
- </VirtualHost>
- 重新加载配置文件 -t, graceful
- 测试:
- mkdir /data/wwwroot/www.123.com/images //创建目录,并在这目录下上传一个图片
- curl -x127.0.0.1:80 -I 123.com/images/123.jpg
- tail /usr/local/apache2.4/logs/123.com-access_log
实验:一
- 编辑添加变量,符合上面变量的要求的,都不记录日志
- 重新加载配置文件 -t, graceful
- 测试:
- mkdir /data/wwwroot/www.123.com/images //创建目录,并在这目录下上传一个图片
- curl -x127.0.0.1:80 -I 123.com/images/123.jpg
- tail /usr/local/apache2.4/logs/123.com-access_log 查看是否有记录日志
六.访问日志切割
- 日志一直记录总有一天会把整个磁盘占满,所以有必要让它自动切割,并删除老的日志文件
- 把虚拟主机配置文件改成如下:
- <VirtualHost *:80>
- DocumentRoot "/data/wwwroot/www.123.com"
- ServerName www.123.com
- ServerAlias 123.com
- 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/123.com-access_%Y%m%d.log 86400"
- combined env=!img
- </VirtualHost>
- 重新加载配置文件 -t, graceful
- ls /usr/local/apache2.4/logs
实验一:日志切割
- 原图
- 添加下面内容
- 重新加载一下
- 访问一下,让它生产日志
- 可以做个任务计划,crond ,将超过一个月的日志删除或者备份到其他地方,再删除。
七.静态元素过期时间
- 浏览器访问网站的图片时会把静态的文件缓存在本地电脑里,这样下次再访问时就不用去远程下载了
- 增加配置
- <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>
- 需要expires_module
- curl测试,看cache-control: max-age
实验一:
- 编辑添加
- 编辑住配置文件,查找expire,删除#号,开启该模块
- 查看是否开启该模块
- 用curl测试一下
八.扩展
扩展
apache虚拟主机开启php的短标签 http://ask.apelearn.com/question/5370
apache日志记录代理IP以及真实客户端IP http://ask.apelearn.com/question/960
apache只记录指定URI的日志 http://ask.apelearn.com/question/981
apache日志记录客户端请求的域名 http://ask.apelearn.com/question/1037
apache 日志切割问题 http://ask.apelearn.com/question/566