【发布时间】:2020-08-27 05:07:30
【问题描述】:
我的 nginx 网站受 IP 范围保护,我需要在本地或通过 vpn 登录才能看到它:
geo $external_ip {
192.168.0.0/16 0;
}
…
if ($external_ip) {
return 302 https://www.different-site.com/info_explaining_to_log_in_via_vpn ;
}
…
# Normal location config for website
现在我访问了我的网站,但我忘记了通过 VPN 登录。所以我被重定向到信息页面,该页面很好地告诉了我为什么我无法访问该站点并且我必须启动我的 VPN 客户端。
我这样做。现在我再次重新输入我网站的 URL,但浏览器似乎记住了重定向并不断返回信息页面。
如果我使用 307 状态码,也会发生同样的情况。
一段时间后,浏览器似乎忘记了重定向并再次按预期运行并显示我的网站。
如果我简单地返回 403 也会发生同样的情况,从而有效地丢弃了我的信息页面。我这样做是因为我认为这可能是一些缓存语句。但是默认的 nginx 403 页面似乎也被浏览器记住了。
有没有办法让浏览器在每次尝试时都尝试重新加载原始站点?我觉得我错过了一个重要的难题。
$ curl -I https://different-site.com/ 的输出:
HTTP/2 302
server: nginx/1.10.3 (Ubuntu)
date: Mon, 11 May 2020 20:07:54 GMT
content-type: text/html
content-length: 170
location: different-site.com/info_explaining_to_log_in_via_vpn
pragma: no-cache
cache-control: no-cache
更多信息: 该问题仅存在于最初打开连接而没有安装 vpn 的浏览器中。启动 vpn 成功后,任何其他浏览器或 curl 运行。
更多信息(2): 我目前假设我的浏览器保持连接处于活动状态,即使启动 VPN 也会重复使用。这样,nginx 仍然会看到旧的公共 IP 并拒绝访问,直到原始连接终止。 根据https://serverfault.com/questions/775617/force-nginx-to-close-connection,除非我完全禁用keepalive,否则我无法终止连接服务器端,出于性能原因我不希望这样做。所以看起来没有前进的道路。 我的下一个想法是在 nginx(haproxy?)前面放一些东西,它可以根据 url 确定连接关闭。
【问题讨论】:
-
只是一个想法:firefox是否有可能由于连接保持活动而保持连接打开?因为如果我重新加载 nginx 就可以让它工作……
-
$ curl -I https://your-specific-url/的输出是什么? -
HTTP/2 302server: nginx/1.10.3 (Ubuntu)date: Mon, 11 May 2020 20:07:54 GMTcontent-type: text/htmlcontent-length: 170location: https://www.different-site.com/info_explaining_to_log_in_via_vpnpragma: no-cachecache-control: no-cache当然,没有vpn。
标签: nginx firefox redirect http-status-code-302 http-status-code-307