我有一个 PHP 应用程序在本地主机端口 80 上运行,另一个在端口 81 上运行。
将浏览器指向http://localhost
运行第一个应用及其所有资源:/assets
文件夹中的 js、css、imgs。但是,第二个应用只能提供具有精确的文件名与第一个应用程序相同。如果第二个应用程序的资产位于第二个应用程序的/assets
目录中,并且与第一个应用程序文件夹中的文件名称不同/assets
,则找不到这些文件,并且您会收到错误404
。
以下是我所看到的具体情况:
http://localhost
<script src='/assets/foo.js'></script>
//file contents
alert('foo'); when foo.js is in app #1's /assets directory
http://localhost:81
<script src='/assets/foo.js'></script>
alert('foo 2'); //alerts "foo 2" when foo.js is in app #2's /assets directory
<script src='/assets/bar.js'></script>
//file contents:
alert('bar'); //file not found 404 error when bar.js is in app #2's /assets directory
导致我的问题的可能原因如下nginx.conf
:
http {
include /Applications/MNPP/conf/nginx/sites-enabled/app2;
include /Applications/MNPP/conf/nginx/sites-enabled/app1;
...
/应用程序/MNPP/conf/nginx/sites-enabled/app2:
server {
listen 81;
server_name localhost:81;
...
/应用程序/MNPP/conf/nginx/sites-enabled/app1:
server {
listen 80;
server_name localhost;
...
答案1
一个问题是您在块root
内指定了指令location
。没有理由在里面使用它location
。
location /
尝试将块的内容移动到server
水平位置,然后location /
完全移除。
此外,您也不需要这两者,因为使用此规范,它会解析为在级别上指定location /assets
时完全相同的路径。root
server
答案2
这将不匹配:server_name localhost:81;
更改为:server_name localhost;
您可以在多个端口上使用相同的“服务器名称”。 listen 块足以让 nginx 知道它应该处理哪个服务器块。