這篇文章的前提是已經配置好了NGINX,而且tomcat已經配置好了,而且能能夠訪問了。
- 說反向代理之前,我們先看看正向代理,正向代理也是大家最常接觸的到的代理模式。
正向代理最大的特點是客戶端非常明確要訪問的服務器地址;服務器只清楚請求來自哪個代理服務器,而不清楚來自哪個具體的客戶端;正向代理模式屏蔽或者隱藏了真實客戶端信息。
客戶端必須設置正向代理服務器,當然前提是要知道正向代理服務器的IP地址,還有代理程序的端口。如圖。
總結來說:正向代理,"它代理的是客戶端",是一個位於客戶端和原始服務器(origin server)之間的服務器,為了從原始服務器取得內容,客戶端向代理發送一個請求並指定目標(原始服務器),然后代理向原始服務器轉交請求並將獲得的內容返回給客戶端。客戶端必須要進行一些特別的設置才能使用正向代理。
正向代理的用途:
(1)訪問原來無法訪問的資源,如Google
(2) 可以做緩存,加速訪問資源
(3)對客戶端訪問授權,上網進行認證
(4)代理可以記錄用戶訪問記錄(上網行為管理),對外隱藏用戶信息
- 明白了什么是正向代理,我們繼續看關於反向代理的處理方式。
多個客戶端給業務服務器發送的請求,Nginx代理服務器接收到之后,按照一定的規則(負載均衡)分發給了后端的業務處理服務器進行處理了。此時請求的來源也就是客戶端是明確的,但是請求具體由哪台服務器處理的並不明確了(反向代理),Nginx扮演的就是一個反向代理角色。
客戶端是無感知代理的存在的,反向代理對外都是透明的,訪問者並不知道自己訪問的是一個代理。因為客戶端不需要任何配置就可以訪問。
反向代理,"它代理的是服務端",主要用於服務器集群分布式部署的情況下,反向代理隱藏了服務器的信息。
反向代理的作用:
(1)保證內網的安全,通常將反向代理作為公網訪問地址,Web服務器是內網
(2)負載均衡,通過反向代理服務器來優化網站的負載
- 反向代理和負載均衡具體配置:
這里介紹一台服務器(192.168.83.130),代理兩個本機的tomcat(端口分別為:8080、8081),下面是安裝后情況:
nginx目錄:
tomcat目錄:
首先在兩個tomcat的/conf/server.xml里面分別配置端口如下:
分別重啟待用。
然后在nginx的/conf/nginx.conf下設置如下:
(1)實現反向代理使用如下簡單配置:
(2)實現負載均衡使用如下配置:
upstream server_tomcat{ ip_hash; server 10.1.14.228:8080 weight=8; server 10.1.14.228:80 weight=2; } server { listen 8887; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; proxy_pass http://server_tomcat; proxy_set_header Host $host:$server_port; index index.html index.htm; }
設置完成后重啟nginx。
瀏覽器輸入主機ip:http://192.168.83.130/,顯示如下:
注意 這里的proxy_set_header Host $host;一定要設置,否則無法使用upstream反向代理。報錯如下(400錯誤):
一個主機(192.168.83.130)代理另一台主機(192.168.83.128)上的tomcat類似,只要將 upstream里的ip換掉就行了。
upstream server_tomcat{ ip_hash; server 192.168.83.130:8081 weight=2; server 192.168.83.128:8080 weight=8; }
注:
nginx 反向代理時丟失端口的解決方案