nginx反向代理配置nginx.conf


#user  nobody;

#啟動進程,通常設置成和cpu的數量相等
worker_processes  4;

#全局錯誤日志及PID文件
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#默認pid的保存位置如下,可更改
#pid        logs/nginx.pid;

#工作模式及連接數上限
events {
    #epoll是多路復用IO(I/O Multiplexing)中的一種方式,
    #僅用於linux2.6以上內核,可以大大提高nginx的性能
    #use   epoll;

    #單個worker process進程的最大並發鏈接數
    worker_connections  1024;

    # 並發總數是 worker_processes 和 worker_connections 的乘積
    # 即 max_clients = worker_processes * worker_connections
    # 在設置了反向代理的情況下,max_clients = worker_processes * worker_connections / 4  為什么
    # 為什么上面反向代理要除以4,應該說是一個經驗值
    # 根據以上條件,正常情況下的Nginx Server可以應付的最大連接數為:4 * 8000 = 32000
    # worker_connections 值的設置跟物理內存大小有關
    # 因為並發受IO約束,max_clients的值須小於系統可以打開的最大文件數
    # 而系統可以打開的最大文件數和內存大小成正比,一般1GB內存的機器上可以打開的文件數大約是10萬左右
    # 我們來看看360M內存的VPS可以打開的文件句柄數是多少:
    # $ cat /proc/sys/fs/file-max
    # 輸出 34336
    # 32000 < 34336,即並發連接總數小於系統可以打開的文件句柄總數,這樣就在操作系統可以承受的范圍之內
    # 所以,worker_connections 的值需根據 worker_processes 進程數目和系統可以打開的最大文件總數進行適當地進行設置
    # 使得並發總數小於操作系統可以打開的最大文件數目
    # 其實質也就是根據主機的物理CPU和內存進行配置
    # 當然,理論上的並發總數可能會和實際有所偏差,因為主機還有其他的工作進程需要消耗系統資源。
    # ulimit -SHn 65535
}

