我想弄清楚如何让PUT到Nginx中的静态文件,放置请求将被代理到一个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 ,其中有人有类似的问题,但与POST,但它已经过时,似乎没有一个真正的修复线程。
相关的nginxconfiguration指令是:
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; }
除了获取一个静态文件,你什么也做不了。 如果你想POST,PUT,DELETE等,你需要确保你有一个位置块处理的URI,这个位置块处理请求的方式,允许这样的请求。
例如通过proxy_passing到Apache或fastcgi_passing到PHP。
用你提供的configuration,理论上应该允许。 但是你删除了很多信息,很可能你有一个位置块来捕捉静态文件。 当你处理正则expression式的位置时,将会使用第一个匹配的位置,所以你需要确保你的API位置是在任何其他匹配位置之前定义的。
拦截HTTP状态405并用脚本处理请求:
error_page 405 = /api/Api.php;