我的设置:一台树莓派,它是两个独立 LAN(192.168.1.* 和 192.168.2.*)的一部分,运行 nginx。我想将 nginx 设置为反向代理,这样我就可以从第二个 LAN 访问第一个 LAN 的路由器。(无法从 LAN 外部直接访问路由器)
因此,从第二个 LAN(假设为 192.168.2.10)中的计算机,我想要转到第二个 LAN 中 pi 的地址(假设为 192.168.2.2),并且我想要转发到第一个 LAN(192.168.1.1)中路由器的 Web 界面。
通过我所做的设置,它可以部分工作:它转发到正确的位置,但在加载网站时出现问题,因为对于每个.js 和.css 文件(在加载的 html 中内联引用)我都会收到 403 错误“禁止”。
直接从 pi 访问路由器网站没有问题,所以问题与反向代理的配置有关。
以下是我所设置的内容和错误消息(我没有指定表示它是默认值/设置)
NGINX配置:
location / {
proxy_bind 192.168.1.2;
include /etc/nginx/mime.types;
default_type application/octet-stream;
proxy_pass http://192.168.1.1/;
}
192.168.1.2 是第一个 LAN 中 pi 的地址。192.168.1.1 是我想要访问的路由器(第一个 LAN 的一部分)的地址。
我在 Web 浏览器的开发者控制台中看到的示例错误(适用于所有 .js 和 .css 文件):
HTTP403: FORBIDDEN - The server understood the request, but is refusing to fulfil it. GET - http://192.168.2.2/css/main.css
nginx的access.log中对应行:
"GET /css/main.css HTTP/1.1" 403 100 "http://192.168.2.2/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134"
我不确定,但上面那行显示 192.168.2.2 作为引用者。由于路由器位于 192.168.1.* LAN 中,我认为这可能会导致权限问题。但是,使用“proxy_set_header Referer”会产生完全相同的结果,所以我可能错了?
源文件中对应的 html 行(直接从 pi 使用 curl 时看到):
<link rel="stylesheet" href="../css/main.css">
我已经尝试了许多不同的设置(我尝试了标头 Host/Referer/X-Forwarded-For),但结果总是相同的。由于它是路由器的内置管理网站,我无法更改这些文件的权限(我认为没有必要,因为不使用代理就可以正常工作)。我也不知道根文件夹是什么(它是 TP-Link MR400)。
一些附加信息:如果我在路由器的局域网上打开一个网页浏览器并手动直接导航到http://192.168.1.1/css/main.css我也遇到了 403 Forbidden。导航到http://192.168.1.1/但是加载内联样式表没有任何问题。希望这有助于识别权限问题?
我错过了什么?
提前谢谢你,Wim
答案1
对于遇到同样问题的人:我设法解决了这个问题。访问日志中的行一直困扰着我,因为它仍然显示“192.168.2.2”作为引用者,即使我在配置中指定引用者是“192.168.1.2”。只是为了尝试,我把 proxy_set_header Referer “http://192.168.1.1“;”在配置中,这样就解决了所有问题。这似乎真的很奇怪,这可以解决所有问题,但确实如此......