2014-07-01 83 views
0

我試圖讓只有Intranet訪問的用戶使用Nginx訪問互聯網上的單個站點。我現在nginx的配置是在Nginx中重寫URL以重定向到僅路徑名

server { 
listen aproxy.com:80; 
rewrite_log on; 
location ~ ^/bproxy { 
if ($args != "") 
{ 
    return 302 http://$args; 
} 

這讓我從aproxy.com/bproxy?www.somewebsite.com重定向到www.somewebsite.com,但顯示的URL爲www.somewebsite.com。我希望能夠將用戶從aproxy.com/bproxy/www.somewebsite.com(不是args)發送到www.somewebsite.com,而不會在URL欄中看到更改。有人可以幫我弄這個嗎?

回答

1

您可以嘗試proxy_pass而不是return

location ~ ^/bproxy/(.*) { 
    resolver  8.8.8.8; #set DNS resolver (by Google) to prevent "no resolver defined to resolve <domain>" error 
    proxy_pass  http://$1; 
} 

但是要記住,如果遠程頁面包含像

<a href="some-path">Link</a> 

的某條鏈路URL成爲

http://aproxy.com/bproxy/some-path 

<a href="/some-path">Link</a> 

成爲

http://aproxy.com/some-path 

也是一樣的頁內的任何資源(圖片,JS,CSS等),所以網頁的行爲可能會被打破。

也許你應該擺脫/bproxy路徑,並讓域aproxy.com本身成爲代理。

更新:

您也可以嘗試使用server_name指令:

server { 
    listen   127.0.0.1:80; 
    server_name aproxy.com; 
    #... 
} 

更新2 - 服務器代理到特定網站只(不支持HTTPS):

server { 
    listen   127.0.0.1:80; 
    server_name  aproxy.com; 

    location/{ 
     resolver  8.8.8.8; 
     proxy_pass  http://stackoverflow.com; 
    } 
} 

因此,瀏覽到http://aproxy.com/questions,你得到t他相同的結果http://stackoverflow.com/questions

注:

如果你想使這個代理是在本地網絡中可見,隨着服務器的本地IP取代127.0.0.1(它可能是這樣的192.168.1.10

+0

那怎麼我是這樣開始的,但除非我明確地告訴aproxy.com:80,nginx正在監聽0.0.0.0:80 – user340342

+0

我能夠將它重定向到正確的URL,但是在該欄中的URL仍然是新網站(www.somewebsite.com),而不是aproxy.com/brpoxy/www.somewebsite.com – user340342

+0

嘗試'聽n 127.0.0.1:80;'。那麼當你在我的文章中瀏覽具有配置的'http:// aproxy.com/bproxy/stackoverflow.com'時會發生什麼? – Curious