Используйте корневой URL-адрес nginx Rewrite для удаления каталога URL-адресов.

У меня есть эта конфигурация, которая пытается отправить все запросы на /login/ для обслуживания из каталога php /var/www/saml_provider/www/ :

  location ^~ /login/ {
    root /var/www/saml_provider/www/;

    index moo.php;
    try_files $uri $uri/ /login$is_args$args =404;

    location ~ \.php$ {

        fastcgi_pass presentation-php-fpm:9000;
        include fastcgi_params;

        fastcgi_param SCRIPT_FILENAME $request_filename;
        fastcgi_param PHP_VALUE "error_log=/var/log/nginx/php_errors.log";
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
    }
}

к сожалению, затем он ожидает, что файлы будут находиться в /var/www/saml_provider/www/login/, поскольку root добавляет URL-адрес к пути. Как я могу переписать это, чтобы удалить /login/, чтобы файлы находились в правильном месте? (Обратите внимание, что перемещение файлов вниз в каталог входа в систему невозможно). Спасибо


person Zuriar    schedule 26.09.2016    source источник


Ответы (1)


Вы можете переписать /login в /saml_provider/www внутренне и скрыть последнее от внешнего доступа:

location ^~ /login {
    rewrite ^/login(.*)$ /saml_provider/www$1 last;
}
location ^~ /saml_provider/www {
    internal;

    root /var/www;
    index moo.php;
    try_files $uri $uri/ /saml_provider/www/index.php$is_args$args;

    location ~ \.php$ {
        try_files $uri =404;

        fastcgi_pass presentation-php-fpm:9000;
        include fastcgi_params;

        fastcgi_param SCRIPT_FILENAME $request_filename;
        fastcgi_param PHP_VALUE "error_log=/var/log/nginx/php_errors.log";
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
    }
}

Это упрощает перезапись для корневой проблемы и позволяет избежать использования псевдонима. Но это означает, что URI /saml_provider/www удален из внешнего доступа, но, надеюсь, он вряд ли будет конфликтовать с другим приложением на том же сервере.

person Richard Smith    schedule 26.09.2016