Nginx學習中項目最全配置

轉載至: https://blog.csdn.net/Roaryi/article/details/79852396

 

上面nginx.conf的圖解配置詳解
worker_processes  8;
工作進程:數目。根據硬件調整,通常等於CPU數量或者2倍於CPU。
error_log  logs/error.log  info;
error_log  logs/error.log;  
error_log  logs/error.log  notice;  
error_log  logs/error.log  info;  
錯誤日誌:存放路徑。
pid        logs/nginx.pid;
pid(進程標識符):存放路徑。
worker_rlimit_nofile 51200;
指定進程可以打開的最大描述符:數目。
這個指令是指當一個nginx進程打開的最多文件描述符數目,理論值應該是最多打開文件數(ulimit -n)與nginx進程數相除,但是nginx分配請求並不是那麼均勻,所以最好與ulimit -n 的值保持一致。
現在在linux 2.6內核下開啓文件打開數爲51200,worker_rlimit_nofile就相應應該填寫51200。
這是因爲nginx調度時分配請求到進程並不是那麼的均衡,所以假如填寫10240,總併發量達到3-4萬時就有進程可能超過10240了,這時會返回502錯誤。
events {
    use epoll;
使用epoll的I/O 模型。linux建議epoll,FreeBSD建議採用kqueue,window下不指定。
補充說明:
與apache相類,nginx針對不同的操作系統,有不同的事件模型
A)標準事件模型
Select、poll屬於標準事件模型,如果當前系統不存在更有效的方法,nginx會選擇select或poll
B)高效事件模型
Kqueue:使用於FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X.使用雙處理器的MacOS X系統使用kqueue可能會造成內核崩潰。
Epoll:使用於Linux內核2.6版本及以後的系統。
/dev/poll:使用於Solaris 7 11/99+,HP/UX 11.22+ (eventport),IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+。
Eventport:使用於Solaris 10。 爲了防止出現內核崩潰的問題, 有必要安裝安全補丁。
    worker_connections  51200;
每個工作進程的最大連接數量。根據硬件調整,和前面工作進程配合起來用,儘量大,但是別把cpu跑到100%就行。每個進程允許的最多連接數,理論上每臺nginx服務器的最大連接數爲。worker_processes*worker_connections
}

##設定http服務器,利用它的反向代理功能提供負載均衡支持
http {
    include       mime.types;
設定mime類型,類型由mime.type文件定義    
    default_type  application/octet-stream;
設定日誌格式
    sendfile on;
sendfile指令指定 nginx 是否調用sendfile 函數(zero copy 方式)來輸出文件,對於普通應用,必須設爲on。如果用來進行下載等應用磁盤IO重負載應用,可設置爲off,以平衡磁盤與網絡IO處理速度,降低系統uptime。
    autoindex on;
來啓用目錄流量,下面會分情況進行說明。
另外Nginx的目錄流量有兩個比較有用的參數,可以根據自己的需求添加:
autoindex_exact_size off;
默認爲on,顯示出文件的確切大小,單位是bytes。
改爲off後,顯示出文件的大概大小,單位是kB或者MB或者GB
autoindex_localtime on;
默認爲off,顯示的文件時間爲GMT時間。
改爲on後,顯示的文件時間爲文件的服務器時間
    keepalive_timeout  120;
     keepalive超時時間。
    upstream a{
          server  127.0.0.1:9998;
         #server  192.168.55.9:9998;  yck
    }
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爲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 9999;
         配置訪問域名   
        server_name a;
         對以“mp3或exe”結尾的地址進行負載均衡
        location ~* \.(jpg|png|html|mp4|apk|ico|gif|jpeg|htm|js|css|pptx|ppt|pdf|docx)$ {
             設置被代理服務器的端口或套接字,以及URL。(~*不區分大小寫匹配,默認後面以這些結尾可以)
            proxy_pass         http://a;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
             以上三行,目的是將代理服務器收到的用戶的信息傳到真實服務器上
        }
    }
        server{
                listen 9998;
                location /{
                        root /home;
                }
        }
        server{
                listen 80;
                location ^~/html/{
                        proxy_pass         http://127.0.0.1:9999;
                        proxy_set_header   Host             $host;
                        proxy_set_header   X-Real-IP        $remote_addr;
                        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
                }
                location ^~/ChinastrokeNet/{
                        proxy_pass         http://127.0.0.1:8088;
                        proxy_set_header   Host             $host;
                        proxy_set_header   X-Real-IP        $remote_addr;
                        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
                }
                location ^~/cs/{
                        proxy_pass         http://127.0.0.1:8088;
                        proxy_set_header   Host             $host;
                        proxy_set_header   X-Real-IP        $remote_addr;
                        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
                }
        location ^~/WebConference/{
                        proxy_pass         http://127.0.0.1:8088;
                        proxy_set_header   Host             $host;
                        proxy_set_header   X-Real-IP        $remote_addr;
                        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
                }

        
        }
}
location 配置可以有兩種配置方法
1.前綴 + uri(字符串/正則表達式)
2.@ + name
前綴含義
    =  :精確匹配(必須全部相等)
    ~  :大小寫敏感
    ~* :忽略大小寫
    ^~ :只需匹配uri部分
    @  :內部服務跳轉
Location 基礎知識
1.location 是在 server 塊中配置。
2.可以根據不同的 URI 使用不同的配置(location 中配置),來處理不同的請求。
3.location 是有順序的,會被第一個匹配的location 處理。
Location 配置demo
1.=,精確匹配

        location = / {
            #規則
        }
        # 則匹配到 `http://www.example.com/` 這種請求。 
2.~,大小寫敏感

        location ~ /Example/ {
                #規則
        }
        #請求示例
        #http://www.example.com/Example/  [成功]
        #http://www.example.com/example/  [失敗]
3.~*,大小寫忽略

    location ~* /Example/ {
                #規則
    }
    # 則會忽略 uri 部分的大小寫
    #http://www.example.com/Example/  [成功]
    #http://www.example.com/example/  [成功]
4.^~,只匹配以 uri 開頭

    location ^~ /img/ {
            #規則
    }
    #以 /img/ 開頭的請求,都會匹配上
    #http://www.example.com/img/a.jpg   [成功]
    #http://www.example.com/img/b.mp4 [成功]
5.@,nginx內部跳轉

    location /img/ {
        error_page 404 @img_err;
    }
    
    location @img_err {
        # 規則
    }
    #以 /img/ 開頭的請求,如果鏈接的狀態爲 404。則會匹配到 @img_err 這條規則上。
 

 

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