Назад | Перейти на главную страницу

405 (не разрешено) по запросу POST

Все работало до того, как возникли проблемы с 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 ошибка.