1. 程式人生 > >nginx的正向代理和反向的區別及配置

nginx的正向代理和反向的區別及配置

nginx;正向代理;反向代理配置

1.正向代理的概念

正向代理 是一個位於客戶端和原始服務器(origin server)之間的服務器,為了從原始服務器取得內容,客戶端向代理發送一個請求並指定目標(原始服務器),然後代理向原始服務器轉交請求並將獲得的內容返回給客戶端。客戶端必須要進行一些特別的設置才能使用正向代理。


2.反向代理的概念

反向代理正好相反,對於客戶端而言它就像是原始服務器,並且客戶端不需要進行任何特別的設置。客戶端向反向代理的命名空間(name-space)中的內容發送普通請求,接著反向代理將判斷向何處(原始服務器)轉交請求,並將獲得的內容返回給客戶端,就像這些內容原本就是它自己的一樣。
簡單的區別方法:正向代理就是我們在瀏覽器可以設置的代理服務器,主動權在瀏覽者手裏。比如我們有時候要查閱一些資料,被國內墻掉了,這時候我可以在國外的服務器上搭建一個nginx正向代理服務器,然後我們就可以通過瀏覽器設置代理服務器,來翻墻了。反向代理,是瀏覽者不知情的,服務器端自己假設的。

1.nginx正向代理配置


  1. server{

  2. resolver 8.8.8.8;

  3. resolver_timeout 30s;

  4. listen 82;

  5. location / {

  6. proxy_pass http://$http_host$request_uri;

  7. proxy_set_header Host $http_host;

  8. proxy_buffers 256 4k;

  9. proxy_max_temp_file_size 0;

  10. proxy_connect_timeout 30;

  11. proxy_cache_valid 200 302 10m;

  12. proxy_cache_valid 301 1h;

  13. proxy_cache_valid any 1m;

  14. }

  15. }

1、不能有hostname。


2、必須有resolver, 即dns,即上面的8.8.8.8,超時時間(30秒)可選。
3、配置正向代理參數,均是由 Nginx 變量組成。

[plain] view plain copy

  1. proxy_pass $scheme://$host$request_uri;

  2. proxy_set_header Host $http_host;

4、配置緩存大小,關閉磁盤緩存讀寫減少I/O,以及代理連接超時時間。

[plain] view plain copy

  1. proxy_buffers 256 4k;

  2. proxy_max_temp_file_size 0;

  3. proxy_connect_timeout 30;

5、配置代理服務器 Http 狀態緩存時間。

[plain] view plain copy

  1. proxy_cache_valid 200 302 10m;

  2. proxy_cache_valid 301 1h;

  3. proxy_cache_valid any 1m;

配置好後,重啟nginx,以瀏覽器為例,要使用這個代理服務器,則只需將瀏覽器代理設置為http://+服務器ip地址+:+82(82是剛剛設置的端口號)即可使用了。


2.nginx反向代理服務器的配置

下面是以負載均衡為例子的反向代理。



[plain] view plain copy

  1. http {

  2. # 省略了前面一般的配置,直接從負載均衡這裏開始

  3. # 設置地址池,後端3臺服務器

  4. upstream http_server_pool {

  5. server 192.168.1.2:8080 weight=2 max_fails=2 fail_timeout=30s;

  6. server 192.168.1.3:8080 weight=3 max_fails=2 fail_timeout=30s;

  7. server 192.168.1.4:8080 weight=4 max_fails=2 fail_timeout=30s;

  8. }

  9. # 一個虛擬主機,用來反向代理http_server_pool這組服務器

  10. server {

  11. listen 80;

  12. # 外網訪問的域名

  13. server_name www.test.com;

  14. location / {

  15. # 後端服務器返回500 503 404錯誤,自動請求轉發到upstream池中另一臺服務器

  16. proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;

  17. proxy_pass http://http_server_pool;

  18. proxy_set_header Host www.test.com;

  19. proxy_set_header X-Real-IP $remote_addr;

  20. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

  21. }

  22. access_log logs/www.test.com.access.log combined;

  23. }

  24. }


最簡單的反向代理演示(在一臺服務器上做代理服務器,將http請求轉發到另一臺IIS服務器上,通過二級域名形式訪問。)編輯vim nginx.conf



[plain] view plain copy

  1. server {

  2. listen 80;

  3. server_name test.zhoumengkang.com;

  4. location / {

  5. proxy_pass http://121.199.**.*:80;

  6. }

  7. }


nginx的正向代理和反向的區別及配置