Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
nginx为PUT或DELETE返回405(不允许使用方法)_Nginx - Fatal编程技术网

nginx为PUT或DELETE返回405(不允许使用方法)

nginx为PUT或DELETE返回405(不允许使用方法),nginx,Nginx,我使用nginx服务于静态页面,但将请求传递给API,并将其传递给Tornado应用程序,我希望处理GET、POST、PUT和DELETE请求 GET和POST请求可以,但PUT和DELETE请求被拒绝,并显示“405:不允许使用方法” 这个问题问得差不多:但答案并不能解决我的问题,这让我觉得这与我在设置中使用proxy_pass有关 以下是我的nginx服务器配置: upstream TornadoAPI { server 127.0.0.1:8000; } server {

我使用nginx服务于静态页面,但将请求传递给API,并将其传递给Tornado应用程序,我希望处理GET、POST、PUT和DELETE请求

GET和POST请求可以,但PUT和DELETE请求被拒绝,并显示“405:不允许使用方法”

这个问题问得差不多:但答案并不能解决我的问题,这让我觉得这与我在设置中使用proxy_pass有关

以下是我的nginx服务器配置:

upstream TornadoAPI {
        server 127.0.0.1:8000;
}

server {
        listen 80;
        listen [::]:80 default_server ipv6only=on;

        root /usr/share/nginx/html;
        index index.html index.htm;

        # Make site accessible from http://localhost/
        server_name localhost;

        location /<<static url>>/ {
                root /var/www;
                index index.html;
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ /index.html;
                # Uncomment to enable naxsi on this location
                # include /etc/nginx/naxsi.rules
        }

        location /<<API url>>/ {
                dav_methods PUT DELETE;
                dav_access all:r;
                proxy_pass http://TornadoAPI/api/;
        }
}
api{
服务器127.0.0.1:8000;
}
服务器{
听80;
侦听[:]:80默认_服务器ipv6only=on;
root/usr/share/nginx/html;
index.html index.htm;
#使站点可以从http://localhost/
服务器名称localhost;
地点//{
root/var/www;
index.html;
#首先尝试将请求作为文件提供,然后
#作为目录,然后返回显示404。
尝试_文件$uri$uri//index.html;
#取消注释以在此位置启用naxsi
#include/etc/nginx/naxsi.rules
}
地点//{
dav_方法放删除;
dav_访问全部:r;
代理通行证http://TornadoAPI/api/;
}
}
我曾尝试过使用HttpDavModule指令(尽管我认为我的应用程序不符合HttpDav的条件-我无意让用户编写文件),但运气不好。我已经通过检查nginx-V确认了模块的存在

以下是nginx access.log的输出示例:

<<IP address>> - - [06/Mar/2014:16:29:57 +0000] "PUT /<<API url>>/<<resource>> HTTP/1.1" 405 87 "<<ngix server root url>>" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36"
-[06/Mar/2014:16:29:57+0000]“PUT//HTTP/1.1“40587”“”Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebKit/537.36(KHTML,类似壁虎)Chrome/33.0.1750.146 Safari/537.36”

有人能建议我还能做些什么来接受PUT和DELETE方法吗?

您可以在配置文件中添加这句话

dav_方法PUT DELETE MKCOL COPY MOVE


具体详细参考nginx文档

您确定这不是tornado的回复吗?非常好的一点-我被其他问题关于HttpDavModule的讨论抛到了脑后,我没有想到nginx在没有我做任何事情的情况下处理了请求。稍微修改一下就可以看出,tornado设置中的一些代码阻止调用“put”和“delete”方法。现在一切都解决了。谢谢。这个问题似乎偏离了主题,因为它是针对我的。我把这个问题标记为不清楚,因为这个问题是关于nginx的,但问题是关于tornado的,没有关于tornado的信息。我也有同样的问题。我们有一个laravel应用程序,它使用PUT作为php API的一部分。我们正在部署到使用ngnix的laravel forge。但nginx似乎不支持PUT(或DELETE),所以你不能在nginx上安装laravel应用程序。这是一场灾难。DAV与OP的原始问题无关,因此您的建议无法解决他的问题。