четверг, 18 января 2024 г.

nginx, fastcgi_pass и правильная настройка

 Если работаем через сокет, какой блок часто можно встретить?

    location ~ \.php$ {

        fastcgi_pass unix:/var/run/php-docker/php8.2-fpm.sock;

        fastcgi_index index.php;

        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;

        include fastcgi_params;

    }

Но есть нюанс: $realpath_root в данном случае сломан, вероятно потому что там должен быть реальный путь, но там пусто, файлы же в докере.. 

https://nginx.org/en/docs/http/ngx_http_core_module.html#variables

$realpath_root

an absolute pathname corresponding to the root or alias directive’s value for the current request, with all symbolic links resolved to real paths

Вариант - вписывать туда путь явно или через вспомогательную переменную. Хотя с $document_root тоже работает, если где-то выше выставлен root

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

Но читаемость всё-равно будет не очень: всё-таки ожидается, что root локальный. Можно придумать свою переменную типа

set $root_in_docker /srv/.../ ;

и потом 

fastcgi_param SCRIPT_FILENAME $root_in_docker$fastcgi_script_name;

только не забыть потом

root $root_in_docker;

а то показывает дефолтную nginx страницу. Хотя и так не очень правильно, но - работает

Комментариев нет:

Отправить комментарий