在我目前的工做內容中,接觸到Nginx的用處無外乎兩點:前端
1. 反向代理,解決前端跨域的問題nginx
工做內容有門戶的概念,就是將各個子系統集成到門戶裏,在門戶裏面訪問,這樣就很容易形成跨域的問題算法
那麼解決的辦法就是給子系統配置Nginx,經過代理來訪問,使門戶和子系統在同一IP下。後端
具體的配置以下:(實際上就是給真實地址配置個代理IP,proxy_pass?)跨域
主要看server節點內容緩存
下面這個配置作到,訪問192.168.40.240:80時,會返回http://192.168.110.102:8000的資源。 能夠配置多個server...即多個子系統服務器
1 server { 2 listen 80; # 監聽端口爲80 3 server_name localhost; # 服務器名 4 location / { 5 add_header Access-Control-Allow-Origin *; 6 proxy_set_header Host 192.168.40.240; # 代理服務器IP 7 proxy_set_header X-Real-IP $remote_addr; 8 proxy_pass http://192.168.110.102:8000; # 代理目標地址 9 proxy_intercept_errors on; #攔截異常 10 client_max_body_size 1000m;#文件上傳大小 11 12 }
2. 負載均衡,這應該是最多見的軟負載了吧。session
1 upstream mh_server { # 集羣名稱 2 ip_hash; #解決session問題(建議子系統使用) 3 server 192.168.110.102:8000 weight=10; # 服務器1的訪問地址, weight:分配權重。 4 server 192.168.40.158:7004 weight=10; # 服務器2的訪問地址, weight:分配權重。 5 } 6 7 server { 8 listen 80; 9 server_name mh_server; # 集羣名稱 10 location / { 11 add_header Access-Control-Allow-Origin *; 12 proxy_set_header Host 192.168.40.158; # 集羣服務器IP 13 proxy_set_header X-Real-IP $remote_addr; 14 proxy_pass http://mh_server; # 集羣名稱 15 proxy_intercept_errors on; #攔截異常 16 17 }
這裏須要注意的是ip_hash是負載均衡的一種資源分配策略,默認是輪訓,這種ip_hash是跟前客戶端ip進行哈希計算,致使請求會固定請求到一太固定的服務器上。 負載均衡
這樣就解決了分佈式部署的狀況下session不共享的問題。分佈式
下面額外介紹一下Nginx支持的負載均衡調度算法方式:
weight輪詢(默認):接收到的請求按照順序逐一分配到不一樣的後端服務器,即便在使用過程當中,某一臺後端服務器宕機,nginx會自動將該服務器剔除出隊列,請求受理狀況不會受到任何影響。 這種方式下,能夠給不一樣的後端服務器設置一個權重值(weight),用於調整不一樣的服務器上請求的分配率;權重數據越大,被分配到請求的概率越大;該權重值,主要是針對實際工做環境中不一樣的後端服務器硬件配置進行調整的。
ip_hash:每一個請求按照發起客戶端的ip的hash結果進行匹配,這樣的算法下一個固定ip地址的客戶端總會訪問到同一個後端服務器,這也在必定程度上解決了集羣部署環境下session共享的問題。
fair:智能調整調度算法,動態的根據後端服務器的請求處理到響應的時間進行均衡分配,響應時間短處理效率高的服務器分配到請求的機率高,響應時間長處理效率低的服務器分配到的請求少;結合了前二者的優勢的一種調度算法。可是須要注意的是nginx默認不支持fair算法,若是要使用這種調度算法,請安裝upstream_fair模塊
url_hash:按照訪問的url的hash結果分配請求,每一個請求的url會指向後端固定的某個服務器,能夠在nginx做爲靜態服務器的狀況下提升緩存效率。一樣要注意nginx默認不支持這種調度算法,要使用的話須要安裝nginx的hash軟件包