Nginx 初認識

最近研究了一下Nginx的詳細配置,Nginx作爲各大互聯網網站必備的負載神器,和硬件負載相比成本更加低廉,同時可以提高系統性能、增強系統的健壯性、提高系統有效服務時長、降低系統出錯的可能性,所以備受青睞。
Nginx的配置包括了user,worker_process,worker_rlimit_nofile,event,http等關鍵配置節點,總結導圖如下:這裏寫圖片描述

詳細的各個節點配置信息如下:

user  nginx;  用戶和用戶組
worker_processes  4;  #工作進程,根據硬件調整,大於等於cpu核數
worker_cpu_affinity 0001 0010 0100 1000;  cpu內核(二進制,不同的站位對應不同的內核)
worker_rlimit_nofile 65536;  指定進程可以打開的最大描述符:數目。

events {
        use epoll;   #使用epoll的I/O 模型  多路複用
        worker_connections  30000;  #工作進程的最大連接數量,根據硬件調整,和前面工作進程配合起來用,儘量大,但是別把cpu跑到100%就行  ;每個進程允許的最多連接數, 理論上每臺nginx服務器的最大連接數爲worker_processes*worker_connections
}

http {
                include       mime.types;   #設定mime類型,類型由mime.type文件定義
                default_type  application/octet-stream;       

                log_format  mainWeb  '$remote_addr - $remote_user [$time_local] "$request" '
                                  '$status $body_bytes_sent "$http_referer" '
                                  '"$http_user_agent" "$proxy_add_x_forwarded_for" $request_time';
                                        $remote_addr$http_x_forwarded_for用以記錄客戶端的ip地址;

                                        $remote_user:用來記錄客戶端用戶名稱;

                                        $time_local: 用來記錄訪問時間與時區;

                                        $request: 用來記錄請求的url與http協議;

                                        $status: 用來記錄請求狀態;成功是200$body_bytes_s ent :記錄發送給客戶端文件主體內容大小;

                                        $http_referer:用來記錄從那個頁面鏈接訪問過來的;

                                        $http_user_agent:記錄客戶毒啊瀏覽器的相關信息;
                                        $x_forwarded_for信息,用以記錄原有客戶端的IP地址和原來客戶端的請求的服務器地址;

                access_log  logs/access.log  mainWeb;  #需要用access_log指令指定日誌文件的存放路徑;


                proxy_set_header Host $Host;
                proxy_set_header X-Real_Ip $remote_addr;         $remote_addr客戶端ip
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

                real_ip_header    X-Forwarded-For;                


                sendfile        on;
                                        #sendfile指令指定 nginx 是否調用sendfile 函數(zero copy 方式)來輸出文件,
                                        對於普通應用,必須設爲on。
                                        如果用來進行下載等應用磁盤IO重負載應用,可設置爲off,以平衡磁盤與網絡IO處理速度,降低系統uptime。

                keepalive_timeout  65;  #keepalive超時時間。

        #gzip 相關是對網絡發包數據壓縮的配置,文件壓縮、提高效率
                gzip  on;
                gzip_min_length 500;
                gzip_proxied    expired no-cache no-store private auth;
                gzip_types      text/javascript text/css text/plain text/x-json application/xml application/x-javascript;
                #server_tag IIS/7.0;

                limit_conn_zone $binary_remote_addr zone=addr:10m;
                limit_conn_log_level info;

                client_max_body_size 5m;  //設定通過nginx上傳文件的大小

                upstream tomcats {       
                                server 127.0.0.1:8080;
                } 

                                        nginx的upstream目前支持4種方式的分配

                        1、輪詢(默認)

                        每個請求按時間順序逐一分配到不同的後端服務器,如果後端服務器down掉,能自動剔除。

                        2、weight
                        指定輪詢機率,weight和訪問比率成正比,用於後端服務器性能不均的情況。
                        例如:
                        upstream bakend {
                        server 192.168.0.14 weight=10;
                        server 192.168.0.15 weight=10;
                        }

                        2、ip_hash
                        每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端服務器,可以解決session的問題。
                        例如:
                        upstream bakend {
                        ip_hash;
                        server 192.168.0.14:88;
                        server 192.168.0.15:80;
                        }

                        3、fair(第三方)
                        按後端服務器的響應時間來分配請求,響應時間短的優先分配。
                        upstream backend {
                        server server1;
                        server server2;
                        fair;
                        }

                        4、url_hash(第三方)

                        按訪問url的hash結果來分配請求,使每個url定向到同一個後端服務器,後端服務器爲緩存時比較有效。

                        例:在upstream中加入hash語句,server語句中不能寫入weight等其他的參數,hash_method是使用的hash算法

                        upstream backend {
                        server squid1:3128;
                        server squid2:3128;
                        hash $request_uri;
                        hash_method crc32;
                        }

                        tips:

                        upstream bakend{#定義負載均衡設備的Ip及設備狀態
                        ip_hash;
                        server 127.0.0.1:9090 down;
                        server 127.0.0.1:8080 weight=2;
                        server 127.0.0.1:6060;
                        server 127.0.0.1:7070 backup;
                        }
                        在需要使用負載均衡的server中增加
                        proxy_pass http://bakend/;

                        每個設備的狀態設置爲:
                        1.down表示單前的server暫時不參與負載
                        2.weight默認爲1.weight越大,負載的權重就越大。
                        3.max_fails:允許請求失敗的次數默認爲1.當超過最大次數時,返回proxy_next_upstream模塊定義的錯誤
                        4.fail_timeout:max_fails次失敗後,暫停的時間。
                        5.backup: 其它所有的非backup機器down或者忙的時候,請求backup機器。所以這臺機器壓力會最輕。

                        nginx支持同時設置多組的負載均衡,用來給不用的server來使用。

                        client_body_in_file_only設置爲On 可以講client post過來的數據記錄到文件中用來做debug
                        client_body_temp_path設置記錄文件的目錄 可以設置最多3層目錄

                        location對URL進行匹配.可以進行重定向或者進行新的代理 負載均衡

                server {

                        listen       80; #配置監聽端口
                        server_name  _;         #配置訪問域名 

                        if ( $request_method !~ GET|POST|HEAD ) {
                         return 403;
                        }

                        location /NginxStatus {
                                allow 10.0.0.0/8; 
                                allow 172.0.0.0/8; 
                                deny all;
                                stub_status on;
                                access_log off;
                        }

                        location / {
                                proxy_read_timeout 65;
                                proxy_pass http://tomcats ;     //在需要使用負載均衡的server中增加  proxy_pass http://bakend/;

                            if ($uri !~ ^/luckymapiproxy){   //$uri等同於當前request中的URI,可不同於初始值,例如內部重定向時或使用index
                                       rewrite ^/(.*)$ /luckymapiproxy/$1;
                                }

                                #rewrite ^/$ /ucsimage/;
                                #rewrite ^/healthCheck.jsp$ /luckycenteros/healthCheck.jsp;
                        }
                }
}

以上便是瞭解到的nginx的配置信息,結合項目中的實踐情況,瞭解每一個參數的含義和制約條件,才能夠更好地理解和梳理。

[參考文章] https://blog.csdn.net/tjcyjd/article/details/50695922

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章