0508LAMP架构(二)
一、Apache默认虚拟主机
一台服务器可以访问多个网站,每个网站都是一个虚拟主机 概念:域名(主机名)、DNS、解析域名、hosts 任何一个域名解析到这台机器,都可以访问的虚拟主机就是默认虚拟主机
1、在windows下写host
(1)按下图路径找到windows下的host文件
(2)以记事本方式打开
(3)添加测试域名
(4)此时我们能够ping通
(5)使用浏览器访问域名也能够访问成功
2、在Linux下配置虚拟主机
(1)vim /usr/local/apache2.4/conf/httpd.conf //编辑配置文件,搜索httpd-vhost,去掉#
(2)打开二级配置文件(虚拟主机配置文件,可定义多个service name)
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
更改为以下内容:
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/abc.com" //定义网站的根目录
ServerNameabc.com //定义域名,只能写1个
ServerAliaswww.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"
ServerName111.com
ServerAliaswww.example.com
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
(3)创建和虚拟主机对应的站点根目录,以及新建相应index.php
(4)在111.com中也定义一个php
(5)检查是否有错并重进加载
(6)用curl -x192.168.133.130:80 abc.com 来测试,无论使用什么域名访问过来,解析到此ip都会指向到abc.com,此abc.com为虚拟主机配置文件中的第一个虚拟主机,它即为默认虚拟主机。
111.com为第二个虚拟主机
结论:
1、主配置文件httpd.conf中,打开了虚拟主机配置文件httpd-vhost,conf,那么主配置文件中所定义的DocumentRoot以及Servername失效。
2、虚拟主机配置文件一旦打开,则里面可以定义很多个VirtualHost,每一个VirtualHost都有一个DocumentRoot和Servername,Servername可以写多个,每一个VirtualHost都代表一个站点,都是一个虚拟主机。在虚拟主机中有一个比较特殊的,叫默认虚拟主机,即无论任何域名解析到这个ip上,它都会去访问这个默认虚拟主机。
二、Apache用户认证
1、全局用户认证
编辑虚拟主机配置文件 httpd-vhosts.conf ,配置第二台虚拟主机信息 vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
以下为配置信息,配置完后保存退出:
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.example.com
<Directory /data/wwwroot/111.com> //指定认证的目录
AllowOverride AuthConfig //这个相当于打开认证的开关
AuthName "111.com user auth" //自定义认证的名字,作用不大
AuthType Basic //认证的类型,一般为Basic
AuthUserFile /data/.htpasswd //指定密码文件所在位置
require valid-user //指定需要认证的用户为全部可用用户
</Directory>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
2、创建密码htpasswd命令
htpasswd命令是Apache的Web服务器内置工具,用于创建和更新储存用户名、域和用户基本认证的密码文件。
/usr/local/apache2.4/bin/htpasswd -c -m /data/.htpasswd luo
New password:
Re-type new password:
Adding password for user luo
cat /data/.htpasswd luo:$apr1$XFA4gjrQ$z7d4/5h81llfs5jb5i/Ot.
-c为创建的意思,若想再增加一个用户张三,则不用再添加-c
/usr/local/apache2.4/bin/htpasswd -m /data/.htpasswd zhangsan
New password:
Re-type new password:
Adding password for user zhangsan
cat /data/.htpasswd
luo:$apr1$XFA4gjrQ$z7d4/5h81llfs5jb5i/Ot.
zhangsan:$apr1$9JUoqWLH$MwA8PpAq.9ZtqHCjh9Qod/
3、重新加载测试
/usr/local/apache2.4/bin/apachectl -t //更改配置后,需要检查配置语法
Syntax OK
/usr/local/apache2.4/bin/apachectl graceful //需要加载
再访问时会提示401错误,说明访问的内容需要做用户验证
curl命令的 -u 参数,可以登录用户名,及密码,状态码为200就意味登录成功
如果故意输错密码,则又会变为401
4、单个文件进行认证
(1)、编辑虚拟主机配置文件 httpd-vhosts.conf ,按下面修改信息;
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.example.com
#<Directory /data/wwwroot/111.com> //加上#,这行不执行
<FilesMatch 123.php> //访问 123.php才认证
AllowOverride AuthConfig
AuthName "111.com user auth"
AuthType Basic
AuthUserFile /data/.htpasswd
require valid-user
</FilesMatch>
#</Directory>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
(2)、更改完毕后,检测重新加载
/usr/local/apache2.4/bin/apachectl -t
Syntax OK
/usr/local/apache2.4/bin/apachectl graceful
(3)、在111.com目录下,新建123.php测试
vim /data/wwwroot/111.com/123.php
访问123.php
curl -x192.168.133.130:80 111.com/123.php -I
HTTP/1.1 401 Unauthorized //401错误,需要用户认证
此时再用-u参数,将用户名luo,密码www123带上,再次访问123.php则成功:
curl -x192.168.112.136:80 -uluo:www123 111.com/123.php -I
HTTP/1.1 200 OK //200状态码,成功
结论:何时会用到用户认证?当有些内容不想让别人随便访问的时候,就需要用到用户认证
三、域名跳转(域名重定向)
域名跳转类似于将网页重新指向另一个网站,但区别是域名跳转会将域名本身重新指向网站,而不使用HTML或脚本来进行重新指向。当域名被设置为跳转至另一网站,域名的地址将不会保留在浏览器的URL栏中,该栏显示的会是新页面的URL。如果您希望保留该栏中的URL,则需要使用隐形跳转。
1、编辑虚拟主机配置文件
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.example.com 2111.com.cn
#<Directory /data/wwwroot/111.com> //去掉#,不执行
#<FilesMatch 123.php>
#AllowOverride AuthConfig
#AuthName "111.com user auth"
#AuthType Basic
#AuthUserFile /data/.htpasswd
#require valid-user
#</FilesMatch>
#</Directory> //去掉#,不执行
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} !^111.com$ //定义rewrite的条件,主机名(域名)不是www.123.com满足条件
RewriteRule ^/(.*)$ http://111.com/$1 [R=301,L] //定义rewrite规则,当满足上面的条件时,这条规则才会执行
</IfModule>
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
2、检测并加载
3、打开Apache的rewrite模块
vim /usr/local/apache2.4/conf/httpd.conf
搜索rewrite
将#删除,保存退出
再次检测加载
4、查看网络链接
:::80 代表全网都支持跳转
5、访问2111.com.cn
curl -x192.168.112.158:80 2111.com.cn -I //-I不显示访问内容,只显示状态码
HTTP/1.1 301 Moved Permanently //状态为301码,跳转
Date: Fri, 29 Jun 2018 02:55:49 GMT
Server: Apache/2.4.33 (Unix) PHP/7.1.6
Location: http://111.com/
Content-Type: text/html; charset=iso-8859-1
6、访问真实存在的域名,会显示200状态码
四、Apache访问日志
1、打开Apache日志目录
/usr/local/apache2.4/logs/
cat /usr/local/apache2.4/logs/111.com-access_log
2、定义日志格式
打开apache主配置文件,查找日志的格式
vim /usr/local/apache2.4/conf/httpd.conf
搜索LogFormat
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined //复杂的格式
LogFormat "%h %l %u %t \"%r\" %>s %b" common //默认的格式
3、打开虚拟主机,配置文件
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
CustomLog "logs/111.com-access_log" combined //把之前的common,改为combined
重新加载主机配置文件
/usr/local/apache2.4/bin/apachectl -t
Syntax OK
/usr/local/apache2.4/bin/apachectl graceful
curl -x192.168.112.158:80 111.com/123.php -I
HTTP/1.1 200 OK //200码
再次查看新生成的日志内容更加完善:
五、访问日志不记录静态文件
很多网站大多为静态网页,网页内部的图片、css文件等同样有其网址链接,我们可以通过设置不记录某些文件来减少无效信息,节省内存资源。
1、配置虚拟主机的配置文件
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
定义如下配置
</IfModule>
ErrorLog "logs/111.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/111.com-access_log" combined env=!img //不记录关于变量img的请求日志
</VirtualHost>
(1)保存加载配置前,先模拟访问jpg格式的图片,查看生成的访问日志
(2)保存加载后,再次模拟访问jpg格式的图片,查看生成的访问日志,则不会包含jpg格式的日志,这样这些无效的访问日志就不会被记录占用空间,节省了内存资源。
六、访问日志切割
在每次打开一个网站后,访问日志都会有一条记录,总有一天会把整个磁盘占满,所以有必要让它自动切割,并删除旧的日志文件;
1、进入配置文件
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
2、修改配置文件如下
</IfModule>
ErrorLog "logs/111.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/111.com-access_%Y%m%d.log 86400" combined env=!img
</VirtualHost>
修改的CustomLog内容说明:
- /usr/local/apache2.4/bin/rotatelogs工具是apache自带的分割日志的工具
- -l参数按当前系统时间为基准进行切割(我国为CST),否则默认UTC(美国)
- %Y%m%d表示年月日,这样会每天记录一个带日期的日志文件,更方便
- 86400(s)表示每天都进行切割,一天24小时等于86400秒
- 还需要做一个任务计划,把超过一个月的日志删除
七、配置静态元素过期时间
静态元素:比如访问的图片、css、js等
当使用浏览器访问网站的图片时会把静态的文件缓存在本地电脑里,这样下次再访问时就不用去远程下载了。 但是缓存多久呢?如果网站图片更新了呢,那么应该访问新图片才是。所以这就涉及到静态文件缓存时长的问题了,也就是“缓存过期时间”。
1、进入配置文件,启用expires模块
vim /usr/local/apache2.4/conf/httpd.conf
LoadModule expires_module modules/mod_expires.so //去掉#,加载模块
2、再次进入虚拟机配置文件
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
添加以下配置内容:
<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>
相关的名词定义:
Acess:表示从访问时间开始
Now:表示按当前时间开始
Plus:在前面的时间基础上加
1 hours/days:表示文件的生命周期
示例:access plus 24 hours 指该文件从访问的时间开始24小时内有效,无需重新获取。
3、保存配置文件,检查语法错误,重新加载
/usr/local/apache2.4/bin/apachectl -t
Syntax OK
/usr/local/apache2.4/bin/apachectl graceful
课堂笔记
1、学会多种途径搜索解决问题的方法
2、Apache2编译安装的另一种方法
下载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