У меня есть одно приложение 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 мог сказать, какой блок сервера он должен обрабатывать.