首页 > 解决方案 > 在 Nginx 中构建多个项目的最佳实践?

问题描述

首先,我要为我的标题含糊而道歉。我在创建 Nginx 配置时确实遇到了一个特定问题,但这是我遇到过多次的问题,我很难相信没有更好的方法。我选择了一个模糊的标题,因为我觉得我无法用这么少的文字来描述这个问题,并且因为我想概括它以希望得到更好的答案。

这是我的问题-

假设我有一个 Nginx 服务器example.com,在我的配置文件中我的服务器根设置为/directory/files. 我设置了一个位置,我们称之为/website。我从example.com/website. 服务器返回我的网页,在这个网页上,我链接到/js/myfile.js脚本标签中的位置。这就是我的问题出现的地方。

example.com因此浏览器向该位置发送一个带有主机的请求/js/myfile.js。我的服务器看到了请求,但没有找到 的位置块/js/myfile.js,因此它发回状态 404。

好的,找到问题了——我从 提供我的 HTML /directory/files/website,但我不能提供服务/directory/files/js/myfile.js,因为它确实不存在(至少不在那个位置)。相反,我的 JS 位于其中,/directory/files/website/js因为项目文件通常单独存储在它们自己的目录中以进行组织。

总而言之,我的网站尝试提供来自服务器根目录的链接中的相对位置,这不起作用,因为带有链接的 HTML 提供的目录比根目录更深。我最终遇到了一种情况,我总是在我的位置缺少目录级别。

当然,我可以通过添加location /js {root /directory/files/website;}到我的配置文件中来硬编码给定网站的 JS、CSS 和媒体的位置,但是这个解决方案不能扩展到不同位置网站、网站 2、网站 3 等的多个托管页面.

我疯了吗?其他人是否遇到过这种情况?我使用 Nginx 错了吗?我该如何解决这个问题?如果我的浏览器知道从哪个目录请求页面,为什么相对链接仍被视为相对于服务器根目录,而不是页面来自的目录???

标签: htmlnginx

解决方案


您的链接不是相对的 - 它们是绝对的。任何以正斜杠开头的链接都被认为是绝对链接,例如/js/myfile.js.

如果您想避免当前的“混乱” - 您只需要在所有 HTML 文件中使用相对链接,除非它们引用外部网站(例如 CDN)。

删除前导斜杠(如果您的 JS 文件夹与 HTML 文件处于同一级别) - 或者..如果您的 JS 文件夹位于 HTML 文件的上一层,则在链接前添加一个。


推荐阅读