在 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"
Run Code Online (Sandbox Code Playgroud)
这里一切正常,除了传输了任何数据。
我不知道如何或在何处阻止 POST,但我需要允许它...
通常这些错误消息是由Nginx 无法根据POST请求提供静态内容的限制引起的。InValidLogic.com 的文章通过来自 Nginx 的 POST 提供静态内容对此问题进行了讨论并提出了解决方法:在这种情况下,您可以使用error_page 405 =200 $uri;静态内容替换错误消息或为静态内容创建代理,将POST请求转换为GET.
但是,在这种情况下,您/formcheck实际上是一个 PHP 脚本而不是静态内容,因此POSTNginx 应该允许请求并且有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;
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,只有结束位置.php与FastCGI的处理,而其他一切,包括/formcheck落入location /服务只为静态内容,从而导致405错误。
| 归档时间: |
|
| 查看次数: |
39312 次 |
| 最近记录: |