Nginx實現正向和反向代理

1.正向代理的概念

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

2.反向代理的概念

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

更加細緻的分析:http://z00w00.blog.51cto.com/515114/1031287

下面以nginx為例子來搭建正向代理伺服器和反向代理伺服器

1.nginx正向代理配置

[plain]  view
plain
copy 在CODE上查看代碼片 派生到我的代碼片

  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 在CODE上查看代碼片 派生到我的代碼片

  1. proxy_pass $scheme://$host$request_uri;    
  2. proxy_set_header Host $http_host;    

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

[plain]  view
plain
copy 在CODE上查看代碼片 派生到我的代碼片

  1. proxy_buffers 256 4k;    
  2. proxy_max_temp_file_size 0;    
  3. proxy_connect_timeout 30;    

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

[plain]  view
plain
copy 在CODE上查看代碼片 派生到我的代碼片

  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反向代理伺服器的配置

反向代理參考地址:
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
這裡我更加簡潔的小結下,需要看完整版的,建議點擊上面的鏈接。
下面是以負載均衡為例子的反向代理。

[plain]  view
plain
copy 在CODE上查看代碼片 派生到我的代碼片

  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 在CODE上查看代碼片 派生到我的代碼片

  1. server {  
  2.     listen    80;  
  3.     server_name test.zhoumengkang.com;  
  4.     location / {  
  5.         proxy_pass http://121.199.**.*:80;  
  6.     }  
  7. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值