У меня есть два проекта, оба используют одинаковую конфигурацию nginx, единственное отличие - это имя хоста и путь к веб-каталогу:
server {
listen 80;
server_name {project_host};
root /var/www/{project_path}/web;
index index.html index.htm index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_log /var/log/nginx/{project_name}_error.log;
access_log /var/log/nginx/{project_name}_access.log;
error_page 404 /index.php;
sendfile off;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
}
location ~ /\.ht {
deny all;
}
}
оба в каталоге web
имеют папку docs
, в которой есть все swagger-ui файлы с index.html
.
Все отлично работает для первого проекта, я могу получить доступ к Swagger UI, используя URL prject1/docs/index.html
, но в случае проекта 2, когда я иду на project2/docs/index.html
, я получаю мою страницу не найден, которая должна будет отображаться php, когда маршрут не найден. Почему в случае приложения 1 nginx понимают, что /docs/index.html
не является маршрутом, а в случае приложения 2 он рассматривает его как маршрут, а не путь к файлу, если конфигурации совпадают
My web
dir структура (идентична для обоих проектов):
web/
index.php
docs/
index.html
other_swagger_ui_files
Может быть, это также будет полезно, оба проекта являются своего рода микросервисами, и локально у меня есть docker -компонованная конфигурация для их запуска и запуска, поэтому они оба находятся в одной сети и используют один и тот же контейнер Nginx -proxy и совместно используют один и тот же контейнер PHP, но каждый из них имеет собственный контейнер Nginx (но, как я уже говорил, они идентичны и имеют одинаковую конфигурацию)