Nginx выдает ошибку 405 Not Allowed, если для доступа к файлам используется запрещенный или неподдерживаемый метод. В большинстве случаев это POST, который в Nginx запрещен для доступа к статическим файлам.
Для решения проблемы можно использовать один из двух подходов.
Обход ограничения
В простейшем случае можно заставить веб-сервер думать, что все хорошо, просто перенаправляя ошибку дальше:
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; # ... }
Передает ошибку 405 как код 200 на нужный адрес.
А если Nginx работает как прокси, скажем, для Apache, то можно схитрить так:
error_page 405 =200 @405; location @405 { root /htdocs; proxy_pass http://localhost:8080; }
Перенаправляет запрос на proxy.
Когда используется FastCGI
Если в Nginx используется модуль FastCGI, то в некоторых случаях веб-сервер может некорректно воспринимать скрипты, которые вызываются методом POST. Для этого запрашиваемый URL разбивается на адрес самого скрипта и запрашиваемых параметров:
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; }
Директива fastcgi_split_path_info определяет формат скрипта и параметры разделения.