2016-02-26 49 views
0

我想有Nginx代理的多個站點。 或者使用site1.someIpsite2.someIpsomeIp/site1someIp/site2nginx轉發,但改變位置上下文

當我試圖做到這一點使用以下設置:

server{ 
     listen 80; 
     listen [::]:80; 

     location /first { 
       proxy_pass http://localThing:somePort; 
     } 

     location /second { 
       proxy_pass localThing2; 
     } 
} 

這導致/first轉發http://localThing:somePort/first,但實際上,我只是想轉發到http://localThing:somePort

目前,我使用多個服務器監聽不同的端口,例如someIp:1111someIP:2222但這不是一個很好的解決方案。

  • 我想要麼不知何故不轉發匹配的位置
  • 或使用mysite.someIp:somePort(但不知道如何做到這一點)

由@jdewald好心提供的答案是HTML轉發的一個好的開始,但不是CSS。

到目前爲止,我發現它可以在那裏加入somePort/在最後/是重要的,但產生相同的問題,因爲CSS是無法訪問被簡化爲

location /first { 
    proxy_pass http://someip:somePort/; 
} 

。 CSS似乎無法訪問,因爲應用程序(http://concourse.ci/)正在localIp:somePort/public上提供它。如果位置設置爲/,但這不是問題,但是由於我想使用上述兩種方法之一很好地代理多個服務,而不是使用不同端口映射到/

+0

尼斯抓在簡化版本中,我會空白並忘記nginx會替換匹配的位置。那麼CSS在概念上是在/(first|second|...)/public/blah.css(在應用程序中是/public/blah.css)還是first.mysite.com/public/blah.css?你想剝奪「/公共」部分還是你想從那裏到達?什麼URL是爲CSS服務的HTML? –

+0

這個CSS例如從http:// myServer:5555/public/main.css?id = fef6507a177742529af48a161e08a9a4提供服務據我所知,css是從/ public的本地服務提供的,我想爲它提供服務從'myNginx/service /'或'service.myNginx'我只想要所有的東西交付,只是希望服務工作。 –

+0

所以HTML和CSS來自不同的地方?真的沒有理由你不能只將位置塊設置爲/ service/{傳遞給/ public /。我可以編輯答案,但它基本上就是你已經有的,只是對於每個位置塊 –

回答

1

您只需重寫URI:

location /first { 
    rewrite ^/first(.*)$ $1 break; 
    proxy_pass http://someip:somePort; 
} 

或者你可以有/第一塊是正則表達式和proxy_pass到$ 1(使用相同的正則表達式),例如:

location ~ ^/first(.*) { 
    proxy_pass http://someip:somePort$1; 
} 
+0

謝謝你在HTML獲取加載結果,但CSS不是http://myIP/public/main.css?id = fef6507a177742529af48a161e08a9a4和奇怪的是這個**公共插入** –

+0

我不確定你的意思是@geoHeil?是/公開你的一個塊? –

+0

不,我過濾/第一,但奇怪的只有HTML加載。該URL是一些CSS的URL。我注意到/ public /被添加了。但不知道爲什麼。 –