Nginx 再出發
本篇目錄
1. 寫在前面的話;
2. 負載均衡;
3. 靜態資源訪問;
4. 傳遞用戶IP;
1. 寫在前面的話
在上一期的 Nginx入門-個人總結 中,我們說明了 Nginx 的基本配置是怎樣的,比如我們可以為生產環境的專案設定一個代理的 IP:PORT 訪問形式,這樣的話,安全性會高很多;
2. 負載均衡
2.1 需求闡述
這一點是由新的需求而產生的,比如說,我們把專案部署了兩份,這樣可以讓用戶享受到更快、更好的訪問體驗;
但我們總不能給用戶兩個訪問地址吧,所以此時就會很凸顯代理的重要性,我們可以把所有的訪問都發到 Nginx 這邊;
由 Nginx 來決定這個請求應該由哪臺生產環境服務器來進行回應,這個也正是 負載均衡 的概念;
2.2 解決方案
正如我們在入門篇介紹的那樣,針對于請求的分發,我們可以把它理解為 負載均衡 的配置;
2.2.1 實戰操作
語法:(其他部位和入門篇的是一致的)
http {
upstream Servers {
server IP:PORT weight=1;
server IP:PORT weight=1;
}
server {
location / {
proxy_pass https://Servers;
}
}
}
在其他位置代碼不變的情況下,我們只需要做出這些改變,就可以實作 負載均衡 的配置了;
我們在入門篇的時候,有說過負載均衡的三種方式,分別是 輪詢 加權輪詢 IPHASH;
2.2.2 輪詢與加權輪詢
其實 輪詢 和 加權輪詢 是一個概念,我們可以把 加權輪詢 理解為:在 輪詢 的基礎上改變了某些服務器的權重,好讓它干更多的活;
因為在 Nginx 中,每一個服務器的默認權重是 1 ,所以上述中的 weight=1 我們可以直接省略掉;
但是如果想進行 加權輪詢 ,只需要改變 weight 屬性后的整數值就可以了;
2.2.3 IPHASH
針對于 IPHASH 的概念介紹我們就不再詳述了,我們直接動手開搞;
如果想進行 IPHASH 的配置,你只需要做出這樣的改變:
upstream Servers {
server IP:PORT;
server IP:PORT;
hash $request_uri;
}
一旦配置了這樣的代碼,就可以使用 Nginx 提供的 IPHASH 功能;
3. 靜態資源訪問
3.1 需求闡述
在入門篇中,我們指定了錯誤碼頁面的尋找方式,比如:當出現 502 503 時,我們可以在 Nginx 的組態檔中監聽對應的狀態碼,當出現以上狀態碼時, Nginx 就會跳轉到指定的錯誤頁面中去;
比如這樣:
error_page 502 503 /50x.html;
location = /50x.html {
root html;
}
但是,吃力的一點是,如果你的的錯誤頁面中有圖片,你就必須要進行這樣的一些配置,否則圖片將無法正常顯示;
location ~.*\.(png)?$ {
root /usr/local/nginx/html;
expires 30d;
break;
}
它的含義是,指定了 .png 結尾的圖片都要去 /usr/local/nginx/html 中尋找;
所以此處就會產生問題,如果專案的前端頁面中也有 .png 結尾的圖片呢?
最終的結果就是,前端頁面中 .png 結尾的圖片無法正常顯示,因為在 /usr/local/nginx/html 中并沒有放置這些圖片;
3.2 解決方案
從前端包中取出靜態資源檔案夾,然后放到 /usr/local/nginx/html 去;
改變 error_page 中 root 指定的路徑,我們當然也可以把 錯誤碼 頁面放到前端包中,然后利用 root 直接訪問前端包中的資源即可;
4. 傳遞用戶IP
4.1 需求闡述
一旦我們使用了反向代理功能,且沒有進行特殊配置,那么此時服務器接收的請求 ip 地址將會是 Nginx 監聽的 ip 地址;
也就是說,此時是 Nginx 代表用戶在訪問我們的 生產環境 ;
但是如果說,當某一個用戶密碼錯誤多次被暫時封掉且專案是以 ip 為判斷依據的呢?
那么此時必然會造成所有用戶都無法登錄系統;
4.2 解決方案
解決的思路也很簡單,當 Nginx 在接受用戶請求時,不再使用監聽的 ip 地址作為請求地址,而是直接使用用戶的 ip 地址作為請求 ip ,一旦我們進行了相應的配置,問題就會迎刃而解了;
4.2.1 實戰操作
接續之前的配置,我們只需要做出這樣的變動;
1. 重新編譯 Nginx (因為 Nginx 傳遞用戶 ip 需要使用其他的組件)
cd nginx-1.1-1 // 這是我們解壓后的原始碼包
./configure --with-file-aio --with-http_realip_module --with-http_ssl_module
make
cd objs
cp -f nginx /usr/local/nginx/sbin/nginx // 替換原來安裝的 Nginx 啟動程式
2. 改變配置部分
server {
listen 8080 ssl;
server_name 8.8.8.8;
set_real_ip_from 8.8.8.8; //將監聽的 ip 排除在外
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; //傳遞用戶的 ip 作為請求 ip
proxy_pass https://HikServer;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/386538.html
標籤:其他
下一篇:列印圖案練習(三道題)
