如何在Nginx服务器上允许PUT文件请求?

15

我正在使用一个应用程序,需要将文件通过HTTP协议的PUT方法上传到服务器。我使用的服务器是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请求?

任何提示都会很棒!

4个回答

27

1
如果我不需要创建文件,只需要使用其他的HTTP方法怎么办? - Alexander Pravdin
2
如果您不想让dav_methods处理您的请求,而想使用PUT或DELETE方法,则应确保这些请求不是由index模块匹配的,而是由try_files匹配。例如,在具有PHP的典型设置情况下,您可以尝试:try_files $ uri /index.php $ is_args $ args; - dadasign
4
PUT是HTTP方法,而不是WebDAV方法。 - LtWorf
@LtWorf 不管怎样,如果你想让nginx处理请求,你需要使用HttpDavModule -- 或者将请求转发到另一个后端,例如通过proxy_pass。否则nginx会返回405 Not Allowed。 - fnkr
@fnkr,那么如何将这些请求转发给后端呢?我只知道后端接受 nginx 已经接受的内容,例如 GETPOST... - Gwyneth Llewelyn

2

405不允许的另一个原因是您没有在PUT目标上写入文件的权限。如果您有HttpDavModule并仍然遇到此错误,请确保您已经给予nginx在目标位置写入文件的权限。


0

nginx主要是一个代理和许多其他功能,它与Web服务器有一些共同之处,但并非全部。

您可能想要检查:https://www.nginx.com/resources/wiki/modules/upload/, 最好的方法是拥有一个REST接口,让nginx进行代理、负载均衡、缓冲、TSL等操作。


-1

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接