NGINX在HTML页面以外的所有页面上都有404错误
我将nginx设置为docker容器中的反向代理,以链接到容器外部的站点.我有一个vhost配置设置如下(我尝试在home-assistant的位置之前添加^?):
对于home-assistant和caliber-web站点,页面加载,但我得到404错误的所有其他项目(图像,CSS等…).如果我尝试单击应用程序中的链接,它会将我链接到192.168.1.99/file而不是192.168.1.99/site-folder/file.以下是日志中的一些记录(请注意一个200响应,其他404响应).我在这做错了什么?在此先感谢您的帮助.
Here is a copy of my root nginx.conf.我猜这个错误就在这里,我只是想弄清楚在哪里. 最佳答案
您正在尝试从原始应用程序未知的位置发出proxy_pass请求.在docker容器应用程序中仍然认为它是从网站根目录(http://192.168.1.99:8123/)访问的,因此它生成相对于/的所有URL,而不是您的/ home-assistant /或/ caliber-web / .
有很多方法可以解决这个问题,你应该选择最适合你的方法: 1.替换代理html中的链接 首先,它是在用ngx_http_sub_module向客户端提交结果之前替换从代理应用程序接收的每个链接.默认情况下没有启用它,所以如果你的发行版没有它,你可能需要compile nginx from source(检查这个的可用性)模块运行nginx -V,它应该在配置参数的某处显示–with-http_sub_module. 如果选择此方法,请将以下指令添加到配置中:
2.更改容器内的应用程序路径 将docker容器内的应用程序移动到/ home-assistant而不是root,因此它将生成与该路径相关的服务内容中的所有URL而不是root /.这是一个显而易见的(也许是最简单的)解决方案,它根本不需要触摸nginx配置(而是在docker中编辑配置) 3.根据Referer标头选择上游 根据Referer标头确定应使用哪个上游. Taken from here.看起来非常聪明,虽然我自己也不会在生产中使用它(注意它只适用于css / js文件).
如果我是你,我会选择#2 – 在容器内移动应用程序作为最简单的&最不容易出错的方式来获得你需要的东西. 附:我完全忘了你可以直接从你的硬盘驱动器提供静态文件,因为你的后端和nginx在同一台服务器上.它将需要一些依赖于应用程序的配置,但结果您将获得最有效的解决方案.. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 使用nginx:在公共IP请求时需要身份验证,本地时不需要身份验
- 使用Nginx,fastcgi和php设置开发环境时,我从php服务器收到“
- 如何使Nginx使URL不区分大小写
- nginx – 如何将域名指向另一个网站的页面?
- “无指定输入文件”的真正解决方案.(nginx,fpm)
- linux – 如何在nginx中限制对动态生成位置的访问?
- node.js-WebSocket与“ ws://…/socket.io/”的连接失败:
- Nginx TCP Fast Open Issue
- nginx – $http_referer的行为类似于$document_uri
- 如何配置Nginx在404处理之前尝试两个上游?