nginxip轉發不同伺服器
A. 10. Nginx實現反向代理
反向代理: reverse proxy, 指的是代理外網用戶的請求到內部的指定的伺服器, 並將數據返回給用戶的一種方式, 這是用的比較多的一種方式
Nginx除了可以為企業提供高性能的web服務之外, 另外還可以將Nginx本身不具備的請求通過某種預定義的協議轉發至其他伺服器處理, 不同的協議就是Nginx伺服器與其他伺服器進行通信的一種規范, 主要在不同的場景使用以下模塊實現不同的功能
生成環境部署架構:
訪問邏輯圖:
Nginx反向代理http服務:
1. proxy_pass
2. proxy_hide_header field
修改前, 響應報文頭部會攜帶ETag信息
修改後ETag信息被隱藏
3. proxy_pass_header field
4. proxy_pass_request_body
5. proxy_pass_request_headers
6. proxy_set_header
由於proxy_set_header只是修改了請求報文的頭部信息, 添加了自定義的欄位, 因此, 還需要在後端伺服器修改日誌定義格式, 才能方便將客戶端ip記錄到日誌信息中
注意1:通過set_proxy_header自定義變數只是給請求報文添加了一個自定義的欄位, 其欄位值是人為根據系統內置變數設定的
注意2: 這種方法, 在多級代理的情況下, 並不能將客戶端ip, 逐層的傳給後端伺服器, 而是需要利用$proxy_add_x_forwarded_for變數實現
注意3: 如果一定要使用proxy_set_header去傳遞客戶端ip和每一層代理的ip地址, 那麼需要在每一層nginx代理都開啟proxy_set_header, 並且設置不同的自定義變數去引用nginx自帶變數$remote_addr, 這樣每一級nginx都會記錄上一級, 也就包括客戶端的ip地址, 同時, 在後端伺服器的日誌格式中, 要添加多個nginx自定義的變數, 這樣也可以把客戶端ip和中間經過的代理的ip全部傳遞給後端的伺服器
proxy_add_x_forwarded_for實現多級代理ip地址透傳示例: 需要在每一級代理都開啟
實驗環境:
7. 有關反向代理時間的幾個參數
8. proxy_ignore_client_abort
9. hash表大小的設置
客戶端 ----- http協議 ------- nginx(代理伺服器,10.0.0.86) ----- http --- apache (10.0.0.85)
客戶端, 通過訪問nginx上定義的虛擬主機中的server_name域名, 通過內部定義的location匹配規則, 被轉發到10.0.0.85伺服器
代理伺服器與後端伺服器連接出現問題可能發生的報錯:
如果後端伺服器想把圖片資源放到固定的目錄下, 也可以自定義, 比如存到/var/www/html/static, 那麼nginx的location就要修改為如下:
緩存功能相關參數:
實驗環境:
proxy_pass 可以讓Nginx將客戶端請求轉發至後端單台伺服器, 但是無法轉發至特定的一組伺服器, 而且不能對後端伺服器提供相應的伺服器狀態監測.
Nginx可以基於 ngx_http_upstream_mole 模塊提供伺服器分組轉發, 權重分配, 狀態監測, 使用不同的調度演算法等高級功能
關於ip_forward
注意: 本實驗過程要先關閉緩存
訪問固定的URI會被調度到相同的伺服器
B. nginx反向代理三種模式
1、基於IP代理
2、基於域名代理
3、基於埠代理
Nginx是一款輕量級的Web 伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器,其特點是佔用內存少,並發能力強,是我們在Web開發中最常用的工具之一。
此外,Nginx能提供性能穩定、並且提供配置靈活的轉發功能。它可以根據不同的正則匹配,採取不同的轉發策略,並且Nginx對返回結果進行錯誤頁跳轉,異常判斷等。如果被分發的伺服器存在異常,它可以將請求重新轉發給另外一台伺服器,然後自動去除異常伺服器。
C. Nginx轉發請求過程解析
How nginx processes a request
這種配置情況下,第一個server就是默認配置。請求通過Header中的"Host"來匹配到對應的服務,如果沒有匹配到任何server_name,則路由到默認server(第一個server)處理。
通過給 listen 增加 default_server 參數明確指定哪個server是默認server( default_server 參數從0.8.21版本開始有效)。 注意: default_server 是用作用於埠的,而不是 server_name 的
可以定義一個 server_name 屬性為空的server來處理沒有Host的請求(從0.8.48版本開始, server_name 默認是"",之前的版本默認是hostname)。
這個配置標識請求Header中Host為空時,會返回「444」響應碼,然後關閉鏈接。
請求Header中的Host匹配到 server_name 後,會轉發到IP+埠上,如果為匹配到 server_name ,如前面所述,會轉發到第一個server來處理請求,當然也可以通過 default_server 屬性來指定埠的默認server。
如上配置,處理請求流程如下:
請求進來時,nginx會按照如下步驟來匹配請求(匹配請求只用URI不帶參數的部分)
spring web service系列1
spring web service系列2
spring web service系列3
maven配置文件settings.xml詳解
Nginx中的負載均衡演算法
Nginx upstream指令配置說明
Nginx中虛擬伺服器server指令配置說明
Nginx中proxy_pass/proxy_redirect/proxy_set_header配置說明
Nginx中ngx_http_core_mole相關指令配置說明
Java自帶JVM監控工具jstat使用詳細說明
Java自帶JVM監控工具jps使用詳細說明
Java自帶故障分析工具jmap工具使用說明
Java自帶故障分析工具jhat工具使用說明