一、自定义错误状态码页面
支持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; }