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

mlnl4t2r  于 2023-06-28  发布在  Nginx
关注(0)|答案(1)|浏览(479)

我使用nginx来提供静态页面,但将请求传递给一个API到一个Tornado应用程序,我想处理GET,POST,PUT和DELETE请求。
GET和POST请求可以,但是PUT和DELETE请求会被拒绝,并显示“405:不允许的方法”
这个问题问的是同样的问题:How do I allow a PUT file request on Nginx server?但答案并没有解决我的问题,这让我认为这与我在设置中使用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/;
        }
}

我尝试过使用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"

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

8wtpewkr

8wtpewkr1#

您可以在配置文件中添加这句话
dav_methods PUT DELETE MKCOL COPY MOVE;
具体详细参考nginx文档http://nginx.org/en/docs/http/ngx_http_dav_module.html

相关问题