在两个不同的端口上提供资产服务

在两个不同的端口上提供资产服务

我有一个 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时完全相同的路径。rootserver

答案2

这将不匹配:server_name localhost:81;

更改为:server_name localhost;

您可以在多个端口上使用相同的“服务器名称”。 listen 块足以让 nginx 知道它应该处理哪个服务器块。

相关内容