Мне нужно иметь несколько PHP-FPM на одном домене.

Пример: services.local/ уведомление -> уведомление: 9000 services.local/ auth -> auth: 9000

Итак, у меня есть конфигурация vhost:

server {
    server_name services.local;
    root /www;

    include /etc/nginx/conf.d/services/*.conf;
    error_log /var/log/nginx/symfony_error.log;
}

И у меня есть уведомление.conf

location /notification {
    root /www/;
    index app.php index.html;

    #try_files $uri $uri /notification/web/app.php?$is_args$args;
    rewrite ^(.*)$ /notification/web/app.php last;
}


location /notification/web/app.php {
    fastcgi_pass notification-upstream;
    fastcgi_split_path_info ^(.+\.php)(/.*)$;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME /www/notification/web/app.php;
    fastcgi_param HTTPS on;
}

Проблема в том, что каждый перезапись в app.php приводит к загрузке его содержимого, а не к его передаче в FPM.

Когда я получаю доступ к app.php напрямую, он передается в PHP-FPM, единственная проблема - комбинация подкаталога + PHP-FPM + перезапись

Я думаю, что попробовал все в течение двух дней, и у меня нет никаких других идей. Этот конфиг был перестроен 50 раз :)

1 ответ1

0

Наконец я нашел решение. Я не знаю только, будет ли это работать со статическими активами, вероятно, нет, но это был не мой случай. Не стесняйтесь украсить и упростить этот код, поскольку я знаю, что он выглядит немного некрасиво, но работает отлично.

location ~ /notification {
    set $new_request_uri /;
    if ($request_uri ~ ^/notification(.+)$) {
        set $new_request_uri $1;
    }

    if ($request_uri ~ ^/notification\?(.+)$) {
        set $new_request_uri /?$1;
    }

    set $new_document_uri /;
    if ($document_uri ~ ^/notification(.+)$) {
        set $new_document_uri $1;
    }

    fastcgi_pass wolnosciowiec_notification:9000;
    fastcgi_split_path_info ^(.+\.php)(/.*)$;
    include fastcgi_params;
    fastcgi_param REQUEST_URI     $new_request_uri;
    fastcgi_param DOCUMENT_URI    $new_document_uri;
    fastcgi_param SCRIPT_NAME     /www/notification/web/app.php;
    fastcgi_param SCRIPT_FILENAME /www/notification/web/app.php;
    fastcgi_param DOCUMENT_ROOT   /www/notification/web;
    fastcgi_param HTTPS on;
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .