2018.9.8日,预习笔记,LAMP架构(二)

  1. Apache默认虚拟主机
  2. Apache用户认证
  3. 域名跳转
  4. Apache访问日志
  5. 访问日志不记录静态文件
  6. 访问日志切割
  7. 静态元素过期时间
  8. 拓展: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默认虚拟主机

00188d2af6e0dc6a0a823100503cfa99fb6.jpg

  • 一台服务器可以访问多个网站,每个网站都是一个虚拟主机  
  • 概念:域名(主机名)、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 测试一下
  • 0d92b22a9f570e121e9693191600513044b.jpg

示例二:

  • C:\windows\System32\drivers\etc\hosts Windows的hosts路径
  • 可以如下图,自定义:

c499f8b27c856d40e4deccb303aa53d6414.jpg

 

  • vim /usr/local/apache2/conf/httpd.conf //搜索httpd-vhost
  • 定义网址的根目录在哪

f4dfe68f49835af54fc41f5425f50b49a98.jpg

  • /ServerName 查找到该位置
  • 用来定义网站的域名,

9ffbc2085c53023b2f19eeafbcd64b4848a.jpg

  • 任意域名都可以访问它,只要指向到该网址的,就会打开Apache的默认虚拟主机

296ce37e81c525d4215129c5e03d889c83d.jpg

  • /extra 搜索
  • 这个是虚拟主机,将这一行的#去掉,前面设置的那些失效,不用了。

2cfc2a925841c4af0134c9cda1ae66f098d.jpg

  • 打开虚拟主机配置文件

314519a8966c09cfc97fcc2109385e1d726.jpg

 

6dcfe0311169f382fc76aae29e8b2b474a8.jpg

  • 编辑更改一下

c611f1f88d61fe1c3b00fb7ad757b29584b.jpg

59e9e1f3bf63e7f253c5f117fa13deefc21.jpg

  • 创建对应的目录

fd5a88607da380913fe6753237f0537d8ec.jpg

  • 编辑定义一下

5e5b9808952ef0db2f052b9583cdba21c5a.jpg

  • 111.com也定义一下

99c470387e4a9b51357660d9062885c0058.jpg

d52a317c08a1cb9f019b470f6db198c7341.jpg

  • 检查并重启服务

c9e2fab0c58c5b952b29987330306c63d68.jpg

  • #curl 命令,-x 用来指定网址 ,后面是指定域名,结论是指定域名访问地址

0d92b22a9f570e121e9693191600513044b.jpg

 

二.Apache用户认证

234405d51ede2341f7f2ec6134adbca6095.jpg

  •  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那个虚拟主机编辑成如下内容

a498cc3ab394d2e8a4c878685cb0f80281a.jpg

ddb451efc567f422768f3ac238b2425a6b1.jpg

  • 生成密钥,-m 是指定加密类型,-c是创建

c50b8405eb2db76a875462edd604f777165.jpg

  • 重新加载一下

fa14ed3226e1a0243d6894368332a4424b2.jpg

  • 访问一下,提示要用户认证

53156d659c06330de4456dae4a83c4c3b56.jpg

  • -u 指定用户认证密码与用户

0072f6633fafdcbc28aee5d983c4a7921da.jpg

实验:二

a86316ca9afb28d245681cde0a9c9902beb.jpg

  • 还可以针对单个文件进行认证
  • <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>

 

  • 配置更改一下

7e5a9e3c60ca519be88dac93797673870ab.jpg

  • 重新加载一下

d0af9347e146272cf1da5a93e81e007ee67.jpg

  • 编辑一下123.PHP文件

387442e3f188f6859dfc698e3163d04b2a4.jpg

38efed939c20387ddf1abbd4fc4d82f188c.jpg

  • 访问其他的不会401,访问123.php才会认证

73d4c955914dda31b8e93f405d51db617fb.jpg

0bd535a7a5192ac328ff6d01629221727a2.jpg

 

三. 域名跳转

a122a77c2b6aa36369c8fbe6800e3a1406f.jpg

  • 需求,把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

 

实验:一

  • 编辑一下配置

55ce0deae8fe75b41d96ada4282a3a30ff0.jpg

 

89bfb5f657210945717ccea56f1e87729ff.jpg

  • 重新加载一下

5f2983b5951b7ef653881a8d2f673c4d087.jpg

  • 检查这个模块是否加载,没有加载的话,就编辑这个文件

e9d9eed4a399b2cf56c3c4fbac2680e3d92.jpg

  • /rewrite 搜索一下,取消#号,打开模块

dc86b0f5a16d496d9389b69845c87a71358.jpg

  • 重新加载一下这个模块

33084e7d9334892029d18bb5c47af2be8ab.jpg

  • 测试一下,301就表示是域名跳转的

268665c2fe8f9aa4ed8953a2a2e82f01697.jpg

 

四.Apache访问日志

3c731c85e513958419393acec2375505558.jpg

示例一:

  • 访问日志记录用户的每一个请求  
  • 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日志

d4509caa772c100b9b3c5d5be28331e41e7.jpg

  • /LogFormat 搜索一下,日志的格式

c44561f7d9947208a7b22547d6cf838d41b.jpg

 

五. 访问日志不记录静态文件

82204b3c5b1e8c6641031e5292c897aaca5.jpg

示例一:

  • 网站大多元素为静态文件,如图片、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

 

实验:一

  • 编辑添加变量,符合上面变量的要求的,都不记录日志

5378156c784ce8c3d5a862963bccb6fff92.jpg

  • 重新加载配置文件 -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 查看是否有记录日志

 

 

六.访问日志切割

07576763458b56f2de2c0d7b8f7b28a1eca.jpg

  • 日志一直记录总有一天会把整个磁盘占满,所以有必要让它自动切割,并删除老的日志文件  
  • 把虚拟主机配置文件改成如下:  
  • <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

 

实验一:日志切割

  • 原图

7699350587465073bfa02fac3a55efb49a7.jpg

  • 添加下面内容

6035a6d6673b61c5f161c4604d988b9ed71.jpg

  • 重新加载一下

b0e725f8b2c4c86e01ea6fc4cb86156efb8.jpg

  • 访问一下,让它生产日志

0df6609bf0cd24205141a8da9d1a2ddc011.jpg

  • 可以做个任务计划,crond ,将超过一个月的日志删除或者备份到其他地方,再删除。

 

七.静态元素过期时间

36a6b12b60263af09cfa2ebf567f651b6b0.jpg

  • 浏览器访问网站的图片时会把静态的文件缓存在本地电脑里,这样下次再访问时就不用去远程下载了
  •  增加配置
  • <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

 

 

实验一:

  • 编辑添加

0c7da482864f3895ca95427c469ef1570f0.jpg

  • 编辑住配置文件,查找expire,删除#号,开启该模块

8fbd76d49eb092b63bdb08c49116468b541.jpg

7396e9171b5b13ef2f4723e3c5699dd5f95.jpg

  • 查看是否开启该模块

707e6ea613cf621f3979dbd4bcd44d4d8eb.jpg

  • 用curl测试一下

26d5a4b048ed54e796973088784b96e13fc.jpg

 

八.扩展

扩展 
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

 

转载于:https://my.oschina.net/u/3912766/blog/2046000

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值