我已经为 Nginx 反向代理苦苦挣扎了 3 天,才意识到这是一件简单的事情。我只需从 Nginx 访问许多后端 node-red (nodeJS) 应用程序,但总是使用不同的端口。
接下来,这是我的示例:
Web client -> `https://ip_adr/1881/ui/` -> Nginx proxy_pass `http://127.0.0.1:1881/ui/` (app)
后端应用程序提供图片http://127.0.0.1:1881/*.jpg
- 我使用以下方法实现了静态测试:
location / {
#proxy_pass http://127.0.0.1:1881;
}
https://ip_adress/ui
在我的浏览器中,所有应用程序图片运行良好。
使用重写将端口从前端动态转发到后端:
location ~ ^/(?<port>\d\d\d\d) { rewrite "^/\d{4}/(.*)" /$1 break; proxy_pass http://127.0.0.1:$port;
}
使用正则表达式,我从 ip_adr/1881 中提取端口/(?<port>\d\d\d\d)
,然后重写 url,/1881
但不保留/path1/path2/...
如果我把https://192.168.x.x/1881/ui/
所有东西都放入浏览器中,但没有图片。
经过多次测试后,我的浏览器无法显示任何图像,并且跟踪错误日志显示所有图片均显示:
2022/03/10 01:01:36 [error] 50065#50065: *1224 open() "/usr/share/nginx/html/schema_fire_EEU.jpg" failed (2: No such file or directory), client: 192.168.1.29, server: exemple3.test.fr, request: "GET /schema_fire_EEU.jpg HTTP/1.1", host: "192.168.1.53", referrer: "https://192.168.1.53/1881/ui/"
这太不可思议了,如果我放进去https://192.168.x.x/1881/schema_fire_EEU.jpg
,我就能显示这幅图像!!!
我认为,斜线有问题...
有人能帮助我吗?
祝你有美好的一天 ;-)
答案1
据我理解,问题可能在于您代理的 URI 不正确。
如果这个“https://192.168.xx/1881/schema_fire_EEU.jpg”有效,意味着你的服务正在“/”下公开你的图像,但是ProxyPass规则没有“/”。
您可以尝试:
ProxyPass / http://ip:port
祝你今天过得愉快。 :)