Nginx переписать на symfony2 не работает
Я новичок в nginx, и он переписывает команды, и мне действительно нужна помощь с этим. Я пытался решить это весь день, но ничего..
Если пользователь дает этот URL:
someurl.com/sub/1.0/healthcheck
Я хотел бы переписать его так, чтобы он указывал на файл проекта Symfonys здесь:
/var/www/sub/1.0/web/app_dev.php
И "проверка здоровья" в URL идет для Symfony.
Но нет. Что-то здесь не так. Кажется, что он находит Symfony, но с URL-адресом что-то не так, поскольку он всегда возвращает:
Маршрут не найден
Даже если я пропущу проверку здоровья в URL, она все равно выдаст ту же ошибку. (есть индекс-action с "/" в качестве маршрута.)
Вот текущая конфигурация Nginx:
server {
server_name localhost;
root /var/www/sub/1.0/web;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
location / {
root /var/www/html/;
index index.html;
}
location /sub/1.0/ {
index app_dev.php;
rewrite ^/sub/1.0/ /app_dev.php last;
}
location ~ (app|app_dev).php {
include fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
}
}
1 ответ
Я понял это. Проблема заключалась в том, что Symfony принимает uri запроса, который не был затронут переписыванием, поскольку это касалось fastcgi. Я добавил fastcgi_param REQUEST_URI $uri?$args;
и тадаа! Оно работает!
Вот фиксированный конфиг (без лишних строк, таких как корневая папка '/'):
server {
root /var/www/sub/1.0/web;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
# If user writes the app_xxx.php into the url, remove it:
rewrite ^/app_dev\.php/?(.*)$ /$1 permanent;
location /sub/1.0/ {
index app_dev.php;
rewrite ^/sub/1.0/(.*)$ /app_dev.php/$1 last;
return 403; # If the rewrite was not succesfull, return error.
}
location ~ (app|app_dev).php {
include fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param REQUEST_URI $uri?$args;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
}
}