Назад | Перейти на главную страницу

Обслуживание активов в двух разных портах

У меня есть одно приложение PHP, работающее на порту 80 localhost, а другое - на порту 81.

Указывая браузер на http://localhost запускает первое приложение и все его ресурсы: js, css, imgs в /assets папка. Однако второе приложение может обслуживать только те ресурсы, которые имеют точный имя файла в качестве первого приложения. Если активы второго приложения находятся во втором приложении /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;
    ...

Одна проблема в том, что вы указываете root директива внутри location блок. Не должно быть причин использовать это внутри location.

Попробуйте переместить содержимое location / блокировать server уровень и удалить location / полностью.

Кроме того, вам не нужно location /assets либо, потому что с этой спецификацией он разрешает точно такой же путь, когда root указано на server уровень.

Это не будет соответствовать: server_name localhost:81;

Измените его на: server_name localhost;

Вы можете иметь одно и то же «имя сервера» на нескольких портах. Блок прослушивания достаточно, чтобы nginx мог сказать, какой блок сервера он должен обрабатывать.