淺談什麼是正向代理和反向代理,如何使用nginx搭建正向代理和反向代理
阿新 • • 發佈:2019-01-10
1.正向代理的概念
正向代理 是一個位於客戶端和原始伺服器(origin server)之間的伺服器,為了從原始伺服器取得內容,客戶端向代理髮送一個請求並指定目標(原始伺服器),然後代理向原始伺服器轉交請求並將獲得的內容返回給客戶端。客戶端必須要進行一些特別的設定才能使用正向代理。
2.反向代理的概念
反向代理正好相反,對於客戶端而言它就像是原始伺服器,並且客戶端不需要進行任何特別的設定。客戶端向反向代理的名稱空間(name-space)中的內容傳送普通請求,接著反向代理將判斷向何處(原始伺服器)轉交請求,並將獲得的內容返回給客戶端,就像這些內容原本就是它自己的一樣。簡單的區別方法:正向代理就是我們在瀏覽器可以設定的代理伺服器,主動權在瀏覽者手裡。比如我們有時候要查閱一些資料,被國內牆掉了,這時候我可以在國外的伺服器上搭建一個nginx正向代理伺服器,然後我們就可以通過瀏覽器設定代理伺服器,來翻牆了。反向代理,是瀏覽者不知情的,伺服器端自己假設的。
下面以nginx為例子來搭建正向代理伺服器和反向代理伺服器
1.nginx正向代理配置
server{ resolver 8.8.8.8; resolver_timeout 30s; listen 82; location / { proxy_pass http://$http_host$request_uri; proxy_set_header Host $http_host; proxy_buffers 256 4k; proxy_max_temp_file_size 0; proxy_connect_timeout 30; proxy_cache_valid 200 302 10m; proxy_cache_valid 301 1h; proxy_cache_valid any 1m; } }
1、不能有hostname。
2、必須有resolver, 即dns,即上面的8.8.8.8,超時時間(30秒)可選。
3、配置正向代理引數,均是由 Nginx 變數組成。
proxy_pass $scheme://$host$request_uri;
proxy_set_header Host $http_host;
4、配置快取大小,關閉磁碟快取讀寫減少I/O,以及代理連線超時時間。 proxy_buffers 256 4k;
proxy_max_temp_file_size 0;
proxy_connect_timeout 30;
5、配置代理伺服器 Http 狀態快取時間。 配置好後,重啟nginx,以瀏覽器為例,要使用這個代理伺服器,則只需將瀏覽器代理設定為http://+伺服器ip地址+:+82(82是剛剛設定的埠號)即可使用了。proxy_cache_valid 200 302 10m; proxy_cache_valid 301 1h; proxy_cache_valid any 1m;
2.nginx反向代理伺服器的配置
反向代理參考地址:http://liuyu.blog.51cto.com/183345/166381/
http://www.blogjava.net/xiaomage234/archive/2011/09/08/358247.html (更加清晰點)
http://blog.csdn.net/chanya/article/details/7745459
這裡我更加簡潔的小結下,需要看完整版的,建議點選上面的連結。
下面是以負載均衡為例子的反向代理。
http {
# 省略了前面一般的配置,直接從負載均衡這裡開始
# 設定地址池,後端3臺伺服器
upstream http_server_pool {
server 192.168.1.2:8080 weight=2 max_fails=2 fail_timeout=30s;
server 192.168.1.3:8080 weight=3 max_fails=2 fail_timeout=30s;
server 192.168.1.4:8080 weight=4 max_fails=2 fail_timeout=30s;
}
# 一個虛擬主機,用來反向代理http_server_pool這組伺服器
server {
listen 80;
# 外網訪問的域名
server_name www.test.com;
location / {
# 後端伺服器返回500 503 404錯誤,自動請求轉發到upstream池中另一臺伺服器
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
proxy_pass http://http_server_pool;
proxy_set_header Host www.test.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
access_log logs/www.test.com.access.log combined;
}
}
最簡單的反向代理演示(在一臺伺服器上做代理伺服器,將http請求轉發到另一臺IIS伺服器上,通過二級域名形式訪問。)編輯vim nginx.conf
server {
listen 80;
server_name test.zhoumengkang.com;
location / {
proxy_pass http://121.199.**.*:80;
}
}