您的位置:首页 > 运维架构 > Nginx

Nginx一些feature

2015-03-31 18:12 239 查看
一、自定义错误状态码页面
支持404,403,500,502,503,504等状态码,并且针对于proxy_pass当中realserver出现的错误码,nginx无法提供错误状态码页面,也就是不支持反向代理的错误状态码自定义,nginx只是转发而已,nginx针对nginx提供本地的web服务才能支持。
error_page  可放在http
,
server
,
location中

方法一:
error_page  404 =200   /404.html;    #格式中“=”要去紧跟着数字,不能用空格
location = /404.html {
root /var/nginx/html/error;    #/var/nginx/html/error/404.html
}

方法二:
error_page  403 =200  http://www.baidu.com   #直接重定向到其他的链接上去,并且以200的响应码来返回
截图:




二、Nginx的访问控制
Nginx的访问控制分为IP 和用户名密码控制
方式一:使用IP来实现访问控制
location / {
root html;
index index.html  index.htm;
allow  192.168.192.202;
deny all;             #允许192.168.192.202的访问,拒绝其他所有人的访问
}
方式二:使用用户名密码来实现控制
location / {
root html;
index index.html  index.htm;

auth_basic  "友情公告:您已进入需要授权页面,请输入您的用户信息";
auth_basic_user_file  /etc/nginx/htpasswd;  #认证的用户名密码文件
}

[root@#localhost html]# htpasswd -c  -m  /etc/nginx/htpasswd tom #将tom用户添加到文件中去
方式三:同时使用ip+用户名密码控制
将IP和用户名密码混在一起即可,表示要满足IP,并且又要认证通过方可访问。如果不满足IP则直接403,如果满足IP,但是用户密码错误也是403.


三、error_log和access_log发送日志到远程rsyslog主机
error_log配置:
Syntax:
error_log file | syslog:server=address[,parameter=value] [debug | info | notice| warn | error | crit | alert | emerg];
Default:
error_log logs/error.log error;
Content:
main, http, server, location
要禁用错误日志,不能使用“error_log off;”,而要使用类似如下选项: error_log /dev/null crit;

Nginx配置:
error_log  syslog:server=192.168.112.130,facility=local1 info; #将error中得info以及以上的信息发送到192.168.112.130,定义发送的设备为local1
192.168.112.130的Rsyslog配置:
# vi  /etc/rsyslog.conf  ##添加如下行到最前面
local1.*                /var/log/nginx.err.log      #将接受到得local1得日志保存在/var/log/nginx.err.log中
验证截图:




access_log配置:
Syntax:
access_log path [format [buffer=size [flush=time]] [if=condition]];
access_log path format gzip[=level] [buffer=size] [flush=time] [if=condition];
access_log syslog:server=address[,parameter=value] [format [if=condition]];
access_log off;

Default:access_log logs/access.log combined;
Content:http, server, location, if in location, limit_except

Nginx配置:

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
##日志格式的定义

access_log  "syslog:server=192.168.112.130,facility=local0" main;
##将日志保存在130的rsyslog服务器,设备为local0,格式为main
130的rsyslog配置:
# vi  /etc/rsyslog.conf    #在最前面添加如下配置
local0.*                /var/log/nginx.acc.log
验证截图:



四、开启Nginx的status监控状态输出
location /basic_status {     #指定哪个url
stub_status on;            #开启stub_status功能
allow  x.x.x.x;            #acl限制
deny  all;
}
效果图:



五、rewrite重写URL
Syntax:  rewrite regex replacement [flag];
Content: server, location, if
flag:
last   后面的rewrite直接跳过,重头开始匹配
break   跳出循环
continue  继续
redirect  重定向到302,url会跟着变化
permanent 重定向到301,url也跟着变化
实例一:将/bbs的访问请求,重定向到/forum去

1.         .....
location / {
root /var/www/html;
index  index.html;
location /bbs {
rewrite /bbs  /forum  permanent;  #将/bbs重写为/forum
}
}
.....

2. # mkdir /var/www/html/forum
# echo bbs > /var/www/html/forum/index.html
效果图:







实例二:根据不同的浏览器类型定向到响应浏览器的页面

六、禁止用户直接以IP方式访问web
方法一: 在server的上面再添加一个server

server {
listen 80 default_server;
server_name www.kfc.com;
rewrite ^(.*)$  http://$request_uri last;    #当用户以ip直接访问的时候会被重写为www.q.com的访问
}
server {
listen       80;
server_name  www.q.com;

#charset koi8-r;
........
.....


方法二:直接在请求报文的host字段上判断请求的是否为ip,ip就直接重写
location / {
if ( $host ~ "192.168.192.248" ) {
rewrite ^ http://www.q.com last;  ##发现host字段为本机ip地址的时候直接重写到www.q.com去
}
root   html;
index  index.php index.html index.htm;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息