2011-03-25 18 views
29

我有2個服務器,nginx的代理所有流量遠程nginx的

  1. 與IP XX.XX.XX.XX,位於德國...(運行前端:nginx的(靜態內容),後端: Apache2的)

  2. 與IP yy.yy.yy.yy,位於意大利...

,此刻所有的請求被髮送到服務器IP XX.XX.XX.XX, 如何代理a從XX.XX.XX.XX LL流量yy.yy.yy.yy使用nginx的...

  request       proxy, request 
Internet  ->  xx.xx.xx.xx(nginx)   ->    yy.yy.yy.yy(nginx, Apache) 
      <-         <- 
      response       proxy, response 

謝謝...

+0

你有沒有嘗試閱讀文檔? proxy_pass _http://yy.yy.yy.yy – CyberDem0n 2011-03-25 12:29:20

+0

當然!但如何閱讀遠程端的X-Real-IP(ip:yy.yy.yy.yy)? – user676674 2011-03-25 18:25:16

+0

謝謝,全部完成! – user676674 2011-03-26 20:21:42

回答

80

他人。回答主題是配置nginx的,如:

server { 
    listen 80; 
    server_name mydomain.com; 
    location/{ 
     access_log off; 
     proxy_pass http://mydomain.com:8080; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header Host $host; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    } 
} 
+0

'位置/'是否匹配所有路徑?或只有根路徑'\'? – pomo 2016-09-08 19:30:35

+1

@pomo根據guidlines在這裏http://nginx.org/en/docs/http/ngx_http_core_module.html#location它將匹配所有嵌套查詢,如site.com/index.html,但不適用於根查詢aka site.com/ – 2016-09-10 14:40:21

1

您可以使用upsteream像:

upstream xx.xx.xx.xx:8080{ 
    #ip_hash; 
    server xx.xx.xx.xx:8080 max_fails=2 fail_timeout=2s; 
    server yy.yy.yy.yy:8181 max_fails=2 fail_timeout=2s; 
} 

那麼你可以使用cookie或頭設置類似請求:

location /app { 
     if ($cookie_proxy_override = "proxy-target-A") { 
      rewrite . http://xx.xx.xx.xx:8080/app; 
      proxy_set_header X-Real-IP  $remote_addr; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
      break; 
     } 
     if ($cookie_proxy_override = "proxy-target-B") { 
      rewrite . http://yy.yy.yy.yy:8181/webreg; 
      proxy_set_header X-Real-IP  $remote_addr; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
      break; 
     } 
     proxy_pass http://xx.xx.xx.xx:8080/webreg; 
     proxy_set_header X-Real-IP  $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    }