我正在尝试允许只有内部网访问权限的用户使用Nginx访问互联网上的单个网站。我当前的nginx配置是
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栏中看到更改。有人可以帮我这个吗?
答案 0 :(得分: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>
链接网址变为
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
,您得到与http://stackoverflow.com/questions
注意:强>
如果您希望在本地网络中显示此代理,请将127.0.0.1
替换为服务器的本地IP(可能类似于192.168.1.10
)