Thank you for reading this post, don't forget to subscribe!
Nginx выдает ошибку 405 Not Allowed, если для доступа к файлам используется запрещенный или неподдерживаемый метод. В большинстве случаев это POST, который в Nginx запрещен для доступа к статическим файлам.
Для решения проблемы можно использовать один из двух подходов.
Обход ограничения
В простейшем случае можно заставить веб-сервер думать, что все хорошо, просто перенаправляя ошибку дальше:
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } error_page 404 /404.html; error_page 403 /403.html; error_page 405 =200 $uri; # … } |
[/codesyntax]
Передает ошибку 405 как код 200 на нужный адрес
А если Nginx работает как прокси, скажем, для Apache, то можно схитрить так:
[codesyntax lang="php"]
1 2 3 4 5 6 |
error_page 405 =200 @405; location @405 { root /htdocs; proxy_pass http://localhost:8080; } |
[/codesyntax]
Перенаправляет запрос на proxy
Когда используется FastCGI
Если в Nginx используется модуль FastCGI, то в некоторых случаях веб-сервер может некорректно воспринимать скрипты, которые вызываются методом POST. Для этого запрашиваемый URL разбивается на адрес самого скрипта и запрашиваемых параметров:
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 |
location ~\.php(.*) { fastcgi_pass 127.0.0.1:9000; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include /etc/nginx/fastcgi_params; } |
[/codesyntax]
Директива fastcgi_split_path_info определяет формат скрипта и параметры разделения