Nginx實戰(五) 反向代理
Nginx實戰系列目錄
- Nginx實戰(一) 虛擬主機
- Nginx實戰(二) URL重寫
- Nginx實戰(三) 日誌配置與切割
- Nginx實戰(四) 限速功能
- Nginx實戰(五) 反向代理
- Nginx實戰(六) 引數優化
反向代理(Reverse Proxy)方式是指以代理伺服器來接受Internet上的連線請求,然後將請求轉發給內部網路上的伺服器,並將從伺服器上得到的結果返回給Internet上請求連線的客戶端,此時代理伺服器對外就表現為一個伺服器。
什麼是反向代理
反向代理(Reverse Proxy)方式是指以代理伺服器來接受Internet上的連線請求,然後將請求轉發給內部網路上的伺服器,並將從伺服器上得到的結果返回給Internet上請求連線的客戶端,此時代理伺服器對外就表現為一個伺服器。
有反向代理,當然也存在正向代理的概念咯。正向代理指的是,一個位於客戶端和原始伺服器之間的伺服器,為了從原始伺服器取得內容,客戶端向代理髮送一個請求並指定目標(原始伺服器),然後代理向原始伺服器轉交請求並將獲得的內容返回給客戶端。
我們通過一個簡單例子,我們就很好的理解兩者之間的區別了。
所以,簡單的理解,就是正向代理是為客戶端做代理,代替客戶端去訪問伺服器,而反向代理是為伺服器做代理,代替伺服器接受客戶端請求。(感謝@Charles道道 補充)
為什麼使用反向代理
- 可以起到保護網站安全的作用,因為任何來自Internet的請求都必須先經過代理伺服器。
- 通過快取靜態資源,加速Web請求。
- 實現負載均衡。順便說下,目前市面上,主流的負載均衡方案,硬體裝置有F5,軟體方案有四層負載均衡的LVS,七層負載均衡的Nginx、Haproxy等。
Nginx反向代理的實戰
在生產環境,Tomcat伺服器一般不單獨使用在專案中,我們一般通過nginx用於反向代理的伺服器,並將請求轉發給後端多臺Tomcat伺服器,從而達到負載均衡的目的。
Nginx的叢集配置
在http節點下,新增upstream節點,新增tomcat叢集。
upstream tomcats { server 127.0.0.1:9001; server 127.0.0.1:9002; }
配置location為tomcat叢集
location / { proxy_pass_header Server; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; proxy_pass http://tomcats; }
upstream還可以為每個裝置設定狀態值,這些狀態值的含義分別如下:
- down:表示單前的server暫時不參與負載.
- weight:預設為1.weight越大,負載的權重就越大。
- max_fails:允許請求失敗的次數預設為1.當超過最大次數時,返回proxy_next_upstream 模組定義的錯誤.
- fail_timeout : max_fails次失敗後,暫停的時間。
- backup: 其它所有的非backup機器down或者忙的時候,請求backup機器。所以這臺機器壓力會最輕。
upstream tomcats{ server 127.0.0.1:9001 down; server 127.0.0.1:9002 backup; server 127.0.0.1:9003 weight=2; server 127.0.0.1:9004 max_fails=2 fail_timeout=60s; }
分配策略
none(輪詢)
upstream按照輪詢(預設)方式進行負載,每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。雖然這種方式簡便、成本低廉。但缺點是:可靠性低和負載分配不均衡。
weight(權重)
指定輪詢機率,weight和訪問比率成正比,用於後端伺服器效能不均的情況。例如
server 192.168.61.22 weight = 6; # 60% 請求 server 192.168.61.23 weight = 4; # 40% 請求
ip_hash(訪問ip)
每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決session的問題。
配置只需要在upstream中加入ip_hash;即可。
upstream tomcats { ip_hash; server 127.0.0.1:9001; server 127.0.0.1:9002; }
fair(第三方)
按後端伺服器的響應時間來分配請求,響應時間短的優先分配。與weight分配策略類似。
upstream tomcats { server 127.0.0.1:9001; server 127.0.0.1:9002; fair; }
url_hash(第三方)
和IP雜湊類似,只不過針對請求的url進行hash(基於快取的server,頁面靜態化)。
一個模板
upstream tomcats { server ip:8080; } server { listen 80; server_name www.lianggzone.com; location / { proxy_pass http://tomcats; #Proxy Settings proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; proxy_max_temp_file_size 0; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; } }
反向代理實戰
現在,我們開始一個完整的配置,配置如下
upstream tomcats { server 127.0.0.1:9001; server 127.0.0.1:9002; } server { listen 80; server_name www.lianggzone.com; location / { proxy_pass_header Server; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; proxy_pass http://tomcats; } }
這個時候,我們請求http://www.lianggzone.com/ 就會跳轉到響應的頁面了。
相關文章
- Nginx(五):http反向代理的實現NginxHTTP
- nginx反向代理和負載均衡策略實戰案例Nginx負載
- Nginx反向代理Nginx
- nginx 反向代理Nginx
- nginx正向代理、反向代理Nginx
- Nginx反向代理實現跨域Nginx跨域
- Nginx 配置:反向代理Nginx
- Nginx 配置反向代理Nginx
- [Nginx] TCP 反向代理NginxTCP
- Nginx 反向代理 websocketNginxWeb
- Nginx反向代理的簡單實現Nginx
- Nginx之路--配置正向代理、反向代理Nginx
- Nginx正向代理和反向代理配置Nginx
- nginx 反向代理 swoole 使用Nginx
- nginx 反向代理設定Nginx
- Nginx四層反向代理Nginx
- nginx 反向代理 介面請求Nginx
- 淺談Nginx之反向代理Nginx
- nginx反向代理配置去除字首Nginx
- tomcat 配置nginx 反向代理TomcatNginx
- nginx反向代理快取教程。Nginx快取
- Nginx、haproxy反向代理設定Nginx
- nginx 反向代理到目錄Nginx
- 配置Nginx反向代理TomcatNginxTomcat
- 反向代理學習筆記(一) Nginx與反向代理緒論筆記Nginx
- 【Nginx】Nginx反向代理和負載均衡部署Nginx負載
- yapi 的 nginx 反向代理配置文字APINginx
- nginx 學習之反向代理(1)Nginx
- nginx大道至簡之反向代理Nginx
- nginx反向代理配置如何去除字首Nginx
- nginx反向代理多個服務Nginx
- Nginx proxy manager反向代理docker hubNginxDocker
- nginx+tomcat實現反向代理+負載均衡NginxTomcat負載
- Nginx 學習系列(一) ------------- 正向代理與反向代理Nginx
- 用nginx TCP反向代理作mail郵件代理NginxTCPAI
- Nginx專題(1):Nginx之反向代理及配置Nginx
- docker 安裝 nginx 並配置反向代理DockerNginx
- nginx的反向代理proxy_pass指令Nginx