Все работало до того, как возникли проблемы с Winginx. Когда я отправляю данные с помощью JQuery методом POST, я получаю ошибку 405 (Not Allowed). GET работает отлично.
Когда я запрашиваю данные из / formcheck (это forcmcheck.php и отлично работает сам по себе), я получаю эту ошибку. Я ничего не менял в журналах Nginx, кроме нескольких строк для движка перезаписи.
Вы можете посмотреть логи:
127.0.0.1 - - [07/Jun/2017:15:14:06 +0300] "POST /formcheck HTTP/1.1" 405 575 "http://music-portfolio.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
127.0.0.1 - - [07/Jun/2017:15:16:35 +0300] "POST /formcheck HTTP/1.1" 405 575 "http://music-portfolio.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
127.0.0.1 - - [07/Jun/2017:15:17:32 +0300] "POST /formcheck HTTP/1.1" 405 575 "http://music-portfolio.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
Здесь все нормально, кроме передачи каких-либо данных. Вот конфигурации nginx и виртуального хоста: Nginx.conf: https://www.dropbox.com/s/oh2ifs8oul6jyrl/nginx.conf?dl=0
Vhost conf: https://www.dropbox.com/s/00it5g2npmrhbq2/music-portfolio.com.conf?dl=0
Я не знаю, как и где можно заблокировать POST, но мне нужно, чтобы это было разрешено ... Спасибо за внимание.
Обычно эти сообщения об ошибках вызваны ограничением, которое Nginx не может обслуживать статический контент на POST
запрос. Эта проблема обсуждается и предлагаются обходные пути в статье InValidLogic.com. Обслуживание статического содержимого через POST из Nginx: в этом случае вы можете заменить сообщение об ошибке на error_page 405 =200 $uri;
или создайте прокси для статического контента, конвертируя POST
просьба к GET
.
Однако в этом случае ваш /formcheck
на самом деле является сценарием PHP, а не статическим содержимым, поэтому POST
запросы должны быть разрешены Nginx и есть POST
данные должны быть получены, поэтому преобразование в GET
тоже не вариант.
Кажется у вас есть два location
разделы:
location / {
if ($host ~ ^(www\.)?([a-z0-9\-\.]+)$){
root home/$2/public_html;
access_log logs/$2-access.log main;
}
}
location ~ \.php$ {
if ($host ~ ^(www\.)?([a-z0-9\-\.]+)$){
root home/$2/public_html;
access_log logs/$2-access.log main;
}
if (!-e $document_root$document_uri){return 404;}
fastcgi_pass localhost:9071;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
Как видите, только местоположения, заканчивающиеся на .php
обрабатываются с помощью fastcgi, а все остальное, включая /formcheck
падает в location /
обслуживает только статический контент, вызывая 405
ошибка.