У меня есть приложение, работающее в Docker-контейнере (webdevops / php-nginx), которое думает, что оно запускается по корневому пути, например:
http://localhost:8000/index.php
Перед приложением я запускаю внешнийбалансировщик нагрузки и предоставление каждому приложению отдельного URI-пути на том же хосте, например:
http://localhost/app1/index.php should use the backendserver at http://localhost:8000
Когда запрос поступит в мое приложение, он будет http://localhost:8000/app1/index.php,, но я хочу, чтобы мойnginx для удаления / app1 / part (первый сегмент пути).Я не буду знать заранее содержимое сегмента пути.
В следующей таблице приведены некоторые примеры:
+------------------------------------------------_+----------------------------+--------------+-----------------------+
| Incoming URL | File tried | File exists? | File used |
+------------------------------------------------_+----------------------------+--------------+-----------------------+
| http://localhost:8000/ | /index.php | N | /index.php |
| http://localhost:8000/app1/ | /app1/index.php | N | /index.php |
| http://localhost:8000/css/base.css | /css/base.css | Y | /css/base.css |
| http://localhost:8000/app1/edit.php | /app1/edit.php | N | /edit.php |
| http://localhost:8000/app1/css/base.css | /app1/css/base.css | N | /css/base.css |
| http://localhost:8000/app1/foo/bar/css/base.css | /app1/foo/bar/css/base.css | N | /foo/bar/css/base.css |
+------------------------------------------------_+----------------------------+--------------+-----------------------+
Я попробовал следующую конфигурацию:
/opt / docker / etc / nginx / vhost.common.d / 10-location-root.conf
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ ^/([^/]+/)(.*)$ {
try_files $uri $uri/ /$2 /index.php?$query_string;
/ opt / docker / etc / nginx / conf.d / 10-php.conf
upstream php {
server 127.0.0.1:9000;
}
/ opt / docker / etc / nginx / vhost.common.d / 10-php.conf
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_read_timeout 600;
}
и работает для обслуживания статических файлов, но любые PHP-файлы обслуживаютсяВторой оператор определения местоположения перестал работать.
Я уверен, что есть тривиальное решение, но сейчас я немного озадачен.