【问题标题】:How do I allow a PUT file request on Nginx server?如何在 Nginx 服务器上允许 PUT 文件请求?
【发布时间】:2013-05-30 12:29:45
【问题描述】:

我正在使用需要PUT HTTP 服务器上的文件的应用程序。我正在使用 Nginx 作为服务器,但返回了 405 Not Allowed 错误。以下是使用 cURL 进行测试的示例:

curl -X PUT \
-H 'Content-Type: application/x-mpegurl' \
-d /Volumes/Extra/playlist.m3u8 http://xyz.com

以及我从 Nginx 得到的结果:

<html>
<head><title>405 Not Allowed</title></head>
<body bgcolor="white">
<center><h1>405 Not Allowed</h1></center>
<hr><center>nginx/1.1.19</center>
</body>
</html>

我需要做什么才能允许PUT

任何线索都会很棒!

【问题讨论】:

    标签: http nginx put


    【解决方案1】:

    要添加 HTTP 和 WebDAV 方法,如 PUT、DELETE、MKCOL、COPY 和 MOVE,您需要使用 HttpDavModule (./configure --with-http_dav_module) 编译 nginx。先检查nginx -V,也许你已经有了HttpDavModule (I installed nginx from the Debian repository and I already have the module)。

    然后像这样更改您的 nginx-config:

    location / {
        root     /var/www;
        dav_methods  PUT;
    }
    

    您可以通过nginx docs entry for the HttpDavModule获取更多信息。

    【讨论】:

    • 如果我不需要创建文件,只需要使用额外的 HTTP 方法怎么办?
    • 如果您不想让 dav_methods 处理您的请求并希望使用 PUT 或 DELETE 方法,则应确保这些请求不是由 index 模块匹配,而是由 try_files 匹配,即:try_files $uri /index.php$is_args$args;在使用 PHP 进行典型设置的情况下
    • PUT 是一种 HTTP 方法,而不是 webdav 方法。
    • @LtWorf 没关系,如果您希望 nginx 处理您需要使用 HttpDavModule 的请求 - 或将请求转发到另一个后端,例如通过proxy_pass。否则 nginx 将返回 405 Not Allowed。
    • @fnkr 以及如何将此类请求转发到后端?我只知道后端接受nginx 已经接受的内容,即GETPOST...
    【解决方案2】:

    405 Not Allowed 的另一个原因是您没有权限在您正在PUTing 的目标上写入文件。如果您有 HttpDavModule 并且仍然收到此错误,请确保您已在 PUTing 文件的位置授予 nginx 写入权限。

    【讨论】:

      【解决方案3】:

      添加这个块解决了我在 Laravel 应用程序中的问题。

      location / {
           try_files $uri $uri/ /index.php?$query_string;
      }
      

      【讨论】:

        猜你喜欢
        • 2017-01-02
        • 1970-01-01
        • 2018-02-19
        • 2017-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多