2017-06-23 204 views
3

我是NGINX的新手,我試圖平衡我們的ERP網絡服務器。 我有3個網絡服務器的80端口上運行由WebSphere這是一個黑盒子對我說:NGINX配置:

* web01.example.com/path/apphtml 
* web02.example.com/path/apphtml 
* web03.example.com/path/apphtml 

NGINX監聽虛擬URL ourerp.example.com並代理到羣集。

這裏是我的配置:

upstream myCluster { 
    ip_hash; 
    server web01.example.com:80; 
    server web02.example.com:80; 
    server web03.example.com:80; 
} 

server { 
    listen  443 ssl http2; 
    listen  [::]:443 ssl http2; 
    server_name ourerp.example.com; 
    location/{ 
     rewrite ^(.*)$ /path/apphtml break; 
     proxy_pass  http://myCluster; 
    } 
} 

當我只用proxy_pass,然後NGINX負載平衡,但該請求轉發到web01.example.com而不是web01.example.com/path/apphtml

當我嘗試添加url重寫時,它只是重寫虛擬URL,並且最終使用ourerp.example.com/path/apphtml。

是否可以在上游級別執行URL重寫或將路徑追加到上游級別的應用程序?

回答

0

如果你想通過代理映射//path/apphtml/,使用:

proxy_pass http://myCluster/path/apphtml/; 

更多見this document

您的rewrite聲明的問題是替換字符串末尾缺少$1。有關更多信息,請參閱this document,但正如我上面所指出的那樣,您不需要rewrite聲明,因爲proxy_pass聲明無論如何都能夠完成相同的工作。

+0

理查德,謝謝你的迴應。我曾嘗試通過代理進行映射,正如你所提到的那樣,但接着發送回瀏覽器的NGINX請求是添加了路徑的虛擬URL,它不使用集羣中的服務器 –

+0

感謝您的幫助。在發現更多問題後,我發現我的問題是我沒有正確使用負載平衡器URL。一旦我使用ourerp.example.com/path/apphtml/而不是ourerp.example.com,我就是負載均衡。 –