一、自定义错误状态码页面

    支持404,403,500,502,503,504等状态码,并且针对于proxy_pass当中realserver出现的错误码,nginx无法提供错误状态码页面,也就是不支持反向代理的错误状态码自定义,nginx只是转发而已,nginx针对nginx提供本地的web服务才能支持。

    error_page  可放在httpserverlocation中

方法一:
 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的响应码来返回

截图:

wKioL1UaeVagPhfpAAzX5xwITY8737.jpg



二、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中

验证截图:

wKiom1UamnSBHoaAAA43NdAua0s935.jpg


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

验证截图:

wKiom1Uamy2T___lAApmAnl8woA038.jpg



四、开启Nginx的status监控状态输出

location /basic_status {     #指定哪个url
    stub_status on;            #开启stub_status功能
    allow  x.x.x.x;            #acl限制
    deny  all;
}

 效果图:

wKioL1UatNHCRfSAAAEoKv_1erw851.jpg

五、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

效果图:

wKiom1UcroPxyWa4AADwxblwYEw967.jpg

wKioL1Ucr_2A617eAAC68uqTPyo987.jpg



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


六、禁止用户直接以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;
      }