11.16/11.17 Apache默认虚拟主机
虚拟主机:一台服务器虚拟出多个主机出来,这样就实现了一台服务器上跑多个站点每个网站都是一个虚拟主机。
任何一个域名指向这台服务器,只要是没有对应的虚拟主机,就会由这个默认虚拟主机来处理。
1. 修改Apache的配置文件
# vim /usr/local/apache2.4/conf/httpd.conf
修改httpd的主配置文件/usr/local/apache2.4/conf/httpd.conf,搜索ServerName,把#ServerName www.example.com:80前面的#号删除。
2. 修改虚拟主机配置文件
# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
修改后配置文件:
<VirtualHost*:80>
ServerAdmin admin@aminglinux.com
DocumentRoot"/data/wwwroot/aming.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/123.com"
ServerName www.123.com
</VirtualHost>
内容定义说明:
ServerAdmin:指定管理员邮箱,这个没有什么实质作用。
DocumentRoot:为该虚拟主机站点的根目录,网站的程序就放在这个目录下面。
ServerName:为网站的域名,不支持写多个
ServerAlias:为网站的第二域名,只有alias可以写多个域名,用空格分隔。
Errorlog:为站点的错误日志
Customlog:为站点的访问日志。
备注:
1.每个VirtualHost *:80 代表一个主机,一个主机就是一个网站,虚拟主机配置文件可以定义多个VirtualHost。
2.在虚拟主机里有一个默认虚拟主机(第一段VirtualHost ),就是无论任何域名解析到这个IP上都会访问这个虚拟主机。当搜索所有配置段,你发现访问的域名没有在配置里面出现,那它就会默认走虚拟主机的配置。
3.更改完成配置文件后需要在/data目录下创建对应的目录文件:
#mkdir –p /data/wwwroot/aming.com/data/wwwroot/www/123.com
4.在对应的站点根目录下定义一个index.html文件:
#echo “aming.com” > /data/wwwroot/aming.com/index.html
#echo “123.com” > /data/wwwroot/123.com/index.html
5.检查配置文件语法是否正确
#/usr/local/apache2.4/bin/apachectl -t
Syntax OK
6.重新加载配置文件:
/usr/local/apache2.4/bin/apachectlgraceful
7.去访问aming.com/index.html
#curl –x127.0.0.1:80aming.com
Aming.com
# curl –x127.0.0.1:80www.123.com
123.com
#curl –x127.0.0.1:80www.abc.com
Aming.com
重点:
1.在主配置文件中打开了虚拟主机配置文件Vhosts.conf,那主配置其它配置文件DoucmentRoot与ServerName都失效。
2.虚拟主机配置文件一旦打开,它里面可以定义很多个VirtualHos,每一个VirtualHos里面都可以定义DoucmentRoot与ServerName,ServerName可以写多个,每个VirtualHos都代表一个站点,都是一个虚拟主机。在虚拟主机里面有一个比较特殊的,就是默认虚拟主机,所谓默认虚拟主机,就是无论任何域名解析到这个IP上它都会去访问这个默认虚拟主机。
11.18Apache用户认证
用户认证是保护网络系统资源的第一道防线,它控制着所有登录并检查访问用户的合法性,其目标是仅让合法用户以合法的权限访问网络系统的资源。基本的用户认证技术是“用户名+密码”。
- 编辑httpd-vhosts.conf配置文件
· # vim/usr/local/apache2.4/conf/extra/httpd-vhosts.conf
·
· #内容参数如下:
· <VirtualHost *:80>
· DocumentRoot "/data/wwwroot/123.com"
· ServerName 123.com
·
· <Directory /data/wwwroot/123.com>
· AllowOverride AuthConfig
· AuthName "123.com user auth"
· AuthType Basic
· AuthUserfile /data/.htpasswd
· require valid-user
· </Directory>
·
· ServerAlias www.123.com
· ErrorLog "logs/123.com-error_log"
· CustomLog "logs/123.com-access_log"common
· </VirtualHost>
·
· #含义说明
· <Directory /data/wwwroot/123.com> #指定认证的目录
· AllowQverride AuthConfig #这个相当于打开认证的开关
· AuthName "123.com user auth" #自定义认证的名字,作用不大
· AuthType Basic #认证 的类型,一般为Basic
· AuthUserFile /data/.htpasswd #指定密码文件所在位置
· require valid-user #指定需要认证的用户为全部可用用户
- 密码生成器
· # /usr/local/apache2.4/bin/htpasswd -cm /data/.htpasswd aming
· # -c 表示创建 -m 指定MD5加密 指定所在位置 如果再次增加用户可以不用-c选项,-c是首次创建文件使用的
· cat /data/.htpasswd
· aming:$apr1$0bRU1d91$qRqDfW4bvxeHhShhtSCKs1
· # /usr/local/apache2.4/bin/apachectl -t
· Syntax OK
· # /usr/local/apache2.4/bin/apachectl graceful
- curl测试
· # curl -x127.0.0.1:80 www.123.com -I
· HTTP/1.1 401 Unauthorized #状态码401
· Date: Thu, 21 Dec 2017 02:49:11 GMT
· Server: Apache/2.4.28 (Unix) PHP/7.1.6
· WWW-Authenticate: Basic realm="123.com user auth"
· Content-Type: text/html; charset=iso-8859-1
· #此时提示状态码为“401”,说明当前所访问的内容需要进行用户认证。
二.对网站中指定文件设置用户认证
· 配置httpd-vhosts.conf文件
· <VirtualHost *:80>
· #ServerAdmin webmaster@aming-host.example.com
· DocumentRoot "/data/wwwroot/123.com"
· ServerName 123.com
·
· #<Directory /data/wwwroot/123.com> 注释Directory标签
· <FilesMatch 123.php> #改成FilesMatch标签
· AllowOverride AuthConfig
· AuthName "123.com user auth"
· AuthType Basic
· AuthUserfile /data/.htpasswd
· require valid-user
· </FilesMatch>
· #</Directory>
·
· ServerAlias www.123.com
· ErrorLog "logs/123.com-error_log"
· CustomLog "logs/123.com-access_log"common
· </VirtualHost>
·
· #创建123.php文件
· # echo '<?php echo"abc.cm/123.php " ?>' > /data/wwwroot/123.com/123.php
·
11.19/11.20 域名跳转
- 302跳转是暂时的跳转,搜索引擎会抓取新的内容而保留旧的网址。因为服务器返回302代码,搜索引擎认为新的网址只是暂时的。
- 301重定向是永久的重定向,搜索引擎在抓取新内容的同时也将旧的网址替换为重定向之后的网址。
- SEO(Search Engine Optimization)搜索引擎优化,在了解搜索引擎自然排名机制的基础上,对网站进行内部及外部的调整优化,改进网站在搜索引擎中的关键词自然排名,获得更多流量,从而达成网站销售及品牌建设的预期目标
· # vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
· 配置参数
· <VirtualHost *:80>
· DocumentRoot "/data/wwwroot/123.com"
· ServerName 123.com
· <IfModule mod_rewrite.c>
· #需要mod_rewrite的支持
· RewriteEngine on
· #开启rewrite功能
· RewriteCond %{HTTP_HOST} !^123.com$
· #Cond=condition,定义rewrite条件:所有非123.com的主机名(域名)
· RewriteRule ^/(.*)$ http://123.com/$1 [R=301,L]
· #定义rewrite规则:当满足上面条件时才执行当前规则,即跳转到111.com。
· </IfModule>
· ServerAlias www.abc.com
· ErrorLog "logs/123.com-error_log"
· CustomLog "logs/123.com-access_log" common
· </VirtualHost>
· 检查系统配置
· [root@localhost ~]# /usr/local/apache2.4/bin/apachectl -t
· Syntax OK
· [root@localhost ~]# /usr/local/apache2.4/bin/apachectl graceful
·
· #检查Apache是否加载了配置中调用的rewrite模块,如果没有加载,需要编辑Apache配置文件“httpd.conf”
· LoadModule alias_module modules/mod_alias.so
· LoadModule rewrite_module modules/mod_rewrite.so #注释去掉
· LoadModule php7_module modules/libphp7.so
·
· 查看是否有加载模块
· [root@localhost ~]# /usr/local/apache2.4/bin/apachectl -M |grep rewrite
· rewrite_module (shared)
11.21Apache访问日志
- 日志文件所在目录
· # ls /usr/local/apache2.4/logs
· 111.com-access_log 123.com-access_log access_log httpd.pid
· 111.com-error_log 123.com-error_log error_log
查看日志记录
# cat /usr/local/apache2.4/logs/abc.com-access_log
192.168.1.222 - - [05/Jan/2018:16:09:39 +0800] "GET /favicon.ico HTTP/1.1" 404 209
192.168.1.222 - - [05/Jan/2018:16:09:40 +0800] "GET /.php HTTP/1.1" 404 202
192.168.1.222 - - [05/Jan/2018:16:09:47 +0800] "GET /index.html HTTP/1.1" 404 208
192.168.1.222 - - [05/Jan/2018:16:09:50 +0800] "GET /index.html HTTP/1.1" 404 208
192.168.1.222 - - [05/Jan/2018:16:12:35 +0800] "GET /favicon.ico HTTP/1.1" 404 209
192.168.1.222 - - [05/Jan/2018:16:12:35 +0800] "GET /favicon.ico HTTP/1.1" 404 209
- 自定义日志格式
· #文件路径
· # vim /usr/local/apache2.4/conf/httpd.conf
· #参数注解
· LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
· LogFormat "%h %l %u %t \"%r\" %>s %b" common
· #h表示host来源IP
· #l表示login用户
· #u表示user用户密码
· #t表示time时间
· #r表示request(行为)
· #s表示status状态码
· #b表示byte大小
· #user-agent:用户代理
· #referer:跳转到当前位置的上一个网址(即:提供当前IP的网站)
· 即:有combine和common两种格式,默认使用common模式
- 配置日志格式
编辑配置文件“httpd-vhosts.conf”
# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
11.22 访问日志不记录静态文件
· 当访问很多图片,文档等静态资源的时候,会加大你日志的容量,日志容量占用你磁盘空间后,会出现服务器宕机等很严重的问题,这时需要将日志进行配置优化。
· # vi /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
· <VirtualHost *:80>
· DocumentRoot "/data/wwwroot/www123.com"
· ServerName www.123.com
· ServerAlias 123.com
· <IfModule mod_rewrite.c>
· RewriteEngine on
· RewriteCond %{HTTP_HOST} !^www.123.com$
· RewriteRule ^/(.*)$ http://www.123.com/$1 [R=301,L]
· </IfModule>
· SetEnvIf Request_URI ".*\.gif$" image-request
· SetEnvIf Request_URI ".*\.jpg$" image-request
· SetEnvIf Request_URI ".*\.png$" image-request
· SetEnvIf Request_URI ".*\.bmp$" image-request
· SetEnvIf Request_URI ".*\.swf$" image-request
· SetEnvIf Request_URI ".*\.js$" image-request
· SetEnvIf Request_URI ".*\.css$" image-request
· #以上都被标记为img变量;(.gif/.jpg)结尾的;env=!img:这个表示被记录在日志中
· CustomLog "logs/111.com-access_log" combined env=! image-request
· </VirtualHost>
11.23 访问日志切割
· 这个rotetelogs为httpd自带切割日志的工具
· vi /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
·
· </IfModule>
· ErrorLog "logs/111.com-error_log"
· SetEnvIf Request_URI ".*\.gif$" image-request
· SetEnvIf Request_URI ".*\.jpg$" image-request
· SetEnvIf Request_URI ".*\.png$" image-request
· SetEnvIf Request_URI ".*\.bmp$" image-request
· SetEnvIf Request_URI ".*\.swf$" image-request
· SetEnvIf Request_URI ".*\.js$" image-request
· SetEnvIf Request_URI ".*\.css$" image-request
· CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400" combined env=! image-request
· #-l:以标准时间计算
· #使用rotatelogs切割,按86400秒计算(就是一天的时间切割)
· #按每小时 3600秒
· </VirtualHost>
· # /usr/local/apache2.4/bin/apachectl graceful
· 11.24 静态元素过期时间
· 当第一次访问网页时,浏览器自动将静态的元素缓存到你的电脑上(如静态图片资源),第二次访问则不用去服务器上获取,直接在本机电脑上获取缓存,好处:节省了服务器带宽,加速用户访问;缺点:当服务器静态资源更新了,你的本机电脑还在获取之前的缓存,而不是最新的资源,这时用户查看就出错,就需要设置下过期时间
· # vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
· <VirtualHost *:80>
· DocumentRoot "/data/wwwroot/www.123.com"
· ServerName www.123.com
· ServerAlias 123.com
· <IfModule mod_rewrite.c>
· RewriteEngine on
· RewriteCond %{HTTP_HOST} !^www.123.com$
· RewriteRule ^/(.*)$ http://www.123.com/$1 [R=301,L]
· </IfModule>
· <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/111.com-error_log"
· SetEnvIf Request_URI ".*\.gif$" image-request
· SetEnvIf Request_URI ".*\.jpg$" image-request
· SetEnvIf Request_URI ".*\.png$" image-request
· SetEnvIf Request_URI ".*\.bmp$" image-request
· SetEnvIf Request_URI ".*\.swf$" image-request
· SetEnvIf Request_URI ".*\.js$" image-request
· SetEnvIf Request_URI ".*\.css$" image-request
· CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%Y%m%d.log 86400" combined env=! image-request
· </VirtualHost>
·
· # /usr/local/apache2.4/bin/apachectl graceful
· 配置Apache,加载expires模块
· 添加如下内容
· #vim /usr/local/apache2.4/conf/httpd.conf
· LoadModule expires_module modules/mod_expires.so
· #/usr/local/apache2.4/bin/apachectl -M |grep expires
· expires_module (shared)
·