如何在Nginx中开启PUT和DELETE方法?配置后不生效如何解决?
问题根源
你当前场景是Nginx做反向代理,将请求转发到端口3000的后端服务处理,ngx_http_dav_module是Nginx用于自身处理WebDAV请求、直接操作服务器本地文件的模块,你在配置中添加dav_methods PUT DELETE;后,Nginx会直接拦截PUT、DELETE请求自行处理,不会转发到后端服务,这就是配置不生效的核心原因。
解决方案
移除多余配置
删除location /块中的dav_methods PUT DELETE;行,反向代理场景下不需要开启WebDAV相关配置。补充跨域(CORS)配置
本地无跨域问题,部署到线上后跨域策略会导致浏览器拦截PUT、DELETE非简单请求,需要在Nginx配置中补充跨域头、处理OPTIONS预检请求,修改后的location块配置如下:
location / { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; # 跨域配置 add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods 'GET, POST, PUT, DELETE, OPTIONS'; add_header Access-Control-Allow-Headers '*'; # 处理OPTIONS预检请求直接返回204 if ($request_method = OPTIONS) { return 204; } }
如果你的站点需要严格限制跨域来源,把*替换成你允许的域名即可。
- 生效配置
修改完成后执行以下命令验证配置语法正确、重载Nginx配置生效:
nginx -t systemctl reload nginx
排查建议
如果修改后仍有问题,可以查看Nginx日志确认请求状态:
- 访问日志路径:
/var/log/nginx/access.log - 错误日志路径:
/var/log/nginx/error.log
内容的提问来源于stack exchange,提问作者Anurudh Mhatre
相关产品推荐
相关产品推荐

