• nginx配置参数详解


    参考资料:real_ip和X-Forwarded-for详解

    user  nginx nginx;
    worker_processes  auto;
    
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    
    pid        logs/nginx.pid;
    worker_rlimit_nofile 102400;
    # worker进程最大打开文件句柄数
    
    events {
        use  epoll;
        multi_accept  on;
        worker_connections  1024;
    }
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
        charset UTF-8;
        log_format  main  '$http_x_forwarded_for - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$remote_addr" "$upstream_addr" "$request_time" "$request_body"';
        sendfile        on;
       # 传统文件传输方式:硬盘—>内核缓冲区—>用户缓冲区—>内核socket缓冲区—>协议引擎
       # sendfile则少了内核到用户和用户到内核两次拷贝,大大提升了传输性能。
        tcp_nopush  on;
        keepalive_timeout  65;
        send_timeout  20;
        # 两个连续的写操作超时时间
        server_tokens  off;
        # 禁止错误页面显示nginx版本信息
     
        open_file_cache max=102400 inactive=20s;
        # 设置缓存中元素的最大数量,超过则删除最近最少使用的
        # inactive期间未被访问则删除
        open_file_cache_min_uses 2;
        # inactive期间最小访问次数,未到这个数则删除
        open_file_cache_valid    60s;
        # 每60s检查一次
        open_file_cache_errors   on;
        # fix CVE-2017-7529 bug
        max_ranges 1;
        # 禁用multipart range分片功能,漏洞修复措施
        
        gzip on;
        # 启用GZIP压缩响应
        gzip_proxied  any;
        # 为所有代理请求启动GZIP
        gzip_comp_level  4;
        # 压缩比,1压缩比最小速度最快,9压缩比最大速度最慢
        gzip_types  text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
        gzip_min_length  1k;
        # 设置允许压缩的响应最小字节数,从header头中的Content-Length中进行获取。
        gzip_buffers  4 16k; 
        # 设置缓冲内存大小,以16k为单位原数据大小的4倍
        gzip_http_version  1.1;
        # 设置压缩响应所需的请求的最小HTTP版本
        gzip_vary  on;
        # 添加“Vary: Accept-Encoding”响应头
    
        client_max_body_size 300m;
        # 设置clent请求体的大小,在请求头Content-Length中规定,超过返回413
        client_body_buffer_size 128k;
        # 设置读取客户端请求体的缓冲区大小,如果body大于这个数,则写入临时文件
    
        proxy_headers_hash_bucket_size 1024;
        # 设置头部哈希表大小
        proxy_headers_hash_max_size 512;
        #  #设置头部哈希表的最大值,不能小于你后端服务器设置的头部总数。
        proxy_connect_timeout 600;
        # 与后端服务器建立连接的超时时间,应该不超过75秒
        proxy_read_timeout 600;
        # 从后端服务器读取响应超时时间
        proxy_send_timeout 600;
        # 发送请求到后端服务器超时时间
        proxy_next_upstream error http_404;
        # 当返回响应出现error 404时,可以将请求分发下一个服务器继续处理,提高平台访问成功率
        proxy_buffers 4 32k;
        # 设置缓冲区的大小和数量,从后端服务器取得的响应会放置这里
        # 如果响应过大,超过缓冲区的会缓冲到磁盘(目录由proxy_temp_path设定)
        proxy_buffer_size 16k;
        # 用于读取从后端服务器接收响应的第一部分的缓冲区,通常包含一个小的响应头
        proxy_busy_buffers_size 64k;
        # nginx在后端响应尚未完全读取时,这块缓冲区开始向客户端发送响应,其余继续读响应
        # 一般为为proxy_buffers中单个缓冲区大小的2倍
        proxy_temp_file_write_size 128k;
        # 当响应写入临时文件时,一次访问写入临时文件的数据大小
        proxy_set_header X-Forwarded-For $remote_addr;
        # 重新定义发往后端的请求头,$remote_addr 客户端ip地址
    
        limit_conn_zone  $binary_remote_addr zone=addr:10m;
        #限制单个IP的并发连接数,防止ddos攻击,$binary_remote_addr二进制IP地址,addr设置IP池名称,1m可以储存32000个并发会话
    
        upstream testapp_pool {
        # 定义一组后端服务器,默认使用加权轮询法分配请求;如果请求过程发生错误,就会被分配下一个服务器
            ip_hash;
            # 实现session保持
            server 172.30.20.11:8080;
            server 172.30.20.21:8080;
            server 172.30.20.12:8080;
            server 172.30.20.22:8080;
        }
    
    server {
            listen  80;
            real_ip_header  X-Forwarded-For;
            # 定义真实客户端IP所在的请求头
            set_real_ip_from  172.30.100.111;
            # 定义可信IP,XFF中不可信即为客户端真实IP
            real_ip_recursive  on
            # 当配置为off时,Nginx会把real_ip_header指定的请求头中的最后一个IP作为真实客户端IP;
            # 当配置为on时,Nginx会递归解析real_ip_header指定的请求头,最后一个不匹配set_real_ip_from的IP作为真实客户端IP。
            server_name www.webnode1.com 172.30.11.12;
            add_header  X-Frame-Options SAMEORIGIN;
            # 防止该网站页面被其他网站嵌套,SAMEORIGIN:表示该页面可以在相同域名页面的 frame 中展示
            access_log /app/nginx/logs/www.webnode1.com_access_80.log  main;
            error_log  /app/nginx/logs/www.webnode1.com_error_80.log;
            root    /app/nginx/html/default;
            # 请求的根目录
            error_page 500 502 503 504 404 400 403   http://www.webnode1.com/50x.html;
            # 将以上响应类型重定向到URL
            location ~* .*.(tar|gz|zip|rar|msi|iso|gho|mp3|rmvb|mp4|wma|wmv|rm|war|bak)?$ {
                    deny all;
            }
            location = / {
                    access_log /app/nginx/logs/www.webnode1.com_access_80.log  main;
                    error_log  /app/nginx/logs/www.webnode1.com_error_80.log;
                    rewrite ^/$ http://www.webnode2.com permanent;
                    # 重定向到webnode2,permanent返回永久的301重定向
            }
            location ^~ /testapp {
            # 根据URL配置参数,~*不区分大小写
                access_log  /app/nginx/logs/access_testapp_80.log  main;
                error_log  /app/nginx/logs/error_testapp_80.log;
                proxy_set_header  X-Forwarded-Host $host;
                proxy_set_header  X-Forwarded-Server $host;
                proxy_set_header  Host $host;
                # Host的含义是表明请求的主机名,重写请求头中Host值
                proxy_set_header  X-Forwarded-For $http_x_forwarded_for;
                # $http_x_forwarded_for变量是请求中的X-Forwarded-For信息,
                proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
                # 把真实客户端IP和反向代理IP通过逗号分隔,添加到请求头中,如果请求头不存在XFF,则$proxy_add_x_forwarded_for就等于$remote_addr
                proxy_pass  http://testapp_pool;
                # 设置后端服务器的协议、地址和映射目录,这里采用的为服务器组方式指定
                limit_rate  1m;
                # 限制下载速度1m/s
                limit_conn  addr  2000;
                # 限制每个IP并发2000连接
            }
        }
    
        server {
            listen       443 ssl;
            server_name  test.com;
            ssl_certificate certs/epcc_server_2017.cer;
            ssl_certificate_key certs/epcc_server.key;
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_session_cache    shared:SSL:1m;
            # 设置会话重用的方式。shared:所有worker进程共享缓冲;SSL:缓冲name;1m:大小,1m大约存储4000个会话
            # 这是通过Session ID重用,客户端和服务器端都保存了会话key,通过每个连接的唯一标识,可以实现重用会话
            ssl_session_timeout  5m;
            # 设置缓存超时时间为5分钟
    
            ssl_ciphers  HIGH:!aNULL:!MD5;
            # ssl加密格式
            ssl_prefer_server_ciphers  on;
            # 指定在使用SSLv3和TLS协议时,服务器密码应优先于客户端密码
            location / {
            return 404;
                #root   html;
                #index  index.html index.htm;
            }
        }
    }
    

      

  • 相关阅读:
    Repeater控件用法
    python的文件锁使用
    python的文件锁使用
    python的文件锁使用
    linux下文件描述符的介绍
    linux下文件描述符的介绍
    linux下文件描述符的介绍
    Linux 2.6 中的文件锁
    Linux 2.6 中的文件锁
    Linux 2.6 中的文件锁
  • 原文地址:https://www.cnblogs.com/houyongchong/p/configureArgs.html
Copyright © 2020-2023  润新知