nginx + PHP-FPM - роутинг на несуществующие урлы

Различные вопросы по установке и настройке фреймворка, конфигурции веб-сервера и IDE.
Ответить
Maxxi
Сообщения: 29
Зарегистрирован: 2014.11.20, 22:39

nginx + PHP-FPM - роутинг на несуществующие урлы

Сообщение Maxxi »

Не могу понять, где глюк. При обращении к несуществующим скриптам срабатывает роут по умолчанию.
Такое поведение только на nginx + PHP-FPM, на апаче все работает правильно.

настройки nginx

Код: Выделить всё

...
	location / {
		index   index.php index.html;
		try_files $uri $uri/ /index.php?$args;
	}
	location ~ \.php$ {
		set $fsn /index.php;
       		if (-f $document_root$fastcgi_script_name){
        	    set $fsn $fastcgi_script_name;
       		}
		fastcgi_pass   127.0.0.1:9123;
		fastcgi_read_timeout 300;
		include fastcgi_params;
		fastcgi_param SCRIPT_FILENAME $document_root$fsn;
		fastcgi_param PATH_INFO $fastcgi_path_info;
	}
...
Например, запрос на site/test/index.php (который не существует)

app.log:

Код: Выделить всё

[проверка правил пропущена]
2017-05-09 11:04:53 [127.0.0.1][2][-][trace][yii\web\UrlManager::parseRequest] No matching URL rules. Using default URL parsing logic.
2017-05-09 11:04:53 [127.0.0.1][2][-][trace][yii\web\Application::handleRequest] Route requested: ''
2017-05-09 11:04:53 [127.0.0.1][2][-][trace][yii\base\Controller::runAction] Route to run: site/index

$_SERVER = [
...
    'SCRIPT_FILENAME' => 'Z:/home/new/frontend/web/index.php'
    'SERVER_SOFTWARE' => 'nginx/1.13.0'
    'GATEWAY_INTERFACE' => 'CGI/1.1'
    'REQUEST_SCHEME' => 'http'
    'SERVER_PROTOCOL' => 'HTTP/1.1'
    'DOCUMENT_ROOT' => 'Z:/home/new/frontend/web'
    'DOCUMENT_URI' => '/test/index.php'
    'REQUEST_URI' => '/test/index.php'
    'SCRIPT_NAME' => '/test/index.php'
...    
]
что еще из настроек забыл подкрутить?
про enableStrictParsing знаю.
Maxxi
Сообщения: 29
Зарегистрирован: 2014.11.20, 22:39

Re: nginx + PHP-FPM - роутинг на несуществующие урлы

Сообщение Maxxi »

Сам же себе и отвечу :)
Глюк проявляется только если несуществующий урл заканчивается на /index.php
В результате хитрых преобразований в web\Request.php\getScriptUrl() получается, что такие урлы соответствуют пустому роуту и срабатывает соответствующее правило роутинга.

Лечится указанием правильного значения fastcgi_param SCRIPT_NAME в конфиге.
для вышеприведенного конфига нужно прописать так:

Код: Выделить всё

    include fastcgi_params;
    fastcgi_param SCRIPT_NAME $fsn;
или, если других скриптов кроме приложения на Yii нету, то

Код: Выделить всё

fastcgi_param SCRIPT_NAME /index.php;
Аватара пользователя
Йож
Сообщения: 574
Зарегистрирован: 2015.08.26, 03:05

Re: nginx + PHP-FPM - роутинг на несуществующие урлы

Сообщение Йож »

Спасибо, ценная инфа!
Ответить