Я пытаюсь перенести свой старый монолит на k8s, теперь у меня есть изображения nginx и php-fpm (с кодом), и я хочу, чтобы nginx просто обслуживал http-трафик и передавал его в fpm, но nginx настаивает на наличии файлов, я не иметь try_files
директива, но она все равно пытается найти корневые и индексные файлы.
Так возможно ли вообще не монтировать исходный код в nginx, я действительно не понимаю, почему он должен быть там, но я не смог найти ни одного рабочего примера
nginx.conf:
server {
listen 80;
index index.php;
# This dir exist only in php-fpm container
root /var/www/html/public;
location ~* \.php$ {
client_max_body_size 0;
include fastcgi_params;
fastcgi_pass php-fpm:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
}
}
2018/08/17 16:44:40 [ошибка] 9 # 9: * 46 «/var/www/html/public/index.php» не найден (2: нет такого файла или каталога), клиент: 192. xxx.xxx.xxx, сервер:, запрос: «GET / HTTP / 1.1», хост: «localhost»
192.xxx.xxx.xxx — — [17 / Aug / 2018: 16: 44: 40 +0000] «GET / HTTP / 1.1» 404 571 «-» «Mozilla / 5.0 (X11; Linux x86_64) AppleWebKit / 537.36 ( KHTML, как Gecko) Chrome / 65.0.3325.146 Safari / 537.36 «» 195.xxx.xxx.xxx «
Проблема в том, что index
директива нуждается в файле index.php
существовать, для внутреннего перенаправления URI /
в /index.php
,
Вы можете избежать index
директива, добавив location /
внутренне перенаправить все на /index.php
,
Например:
location / {
rewrite ^ /index.php last;
}
location ~* \.php$ {
root /var/www/html/public;
client_max_body_size 0;
include fastcgi_params;
fastcgi_pass php-fpm:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $document_root;
}
Других решений пока нет …