Nginx 反向代理-禁止使用 .js 和 .css

Nginx 反向代理-禁止使用 .js 和 .css

我的设置:一台树莓派,它是两个独立 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“;”在配置中,这样就解决了所有问题。这似乎真的很奇怪,这可以解决所有问题,但确实如此......

相关内容