2018-6-27 笔记
11.16 Apache默认虚拟主机
一个服务器可以运行多个网站,每个网站都是一个虚拟主机
任何一个域名解析到这台机器,都可以访问的虚拟主机就是默认虚拟主机
在dns还未生效时,通过修改hosts文件,设置ip与域名的映射解析,来配置域名。
Windows系统中hosts位置
“C:\Windows\System32\drivers\etc\hosts” 可以在里面定义ip域名,,
注释掉之后,会链接公网ip,因为不被指定
说明:在此可以自定义匹配本地IP和域名,目的是添加临时访问地址(在DNS未生效的时候使用)。
这里为apache默认主机,
去掉注释:
虚拟主机配置文件
# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.cof
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
# vim/usr/local/apache2.4/conf/extra/httpd-vhosts.conf
# Almost any Apache directive may gointo a VirtualHost container.
# The first VirtualHost section is usedfor all requests that do not
# match a ServerName or ServerAlias inany <VirtualHost> block.
#
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com此行可删掉
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>
ServerAdmin webmaster@dummy-host2.example.com
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>
每组代表一个主机,也就是一个网站,如果不打开他,任何域名就只能访问这一个主机
# mkdir /data/wwwroot 创建对应的目录
# mkdir /data/wwwroot/abc.com
# mkdir /data/wwwroot/111.com
# vim /data/wwwroot/abc.com/index.php
# vim /data/wwwroot/111.com/index.php
# /usr/local/apache2.4/bin/apachectl -t检查是否有错误
Syntax OK
# /usr/local/apache2.4/bin/apachectlgraceful重新加载
# curl -x 192.168.133.130;80 abc.com 指定网址访问的ip,与配置hosts效果一样
结论:在htttpt.conf内打开Virtual hosts文件从而使虚拟主机配置文件生效,而主机配置文件内的DocumentRoot和servername文件将失效,,,而且虚拟主机配置文件内可以定义多个VirtualHost,每个VitualHost都有其DocumentRoot和ServerName,,每个VirtaulHost都代表一个主机,唯独特殊的一位第一个也就是默认虚拟主机,任何一个域名解析到这个ip上,都会访问到这个默认虚拟主机上
11.18Apache用户认证
# vim/usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost*:80>
DocumentRoot"/data/wwwroot/111.com"
ServerName111.com
<Directory/data/wwwroot/111.com> //指定认证的目录
AllowOverrideAuthConfig //打开认证开关
AuthName"111.com user auth" //自定义认证名称
AuthType Basic //认证类型
AuthUserFile/data/.htpasswd //指定密码文件所在位置
requirevalid-user //指定需要认证的用户为全部可用用户
</Directory>
#/usr/local/apache2.4/bin/htpasswd -c -m /data/.htpasswd aming 生成密码文件
New password:输入密码
Re-type newpassword:再次
Adding passwordfor user aming
# cat/data/.htpasswd
aming:$apr1888888888888888888888888888
#/usr/local/apache2.4/bin/htpasswd -m /data/.htpasswd zhangsan
New password:
Re-type newpassword:
Adding passwordfor user usertest
# cat/data/.htpasswd
aming:$apr1$TNhQeaqF$hF0bTFA5U151cnolkOsN81
usertest:9999999999999999999999999999999999
重新加载:#/usr/local/apache2.4/bin/apachectl -t
Syntax OK
#~~~~~~/bin/apachectlgraceful
# curl-x127.0.0.1:80 111.com
<!DOCTYPEHTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>401Unauthorized</title>
~
# curl-x127.0.0.1:80 111.com -I
HTTP/1.1 401Unauthorized
Date: Sun, 04Mar 2018 14:45:26 GMT
Server:Apache/2.4.28 (Unix) PHP/7.1.6
WWW-Authenticate:Basic realm="111.com user auth"
Content-Type:text/html; charset=iso-8859-1
401为提示需要验证,密码登录即可
# curl-x127.0.0.1:80 111.com -u aming:lishiming
111.com curl输入密码格式
# curl-x127.0.0.1:80 111.com -u aming:123456 -I
HTTP/1.1 200 OK
# curl-x127.0.0.1:80 111.com -u aming:1234567输错密码仍然提示401
<!DOCTYPEHTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>401Unauthorized</title>
针对单个文件进行认证:
<VirtualHost*:80>
DocumentRoot"/data/wwwroot/111.com"
ServerName111.com
#<Directory/data/wwwroot/111.com>
<FilesMatch 123.php>
AllowOverride AuthConfig
AuthName "111.com user auth"
AuthType Basic
AuthUserFile /data/.htpasswd
require valid-user当访问123.php这个文件(FilesMatch)的时候才会执行这些配置
</FilesMatch>
#</Directory>
ErrorLog"logs/111.com-error_log"
CustomLog"logs/111.com-access_log" common
</VirtualHost>
# vim conf/extra/httpd-vhosts.conf
#./bin/apachectl -t
Syntax OK
#./bin/apachectl graceful
# curl -x127.0.0.1:80 111.com
111.com
# curl -x127.0.0.1:80 111.com/123.php
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML2.0//EN">
<html><head>
<title>401 Unauthorized</title>
# curl -x127.0.0.1:80 111.com/123.php -u aming:lishiming
123.php 测试
11.1911.20 域名跳转(上)(下)
301永久跳转 302临时重定向 403授权
<IfModule mod_rewrite.c> //需要mod_rewrite模块支持
RewriteEngineon //打开rewrite功能 on/off
RewriteCond%{HTTP_HOST} !^111.com$ //定义Rewrite条件,当主机名不是111.com时满足条件
RewriteRule ^/(.*)$httpd://111.com/$1 [R=301,L] //定义rewrite规则,当满足上面条件时,这条规则才会执行
</IfModule>
配置完毕要检测>重新加载
检测apache是否加载了rewrite模块,如果没有加载# vi /usr/local/apache2.4/conf/httpd.conf(因为在编译时候加了most,所以此模块一定存在)
打开这一行
模块已经加载
可以开始测试:
# curl -x192.168.133.150:80 2111.com.cn -I(-I不显示内容,只显示状态码)
可以实现跳转:
11.21Apache访问日志
定义日志格式:
# vim /usr/local/apache2.4/conf/httpd.conf
LogFormat,就是日志的格式
默认为common格式 combined会多出用户代理(User -Agent)referer 上一级历史
更改格式:
修改虚拟主机配置文件:
保存
查看日志
11.22访问日志不记录静态文件
在这里定义
将红色类型请求,不记录在日志内
11.23访问日志切割
在虚拟机配置文件下修改:
CustomLog"|/usr/local/apache2.4/bin/rotatelogs -l logs/etc.com-access_%y%m%d.log86400" combined env=!img
指定工具rotatelogs -l
%y%m%d:设置日志显示年月日
86400:切割时间(即一天)
然后访问一次:
curl -x 127.0.0.1:80 www.etc.com -I
11.24静态元素过期时间
浏览器访问网站的图片时会把静态的文件缓存在本地电脑里,这样下次再访问时就不用去远程下载了!
增加配置:
需要打开expiers_module模块
1.vim/usr/local/apache2.4/conf/httpd.conf—搜索expiers去掉#号
2.在虚拟机配置增加配置:
1.vim /usr/local/apache2.4/conf/extra/httpd-vhosts.con
<IfModule mod_expires.c>
ExpiresActive on //打开功能开关
ExpiresByType image/gif "access plus 1 days" //设置文件类型,和缓存时间
ExpiresByType image/jpeg "access plus 1 days"
ExpiresByType image/png "access plus 24 hours" //也可以设置小时
ExpiresByType text/css "nowplus 2 hour"
ExpiresByType application/x-javascript "access plus 1 days"
ExpiresByType application/javascript "access plus 1 days"
ExpiresByType application/x-shockwave-flash "access plus 1days"
ExpiresDefault "now plus 0min"
</IfModule>
3. /usr/local/apache2.4/bin/apachectl-t //检查
/usr/local/apache2.4/bin/apachectl graceful //加载配置文件
4.查看expires是否加载
/usr/local/apache2.4/bin/apachectl -M|grep expires -i
扩展
apache虚拟主机开启php的短标签 http://ask.apelearn.com/question/5370
apache日志记录代理IP以及真实客户端IPhttp://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