2016-11-14 107 views
1

我在計算Nginx上的負載平衡時遇到了困難。我正在使用: - Ubuntu 16.04和 - Nginx 1.10.0。Nginx反向代理上游不能正常工作

總之,當我通過我的IP地址直接進入「proxy_pass」,代理工作:

server { 
    location/{ 
      proxy_pass http://01.02.03.04; 
    } 
} 

當我訪問我的代理計算機,我可以看到從代理IP內容... 但是當我使用的上行指令,它沒有:

upstream backend { 
    server 01.02.03.04; 
} 

server { 
    location/{ 
      proxy_pass http://backend; 
    } 
} 

當我訪問我的代理計算機,我用默認的Nginx服務器頁面,而不是從上游IP地址的內容歡迎。

任何進一步的援助,將不勝感激。我已經做了大量的研究,但不知道爲什麼「上游」不起作用。我沒有得到任何錯誤。它只是不代理。

+1

您是否嘗試在上游指定端口? 'server 01.02.03.04:80;' – karliwson

+0

我做了@karliwson。這很奇怪。 –

回答

0

好吧,看起來像我找到了答案......

對後端服務器

兩件事情,至少對於上述方案採用IP addressses時:

  1. 必須指定端口
  2. 端口不能是:80(根據@ karliwsn端口可以是80,只是上游服務器不能聽到反向代理的同一個端口,我還沒有測試過,但很值得注意)。

後端服務器塊(S)應配置如下:

server { 

    # for your reverse_proxy, *do not* listen to port 80 
    listen 8080; 
    listen [::]:8080; 

    server_name 01.02.03.04; 

    # your other statements below 
    ... 
} 

和反向代理服務器塊應配置如下圖所示:

upstream backend { 
    server 01.02.03.04:8080; 
} 

server { 
    location/{ 
     proxy_pass http://backend; 
    } 
} 

看起來好像後端服務器正在偵聽:80,反向代理服務器不會呈現它的內容。我想這是有道理的,因爲服務器實際上爲普通大衆使用默認端口80。

感謝@ karliwson推動我重新考慮這個港口。

+1

事實上,上游的端口可以是80,但它必須偵聽與nginx使用的主IP地址不同的IP。我通常會讓我的後端在本地主機上偵聽,除非它在遠程服務器上。 – karliwson