【问题标题】:nginx returns 405 (Method Not Allowed) for PUT or DELETEnginx 为 PUT 或 DELETE 返回 405 (Method Not Allowed)
【发布时间】:2014-04-09 11:31:04
【问题描述】:

我使用 nginx 提供静态页面,但将请求传递给 API 到 Tornado 应用程序,我想处理 GET、POST、PUT 和 DELETE 请求。

GET 和 POST 请求正常,但 PUT 和 DELETE 请求被拒绝并显示“405: Method Not Allowed”

这个问题问的差不多: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 方法吗?

【问题讨论】:

  • 确定不是龙卷风的反应?
  • 非常好的一点 - 我被其他关于 HttpDavModule 的问题所困扰,以至于我没有想到 nginx 在我没有做任何事情的情况下处理请求就很好。一些摆弄表明我的龙卷风设置中的一些代码阻止了调用“放置”和“删除”方法。现在都解决了。谢谢。
  • 这个问题似乎是题外话,因为它是针对webmasters
  • 我将此标记为不清楚,因为该问题与 nginx 有关,但问题与龙卷风有关,并且没有提供有关龙卷风的信息。
  • 我也有同样的问题。我们有一个 laravel 应用程序,它使用 PUT 作为 php API 的一部分。我们正在部署到使用 ngnix 的 laravel forge。但是 nginx 似乎不支持 PUT(或 DELETE),所以你不能在 nginx 上放一个 laravel 应用程序。这是一场灾难。

标签: nginx


【解决方案1】:

你可以在你的配置文件中加入这句话

dav_methods PUT DELETE MKCOL COPY MOVE;

具体详细参考nginx文档http://nginx.org/en/docs/http/ngx_http_dav_module.html

【讨论】:

  • DAV 与原OP的问题无关,所以你的建议并不能解决他的问题。
猜你喜欢
  • 2014-09-03
  • 2018-06-29
  • 2011-05-14
  • 1970-01-01
  • 2015-07-29
  • 2011-09-25
  • 1970-01-01
  • 2021-06-14
  • 2016-12-04
相关资源
最近更新 更多