nginx三:常用功能(二):日志、虚拟主机、Location
5.日志
nginx有非常灵活的日志记录模式。
ELK,用来采集nginx、java(json格式)....等的日志。
log_format compression '$remote_addr - $remote_user [$time_local] ' '"$request" $status $bytes_sent ' '"$http_referer" "$http_user_agent" "$gzip_ratio"'; access_log /spool/logs/nginx-access.log compression buffer=32k;

在没有代理上网时,remote_addr和http_x_forwarded_for记录的IP地址是一样的。
在有代理上网时,remote_addr记录的是代理服务器的地址,http_x_forwarded_for同时记录代理服务器的地址和原始上网的地址。
6.虚拟主机(虚拟站点)
所谓虚拟主机,就是在一台服务器上配置多个网站。
如:公司主页、博客、论坛看似三个网站,实际上可以运行在一台服务器上。
实现虚拟主机的方式:
- 基于IP:不同的IP,表示不同的虚拟主机
- 基于端口:相同的IP,不同的端口,表示不同的虚拟主机
- 基于域名:相同的IP,相同的端口,不同的域名
需求:部署公司三个站点,分别是www,bbs,blog
示例1:基于IP的虚拟主机,一般很少使用
a.创建目录:mkdir -p /var/www/{www,bbs,blog}
b.创建对应的配置文件:
vim /etc/nginx/conf.d/www.conf
server { listen 192.168.1.20:80; server_name www.myweb.com; location / { root /var/www/www; index index.html } }
vim /etc/nginx/conf.d/blog.conf
server { listen 192.168.1.21:80; server_name blog.myweb.com; location / { root /var/www/blog; index index.html } }
vim /etc/nginx/conf.d/bbs.conf
server { listen 192.168.1.22:80; server_name bbs.myweb.com; location / { root /var/www/bbs; index index.html } }
示例2:基于端口的虚拟主机
a.同样,创建目录:mkdir -p /var/www/{www,blog,bbs}
b.创建对应的配置文件
vim /etc/nginx/conf.d/www.conf
server { listen 80; server_name www.myweb.com; location / { root /var/www/www; index index.html } }
vim /etc/nginx/conf.d/blog.conf
server { listen 81; server_name blog.myweb.com; location / { root /var/www/blog; index index.html } }
vim /etc/nginx/conf.d/bbs.conf
server { listen 82; server_name bbs.myweb.com; location / { root /var/www/bbs; index index.html } }
c.语法测试,重载nginx:
nginx -t
systemctl reload nginx
d.修改hosts解析
192.168.1.10 www.myweb.com blog.myweb.com bbs.myweb.com
e.测试:
http://www.myweb.com http://blog.myweb.com:81 http://bbs.myweb.com:82
示例3:基于域名的虚拟主机
a.同样,创建目录:mkdir -p /var/www/{www,blog,bbs}
b.创建对应的配置文件
vim /etc/nginx/conf.d/www.conf
server { listen 80; server_name www.myweb123.com; location / { root /var/www/www; index index.html; } }
vim /etc/nginx/conf.d/blog.conf
server { listen 80; server_name blog.myweb123.com; location / { root /var/www/blog; index index.html; } }
vim /etc/nginx/conf.d/bbs.conf
server { listen 80; server_name bbs.myweb123.com; location / { root /var/www/bbs; index index.html; } }
c.语法测试,重载nginx:
nginx -t
systemctl reload nginx
d.修改hosts解析
192.168.1.10 www.myweb123.com blog.myweb123.com bbs.myweb123.com
e.测试:
http://www.myweb123.com http://blog.myweb123.com http://bbs.myweb123.com
通常access_log,应该放在server下面,以便区分不同的server对应不同的log
7.Location:用来控制访问路径
1).server中,错误页面处理
location / { root /var/www/blog; index index.html; } error_page 500 502 503 503 /50x.html; # 将500,502,503,504的错误页面,定义/50x.html文件来响应错误页面。/表示根,必须在这之前定义根root location = /50x.html { # 定义错误页面的路径:根目录下的50x.html文件 root /var/www/blog; }
2).在apache和nginx中,使用PHP代理,是不一样的:
在apache中,带有php模块,nginx中没有。
在apache中,可以使用直接使用apache来代理PHP脚本。
在nginx中,需要将php脚本传递给fastCGI server。

3).拒绝访问的文件:
location ~ /\.ht { # 拒绝访问根目录下,.ht开头的文件
deny all;
}
location ~ \.avi$ { #拒绝访问任何目录下的avi文件
allow 192.0.0.0/24;
deny all;
}
4.location语法:
location [= ^~ ~ ~* !~ !~* /] /uri/ {.........}

测试优先级:
server { listen 80; server_name test.myweb123.com; location / { default_type text/html; return 200 "location /"; } location =/ { default_type text/html; return 200 "location =/"; } location ~ / { default_type text/html; return 200 "location ~"; } # location ^~ / { # default_type text/html; # return 200 "location ^~"; # } }
vim /etc/hosts
192.168.1.10 www.myweb123.com blog.myweb123.com bbs.myweb123.com test.myweb123.com
访问1:curl test.myweb123.com
返回:location =/,可以“=”的优先级最高
访问2:注释掉"location = "部分,再curl
返回:location ~
5.location应用场景


说明:
\. 表示. \为转义符
.* 表示任意路径任意字符
测试:
创建一个avi文件:
dd if=/dev/zero of=test.avi bs=10M count=1
禁止访问avi文件:
location ~ \.avi$ {
deny all;
}
nginx -t
systemctl reload nginx
posted on 2014-08-25 15:07 myworldworld 阅读(109) 评论(0) 收藏 举报
浙公网安备 33010602011771号