nginx常用模块

1295人浏览 / 0人评论

1、后台安全管理
     deny   拒绝
     allow    允许

        location = /admin.php {
        allow 10.0.0.11;
        allow 186.10.12.0/24;
        deny all;
}

2、设置账号和密码
     1)安装加密命令
        yum install httpd-tools
      2)生成加密文件
       htpasswd       -b -c        /etc/nginx/auth_conf liangzeyu 123456
          加密命令   固定参数            加密文件                  账号          密码
     3)开始配置
      location = /admin.php {
        auth_basic "欢迎访问贷款网站后台,请输入账号和密码!!";
        auth_basic_user_file /etc/nginx/auth_conf;
}

3、优雅报错
   如果用户访问页面的状态码是 500 502等,则返回给用户/usr/share/nginx/html路径里面的50x.html代码文件。
     error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

4、匹配规则
      =           精准匹配
              = /admin.php    如果用户访问的是admin.php,就执行下面的规则。如果访问的是Admin.php或者admin.php1。

     ^~        以什么开头
              ^~  /admin.php    如果用户访问的是admin.php或者admin.php123、admin.php1ak则匹配。如果用户访问的是1admin.php则不匹配。

     ~      区分大小写
             ~ /admin.php    如果用户访问的是/admin.php则匹配,如果用户访问的是Admin.php则不匹配。
           
     *~    不区分大小写
            *~ /admin.php    如果用户访问的是/admin.php或者/AdMiN.PhP是匹配的。


5、网站访问情况
        location = /nginx_status {
    stub_status;
                allow 127.0.0.1;
               deny all;
}
--------------
Active connections: 6 
server accepts handled requests
            6                 6          53 
Reading: 0 Writing: 1 Waiting: 5 

------------------
Active connections 当前活动客户的连接数
accepts                  已接受总的TCP连接数
handled                已处理总的TCP连接数
requests                客户端总的http请求数
Reading               当前nginx读取的请求头的连接数
Writing               当前nginx将响应写回客户端的连接数
Waiting             当前等待请求的空闲客户端的连接数
--------------------------------------

 

6、nginx限流

漏桶    一直排队

令牌桶算法   按照令牌确认是否拒绝或者排队或者处理

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

第一个参数:$binary_remote_addr 表示通过remote_addr这个标识来做限制,“binary_”的目的是缩写内存占用量,是限制同一客户端ip地址。

第二个参数:zone=one:10m表示生成一个大小为10M,名字为one的内存区域,用来存储访问的频次信息。

第三个参数:rate=1r/s表示允许相同标识的客户端的访问频次,这里限制的是每秒1次,还可以有比如30r/m的。

limit_req zone=one burst=5 nodelay;

第一个参数:zone=one 设置使用哪个配置区域来做限制,与上面limit_req_zone 里的name对应。

第二个参数:burst=5,重点说明一下这个配置,burst爆发的意思,这个配置的意思是设置一个大小为5的缓冲区当有大量请求(爆发)过来时,超过了访问频次限制的请求可以先放到这个缓冲区内。

第三个参数:nodelay,如果设置,超过访问频次而且缓冲区也满了的时候就会直接返回503,如果没有设置,则所有请求会等待排队。

例子:

http { limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

server {

      location /search/ {

       limit_req zone=one burst=5 nodelay;

}

}  

下面配置可以限制特定UA(比如搜索引擎)的访问:

limit_req_zone  $anti_spider  zone=one:10m   rate=10r/s;
limit_req zone=one burst=100 nodelay;
if ($http_user_agent ~* "googlebot|bingbot|Feedfetcher-Google") {
    set $anti_spider $http_user_agent;
}
 

 7、代理

# 用户请求的时候HOST的值是www.bgx.com, 那么代理服务会像后端传递请求的还是www.bgx.com
proxy_set_header Host $http_host;
# 将$remote_addr的值放进变量X-Real-IP中,$remote_addr的值为客户端的ip
proxy_set_header X-Real-IP $remote_addr;
# 客户端通过代理服务访问后端服务, 后端服务通过该变量会记录真实客户端地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
4.代理到后端的TCP连接、响应、返回等超时时间, 如图
//nginx代理与后端服务器连接超时时间(代理连接超时)
Syntax: proxy_connect_timeout time;
Default: proxy_connect_timeout 60s;
Context: http, server, location
//nginx代理等待后端服务器的响应时间
Syntax: proxy_read_timeout time;
Default: proxy_read_timeout 60s;
Context: http, server, location
//后端服务器数据回传给nginx代理超时时间
Syntax: proxy_send_timeout time;
Default: proxy_send_timeout 60s;
Context: http, server, location
5.proxy_buffer代理缓冲区, 如图
//nignx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端,边收边传, 不是全部接收完
再传给客户端
Syntax: proxy_buffering on | off;
Default: proxy_buffering on;
Context: http, server, location
//设置nginx代理保存用户头信息的缓冲区大小
Syntax: proxy_buffer_size size;
Default: proxy_buffer_size 4k|8k;
Context: http, server, location
//proxy_buffers 缓冲区
Syntax: proxy_buffers number size;
Default: proxy_buffers 8 4k|8k;
Context: http, server, location
[root@Nginx ~]# vim /etc/nginx/proxy_params
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
7.代理配置location时调用, 方便后续多个Location重复使用
location / {
proxy_pass http://127.0.0.1:8080;
include proxy_params;
}

 

 8、https

https参数

ssl on;
ssl_certificate ssl_key/server.crt;
ssl_certificate_key ssl_key/server.key;

http强制跳转至https

server {
listen 80;
server_name baidu.com;
return 302 https://$server_name$request_uri;
#rewrite ^(.*) https://$server_name$1 redirect;
}

 企业级配置

ssl on;
ssl_session_timeout 10m;
ssl_certificate ssl_key/1524377920931.pem;
ssl_certificate_key ssl_key/1524377920931.key;
ssl_ciphers ECDHE-RSA-AES128-GCM-
SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
1. 443端口为ssl监听端口。
2. ssl on表示打开ssl支持。
3. ssl_certificate指定crt文件所在路径,如果写相对路径,必须把该文件和nginx.conf文件放
到一个目录下。
4. ssl_certificate_key指定key文件所在路径。
5. ssl_protocols指定SSL协议。
6. ssl_ciphers配置ssl加密算法,多个算法用:分隔,ALL表示全部算法,!表示不启用该算法,
+表示将该算法排到最后面去。
7. ssl_prefer_server_ciphers 如果不指定默认为off,当为on时,在使用SSLv3和TLS协议时,服
务器加密算法将优于客户端加密算法。

 

全部评论