在Nginx中构建多个项目的最佳实践



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

这是我的问题-

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

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

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

总之,我的网站试图从服务器的根目录提供链接中的相对位置,但这不起作用,因为带有链接的HTML比根目录深一个目录。我最终遇到的情况是,我所在的位置总是缺少目录级别。

当然,我只需将location /js {root /directory/files/website;}添加到我的配置文件中,就可以在给定网站的JS、CSS和Media的位置进行硬编码,但这个解决方案不能扩展到不同位置的多个托管页面——网站、网站2、网站3等。

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

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

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

删除前导斜杠(如果JS文件夹与HTML文件位于同一级别(,或者如果JS文件夹位于HTML文件上方一级,则在链接前预加..

最新更新