405 (Não permitido) na solicitação POST

1

Tudo funcionou antes que problemas com o Winginx ocorressem. Quando eu envio dados com o Jquery com o método POST, recebo o erro 405 (Não permitido). GET funciona perfeitamente bem.

Quando eu solicito dados de / formcheck (que é forcmcheck.php e funciona bem por conta própria), recebo este erro. Eu não mudei nada em logs Nginx exceto algumas linhas para reescrever o mecanismo.

Você pode ver os registros:

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"

Aqui está tudo bem, exceto que os dados foram transferidos. Aqui estão o nginx e o host virtual confs: Nginx.conf: link

Vhost conf: link

Eu não sei como ou onde o POST pode ser bloqueado, mas preciso que seja permitido ... Thx por atenção.

    
por Telion 07.06.2017 / 14:33

1 resposta

6

Geralmente, essas mensagens de erro são causadas pela limitação de que o Nginx não pode veicular conteúdo estático em POST request . Esse problema é discutido e as soluções alternativas sugeridas no artigo da InValidLogic.com veiculação do conteúdo estático Via POST do Nginx : nesse caso, você poderia substituir a mensagem de erro por error_page 405 =200 $uri; ou criar um proxy para conteúdo estático, convertendo a solicitação POST para GET .

No entanto, neste caso, seu /formcheck é realmente um script PHP em vez de um conteúdo estático, portanto POST solicitações devem ser permitidas pelo Nginx e há POST dados a serem recebidos, portanto, convertendo para GET isn também é uma opção.

Parece que você tem duas seções 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;
    }

Como você pode ver, apenas os locais que terminam com .php são tratados com fastcgi, enquanto o restante, /formcheck , cai em location / exibindo apenas conteúdo estático, causando o erro 405 .

    
por 07.06.2017 / 15:49

Tags