1、Apache默认虚拟主机
httpd的默认虚拟主机目录概要
- 一台服务器可以访问多个网站,每个网站都是一个虚拟主机
- 概念:域名(主机名)、DNS、解析域名、hosts
- 任何一个域名解析到这台机器,都可以访问的虚拟主机就是默认虚拟主机
访问Apache服务ip的80端口的时候,会默认打开/htdocs/ 目录下的index.html网页
- 因为httpd服务部署的时候,在配置文件中定义了默认的网站根目录是/htdocs/ 目录;
- 默认虚拟主机的网站域名是:ServerName下面定义的域名。默认网站只能定义一个域名
[root@aminglinux ~]# vim /usr/local/apache2.4/conf/httpd.conf
DocumentRoot "/usr/local/apache2.4/htdocs" 定义默认网站的根目录
# If your host doesn't have a registered DNS name, enter its IP address here.
#
ServerName www.example.com:80 定义的域名
了解Windows系统hosts文件;
- Windows系统hosts文件:可以定义本机访问的域名指向所指定的ip;
- 路径:C:\Windows\System32\drivers\etc\hosts
- 用记事本打开hosts文件;
- 在里面添加192.168.222.110 aming.com aming1.com(格式:IP+空格+域名;可以一个IP多个域名);
- 打开CMD,ping或在浏览器上打开, admin.com或aming1.com 都可以通或打开(指向临时域名)
注:DNS还没有生效的时候使用;
如果服务器运行多个网站的时候,就必须要启用虚拟主机服务
- 启用虚拟主机服务,打开/usr/local/apache2.4/conf/httpd.conf 配置文件
[root@aminglinux ~]# vim /usr/local/apache2.4/conf/httpd.conf
搜索/extra 关键词
找到# Virtual hosts
#Include conf/extra/httpd-vhosts.conf (这一行注释掉#)
Include conf/extra/httpd-vhosts.conf 开启虚拟主机;
- /usr/local/apache2.4/conf/httpd.conf 配置文件只能定义一个ServerName,
- 定义多个ServerName,需要打开二级配置文件(/usr/local/apache2.4/conf/extra/httpd-vhosts.conf);
- 二级配置文件就是虚拟主机配置文件;
- 一个<VirtualHost *:80></VirtualHost>代表一个网站一个虚拟主机;
[root@aminglinux ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any <VirtualHost> block.
#
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com 邮箱,可去掉
DocumentRoot "/usr/local/apache2.4/docs/dummy-host.example.com" 根目录
ServerName dummy-host.example.com 域名
ServerAlias www.dummy-host.example.com 定义多个域名
ErrorLog "logs/dummy-host.example.com-error_log" 日志文件
CustomLog "logs/dummy-host.example.com-access_log" common
</VirtualHost>
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host2.example.com
DocumentRoot "/usr/local/apache2.4/docs/dummy-host2.example.com"
ServerName dummy-host2.example.com
ErrorLog "logs/dummy-host2.example.com-error_log"
CustomLog "logs/dummy-host2.example.com-access_log" common
</VirtualHost>
更改根目录和域名两个主要参数;日志文件最好改下名好区分;
测试:对虚拟主机配置文件进行修改,配置网站:虚拟主机A:abc.com 和虚拟主机B:111.com
<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
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
- 创建虚拟主机网站A和B的根目录
[root@aminglinux ~]# cd /data/
[root@aminglinux data]# ls
mariadb mysql
[root@aminglinux data]# mkdir -p wwwroot/111.com/
[root@aminglinux data]# mkdir -p wwwroot/abc.com/
[root@aminglinux data]# ls /data/wwwroot/
111.com abc.com
[root@aminglinux data]#
- 创建虚拟主机网站A和B的主页
[root@aminglinux ~]# vim /data/wwwroot/abc.com/index
[root@aminglinux ~]# vim /data/wwwroot/111.com/index
创建后编辑成
[root@aminglinux ~]# cat /data/wwwroot/111.com/index.php
<?php
echo "111.com"
?>
[root@aminglinux ~]# cat /data/wwwroot/abc.com/index.php
<?php
echo "abc.com"
?>
- 检查配置文件,重新加载配置文件
[root@aminglinux ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@aminglinux ~]# /usr/local/apache2.4/bin/apachectl graceful
curl -xIP+域名 检测访问网站,等于windows ping
[root@aminglinux ~]# curl -x192.168.222.110:80 abc.com
abc.com[root@aminglinux ~]# curl -x192.168.222.110:80 111.com
111.com
2、Apache用户认证
- 前提是在物理机hosts文件添加虚拟机IP和虚拟主机域名
配置用户认证
- 编辑虚拟主机配置文件:/usr/local/apache2.4/conf/extra/httpd-vhosts.conf
[root@aminglinux ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<Directory /data/wwwroot/abc.com>
Allowoverride AuthConfig
AuthName "abc.com user auth"
AuthType Basic
AuthUserFile /data/.htpasswd
require valid-user
</Directory>
<Directory /data/wwwroot/abc.com>
#指定认证的目录
Allowoverride AuthConfig
#该行相当于打开用户认证的开关
AuthName "abc.com user auth"
#自定义认证的名字,作用不大
AuthType Basic
#认证类型,一般为basic
AuthUserFile /data/.htpasswd
#指定密码文件所在位置(需要手动添加)
require valid-user
#设定需要认证的用户为“AuthUserFile”中定义的所有可用用户
- 创建“httpd-vhosts.conf”中指定的密码文件
[root@aminglinux ~]# /usr/local/apache2.4/bin/htpasswd -c -m /data/.htpasswd abc
New password:
Re-type new password:
Adding password for user abc
[root@aminglinux ~]# cat /data/.htpasswd
abc:$apr1$88kpRBZO$5ECQFHexKP7Pz3Pdxvuzz/
- 检查配置文件,重新加载配置文件
[root@aminglinux ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@aminglinux ~]# /usr/local/apache2.4/bin/apachectl graceful
测试
[root@aminglinux ~]# curl -x192.168.222.110:80 abc.com -I
HTTP/1.1 401 Unauthorized
Date: Thu, 28 Jun 2018 22:45:46 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
WWW-Authenticate: Basic realm="abc.com user auth"
Content-Type: text/html; charset=iso-8859-1
[root@aminglinux ~]# curl -x192.168.222.110:80 111.com -I
HTTP/1.1 401 Unauthorized
Date: Thu, 28 Jun 2018 22:46:09 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
WWW-Authenticate: Basic realm="111.com user auth"
Content-Type: text/html; charset=iso-8859-1
此时提示状态码为“401”,说明当前所访问的内容需要进行用户认证。
使用用户&密码访问:
[root@aminglinux ~]# curl -x192.168.222.110:80 -uabc:123456 abc.com -I
HTTP/1.1 200 OK
Date: Thu, 28 Jun 2018 23:02:27 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
X-Powered-By: PHP/5.6.30
Content-Type: text/html; charset=UTF-8
[root@aminglinux ~]# curl -x192.168.222.110:80 -uabc:123456 111.com -I
HTTP/1.1 200 OK
Date: Thu, 28 Jun 2018 23:02:43 GMT
Server: Apache/2.4.29 (Unix) PHP/5.6.30
X-Powered-By: PHP/5.6.30
Content-Type: text/html; charset=UTF-8
3、域名跳转 域名跳转分类及区别
种类:
301表示永久跳转;302表示临时跳转。
区别:
- 使用效果不同
- 302跳转是暂时的跳转,搜索引擎会抓取新的内容而保留旧的网址。因为服务器返回302代码,搜索引擎认为新的网址只是暂时的。
- 301重定向是永久的重定向,搜索引擎在抓取新内容的同时也将旧的网址替换为重定向之后的网址。
- SEO使用方式不同
在搜索引擎优化中302跳转被众多黑帽SEO优化人员追求,对网站进行恶意302跳转至非用户目标访问网站,因此搜索引擎对于网站的302跳转通常是比较不友好,所以要慎用302跳转
- SEO(Search Engine Optimization)搜索引擎优化,在了解搜索引擎自然排名机制的基础上,对网站进行内部及外部的调整优化,改进网站在搜索引擎中的关键词自然排名,获得更多流量,从而达成网站销售及品牌建设的预期目标。
域名跳转配置
- 配置虚拟主机配置文件:httpd-vhosts.conf
[root@aminglinux ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
#<Directory /data/wwwroot/111.com>
#Allowoverride AuthConfig
#AuthName "111.com user auth"
# AuthType Basic
# AuthUserFile /data/.htpasswd
# require valid-user
# </Directory>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
<IfModule mod_rewrite.c> //编译Apache的时候,指定了mods=most,会自动加入该模块
RewriteEngine on //打开域名跳转功能
RewriteCond %{HTTP_HOST} !^111.com$ //定义rewrite的条件
RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L] //定义跳转规则 跳到 http://111.com去
</IfModule>
- 检查配置文件,重新加载配置文件
[root@aminglinux ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@aminglinux ~]# /usr/local/apache2.4/bin/apachectl graceful
测试
4、Apache访问日志
- 日志文件所在位置:/usr/local/apache2.4/logs
[root@aminglinux ~]# ls /usr/local/apache2.4/logs
111.com-access_log abc.com-access_log access_log
111.com-error_log abc.com-error_log error_log
系统自带日志格式:combine和common两种格式,默认使用common模式.
[root@aminglinux ~]# vim /usr/local/apache2.4/conf/httpd.conf
<IfModule log_config_module>
#
# The following directives define some format nicknames for use with
# a CustomLog directive (see below).
#
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
# You need to enable mod_logio.c to use %I and %O
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
#h表示host来源IP,l表示login用户,u表示user用户密码,t表示time时间,r表示request(行为),s表示status状态码,b表示byte大小
#user-agent:用户代理
#referer:跳转到当前位置的上一个网址(即:提供当前IP的网站)
**配置日志格式:**编辑虚拟主机配置文件“httpd-vhosts.conf”:
[root@aminglinux ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.examle.com
#<Directory /data/wwwroot/111.com>
#Allowoverride AuthConfig
#AuthName "111.com user auth"
# AuthType Basic
# AuthUserFile /data/.htpasswd
# require valid-user
# </Directory>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common common改为combined
#<IfModule mod_rewrite.c>
# RewriteEngine on
# RewriteCond %{HTTP_HOST} !^111.com$
# RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L]
</IfModule>
</VirtualHost>
- 检查配置文件,重新加载配置文件
[root@aminglinux ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@aminglinux ~]# /usr/local/apache2.4/bin/apachectl graceful
- 查看:cat /usr/local/apache2.4/logs/111.com-access_log
[root@aminglinux ~]# cat /usr/local/apache2.4/logs/111.com-access_log
192.168.222.110 - - [29/Jun/2018:06:20:19 +0800] "GET HTTP://111.com/ HTTP/1.1" 200 9
192.168.222.110 - - [29/Jun/2018:06:44:33 +0800] "GET HTTP://111.com/ HTTP/1.1" 401 381
192.168.222.110 - - [29/Jun/2018:06:46:09 +0800] "HEAD HTTP://111.com/ HTTP/1.1" 401 -
192.168.222.110 - aaa [29/Jun/2018:06:54:33 +0800] "HEAD HTTP://111.com/ HTTP/1.1" 401 -
192.168.222.110 - bc [29/Jun/2018:07:00:50 +0800] "HEAD HTTP://111.com/ HTTP/1.1" 401 -
192.168.222.110 - abc [29/Jun/2018:07:02:43 +0800] "HEAD HTTP://111.com/ HTTP/1.1" 200 -
192.168.222.110 - - [29/Jun/2018:07:19:23 +0800] "HEAD HTTP://111.com/ HTTP/1.1" 401 -
192.168.222.110 - - [29/Jun/2018:07:20:03 +0800] "HEAD HTTP://111.com/ HTTP/1.1" 200 -
5、访问日志不记录静态文件
apache的访问日志会记录网站每个文件被获取的信息,这样日志信息量会很大,我们排查日志的时候不容易筛选有用的记录。我们可以把静态文件的日志设置为不记录,提高我们排查日志信息的效率
在配置文件下:/usr/local/apache2.4/conf/extra/httpd-vhosts.conf
[root@aminglinux ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.111.com
SetEnvIf Request_URI ".*\.gif$" img 定义元素为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
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common env=!img 指定非img文件才记录
- 检查配置文件,重新加载配置文件
[root@aminglinux ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@aminglinux ~]# /usr/local/apache2.4/bin/apachectl graceful
再访问网站下的图片文件,查看日志已不在记录图片的访问日志了 6、访问日志切割
随着网站访问量的增大,我们网站的访问日志文件也会变得很大,为了保持磁盘空间,方便访问日志的管理(备份、删除历史日志等。),我们可以进行日志切割,每天的访问日志独立切割出来。
在配置文件下:/usr/local/apache2.4/conf/extra/httpd-vhosts.conf
[root@aminglinux ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.111.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
ErrorLog "logs/111.com-error_log"
CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%y%m%d.log 86400" common env=!img
</VirtualHost>
//%y%m%d以年月日命名,86400秒即1天切割一次。rotatelogs使用apache的切割日志工具。
rotatelogs工具,它是Apache自带的一个切割工具
-l参数,目的是以当前系统时间为基准。如果不指定 -l ,那么就会指定 UTC时间 的格式去切割日志
在中国应该是 CST,在美国是 UTC ,两者时区不同,相差几个小时
定义日志的名称,因为是切割的,所以根据时间日期让它自动变,就需要加一个变量%Y%m%d
%Y,表示 年
%m,表示 月
%d,表示 日
按规定时间去生成,时间段为1天,换算成秒,就是86400秒
检查配置文件,重新加载配置文件
[root@aminglinux ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@aminglinux ~]# /usr/local/apache2.4/bin/apachectl graceful
7、静态元素过期时间
浏览器访问网站,获取的图片、css等静态元素会保存在本地电脑缓存文件夹里,方便下次再此访问的时候提高访问速度。我们也可以在服务器端设置这些静态元素的过期时间,可以减网站的带宽压力
在配置文件下:/usr/local/apache2.4/conf/extra/httpd-vhosts.conf
添加的配置文件
- 所有的图片定义成一天
- 所有的 css 和 js 都定义成两小时
- 其他的没有任何的缓存
<IfModule mod_expires.c>
ExpiresActive on //打开该功能的开关
ExpiresByType image/gif "access plus 1 days" //定义Type类型,这里是一天
ExpiresByType image/jpeg "access plus 24 hours" //定义Type类型,这里是24小时
ExpiresByType image/png "access plus 24 hours" //定义Type类型
ExpiresByType text/css "now plus 2 hour" //定义Type类型,两小时
ExpiresByType application/x-javascript "now plus 2 hours" // 定义Type类型
ExpiresByType application/javascript "now plus 2 hours" //定义Type类型
ExpiresByType application/x-shockwave-flash "now plus 2 hours" //定义Type类型
ExpiresDefault "now plus 0 min" //定义Type类型
例:
[root@aminglinux ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
ServerName 111.com
ServerAlias www.111.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
<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"
CustomLog "|/usr/local/apache2.4/bin/rotatelogs -l logs/111.com-access_%y%m%d.log 86400" common env=!img
</VirtualHost>
- 检查配置文件,重新加载配置文件
[root@aminglinux ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@aminglinux ~]# /usr/local/apache2.4/bin/apachectl graceful
- 编辑主配置文件,打开expire模块
[root@aminglinux ~]# vim /usr/local/apache2.4/conf/httpd.conf
搜索 /expire ,找到该行的配置文件,并去除的注释符 # 号
LoadModule expires_module modules/mod_expires.so
- 重新加载配置文件,并查看expire模块
[root@aminglinux ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@aminglinux ~]# /usr/local/apache2.4/bin/apachectl graceful
[root@aminglinux ~]# /usr/local/apache2.4/bin/apachectl -M |grep expire
expires_module (shared)
[root@aminglinux ~]#
- 按ctrl+F5可以强制把浏览器本地的缓存清空
- 用curl命令去访问图片
[root@aminglinux ~]# curl -x192.168.222.110:80 111.com/11.png -I
- 若是将expire模块去除,再去curl命令查看图片,就无法看到Cache-Control参数