在Winginx出现问题之前,一切都奏效了。 当我用POST方法发送数据与Jquery时,我得到405(不允许)错误。 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和虚拟主机的confs: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在哪里可以被阻止,但我需要它被允许… Thx的注意力。
通常这些错误信息是由Nginx无法在POST请求中提供静态内容的限制引起的。 在InValidLogic.com的文章中, 通过POST从Nginx发送服务静态内容 :在这种情况下,您可以用error_page 405 =200 $uri;replace错误消息,并讨论此问题error_page 405 =200 $uri; 或者为静态内容创build代理,将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在内的所有地方都只能放入静态内容,导致405错误。