http {
    #設定mime類型,類型由mime.type文件定義
    include       mime.types;
    #默認的傳輸文件方式
    default_type  application/octet-stream;

    #設定名稱為main的日志格式取代默認的combined格式,$time_iso8601(標准格式2017-01-19T09:10:52+08:00)。
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';
    #access日志位置和格式, 需要增加http_x_forwarded_for的顯示,日志需要定時移除或改名,不支持按天分文件
    access_log  logs/access.log  main;
    #緩沖,避免每次都關閉打開日志文件
    open_log_file_cache max=1000 inactive=60s valid=60s min_uses=2;

    #sendfile 指令指定 nginx 是否調用 sendfile 函數(zero copy 方式)來輸出文件,
    #對於普通應用,必須設為 on,
    #如果用來進行下載等應用磁盤IO重負載應用,可設置為 off,
    #以平衡磁盤與網絡I/O處理速度,降低系統的uptime.
    sendfile        on;
    #激活tcp_nopush參數可以允許把httpresponse header和文件的開始放在一個文件里發布,積極的作用是減少網絡報文段的數量
    tcp_nopush     on;

    #長連接超時時間,默認是75s
    keepalive_timeout  60s;
    #激活tcp_nodelay,內核會等待將更多的字節組成一個數據包,從而提高I/O性能
    tcp_nodelay on;

    #開啟gzip壓縮
    gzip  on;
    #IE6及以下版本性能太差,不壓縮
    gzip_disable "MSIE [1-6].";
    gzip_min_length 1000;
    gzip_buffers   4 16k;
    gzip_types    text/plain application/x-javascript text/css;

    #設定請求緩沖
    client_header_buffer_size    128k;
    large_client_header_buffers  4 128k;

    #禁止嵌套訪問
    add_header X-Frame-Options SAMEORIGIN;
    #設置httponly
    add_header Set-Cookie "HttpOnly=true; max-age=1800";

    #限制每個IP只能訪問60次/分鍾,以及白名單,同時需在location中開啟代碼
    limit_req_zone $binary_remote_addr zone=allips:10m rate=60r/m;
    geo $limited{
        default 1;
        #My IPs
        127.0.0.1/32 0;
        192.168.0.0/32 0;
    }
    
    upstream mywebapp {
        #ip_hash負載,如果沒加這條指令,nginx會使用默認的round robin負載均衡(指定weight比重)
        #ip_hash;
        #max_fails表示超時重試的最大次數,當在fail_timeout時間段內重試次數達到上限則標記服務器不可用,將在fail_timeout后取消標記並重新嘗試計數。此處超時計算依賴請求的超時時間,即nginx到后端server的請求超時時間設置見server的location /部分
        server 127.0.0.1:8888 weight=1 max_fails=1 fail_timeout=30s;
        #server 127.0.0.1:7001 weight=1 max_fails=1 fail_timeout=30s;
    }

    #設定虛擬主機配置,第一個主機為默認主機
    #設置默認server防御host頭攻擊
    server {
        listen       8100  default_server;
        server_name _;
        location / {
            return 403;
        }
    }
    server {
        #訪問端口
        listen       8100;
        server_name  192.168.11.150;    #此處必須是用戶瀏覽器內輸入的IP或域名
        #定義服務器的默認網站根目錄位置,可相對/絕對地址,指定了靜態文件的存放位置,千萬不要寫成\
        #root  D:/bea12/user_projects/domains/base_domain/autodeploy/DefaultWebApp;
        root  D:/java/tomcat-9.0.10/webapps/root;

        #charset koi8-r;
        
        #禁止Scrapy等工具的抓取,HttpClient仍可用
        if ($http_user_agent ~* (Scrapy|Curl)) {
            return 403;
        }
        #禁止指定UA及UA為空的訪問,會導致一些使用接口沒法訪問了,因此需要仔細分別
        #if ($http_user_agent ~* "WinHttp|WebZIP|FetchURL|node-superagent|java/|FeedDemon|Jullo|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|Java|Feedly|Apache-HttpAsyncClient|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|HttpClient|MJ12bot|heritrix|EasouSpider|Ezooms|BOT/0.1|YandexBot|FlightDeckReports|Linguee Bot|^$" ) {
        #     return 403;
        #}
        #屏蔽GET|POST|OPTIONS之外的請求方式:delete put trace,貌似trace默認就是返回405
        if ($request_method !~* GET|POST|OPTIONS) {
            return 403;
        }
        
        #location匹配規則:=最先,^~次之,然后按配置出現順序(建議按請求頻率確定順序),最后是/根通配
        #默認請求策略
        location / {
            #使用限制器,每秒最多30個請求
            limit_req zone=allips burst=30 nodelay;
            proxy_pass http://mywebapp;
            #proxy_redirect  off;   
            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_set_header   Cookie $http_cookie;
            #nginx與server的連接超時時間(與server線程是否阻塞無關,不是等待后端返回頁面的時間),默認值是60s,不能超過75s
            proxy_connect_timeout       3;
            #nginx發送請求給server的超時時間。超時設置不是為了整個發送期間,而是在兩次write操作期間,默認值是60s
            #proxy_send_timeout       60s
            #nginx會等待多長時間來獲得server的響應,這個時間不是獲得整個response的時間,而是兩次reading操作的時間
            #(與server線程是否阻塞有關,應根據server是否有大時長運算調整,同時也要增加keepalive_timeout的時間),默認值是60s
            #proxy_read_timeout       60s;

            #設置off避免編碼轉換出現不對的情況
            chunked_transfer_encoding       off;
            #讓cookies寫在根目錄下,這樣才不會丟失,如果出現cookies丟失的話
            #proxy_cookie_path /examples/ /;
        }

        #給icon圖標響應空白圖片,避免讀硬盤並記錄日志
        location ~ /(favicon.ico|apple-touch-icon.png|apple-touch-icon-precomposed.png)$ {
            empty_gif;
            access_log off;
        }

        #靜態文件緩存,必須設置正確的root,不記錄access日志,另外如果靜態文件是在其他服務器,應使用反向代理並緩存(見后:location ~ \.php$)
        #如果使用了模板引擎等,不要把html\htm設置為靜態緩存,否則可以
        location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|json|css|swf|zip|rar|7z|exe|doc|docx|xls|xlsx|ppt|pptx|cab|eot|otf|fon|font|ttf|ttc|woff|woff2)$ {
            expires    7d;
            access_log off;
        }

        #關閉robots.txt不存在時記錄日志
        location = /robots.txt {
            allow all;
            log_not_found off;
            access_log off;
        }
        
        # 不允許訪問隱藏文件例如 .htaccess, .htpasswd, .DS_Store (Mac).
        location ~ /\. {
            deny all;
            access_log off;
            log_not_found off;
        }
        
        #404頁面
        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #錯誤頁面
        error_page   500 502 503 504  /50x.html;
        #指定50x頁面的響應
        location = /50x.html {
            root   html;
        }

        #指定特定的請求使用反向代理到指定的服務,比如使用驗證碼
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        #指定特定的請求使用特定服務
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        #指定特定的請求拒絕服務,比如禁止訪問/web-info/
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM