将 PUT 放入 nginx 中的静态文件

将 PUT 放入 nginx 中的静态文件

我正在尝试弄清楚如何允许在 nginx 中将 PUT 放到静态文件,put 请求将被代理到 php 脚本。我尝试使用 curl 执行的请求示例如下:

curl -X PUT  -d "tags=abc,def" cp.local/api/Image/myimage.jpg

这会在 nginx 中抛出 405 Not Allowed。其他 URL 也可以,例如:

curl -X PUT  -d "tags=abc,def" cp.local/api/Image/myimage.pdf

我读过论坛主题有人遇到了类似的问题,但是使用的是 POST,但它已经过时了,而且线程中似乎没有真正的解决方案。

相关的 nginx 配置指令是:

location ~* ^/api/.*$ {
    root           /my/path/public;
    fastcgi_param  SCRIPT_FILENAME  /my/path/public/Api.php;
    fastcgi_pass   127.0.0.1:9000;
    include        fastcgi_params;
}

答案1

您除了获取静态文件外什么都做不了。如果您想要 POST、PUT、DELETE 等,则需要确保您有一个处理 URI 的位置块,并且该位置块以允许此类请求的方式处理请求。

例如通过 proxy_passing 传递到 Apache 或通过 fastcgi_passing 传递到 PHP。

使用您提供的配置,理论上应该允许。但是您删除了很多信息,而且很可能您有一个位置块来捕获静态文件。当您处理正则表达式位置时,将使用第一个匹配的位置,因此您需要确保您的 api 位置在任何其他匹配位置之前定义。

答案2

拦截 HTTP 状态 405 并使用脚本处理请求:

error_page 405 = /api/Api.php;

相关内容