Magento2保存产品及目录索引出现405 Not Allowed错误求解
问题根因
你遇到的405错误是Magento触发缓存清除时发送的PURGE请求被拒绝导致的:
从debug日志可见,Magento保存产品时会向http://www.example.us:80/发送缓存失效请求,而当前环境80端口由Varnish监听,Varnish默认未授权本机发起的PURGE请求,直接返回405错误,进而导致产品保存、索引重建操作失败。
修复步骤
- 第一步:配置Varnish允许本机PURGE请求
编辑Varnish配置文件(通常为/etc/varnish/default.vcl),在对应配置段添加授权规则:
# 配置允许清除缓存的IP白名单 acl purge { "127.0.0.1"; "localhost"; } sub vcl_recv { # 校验PURGE请求权限 if (req.method == "PURGE") { if (!client.ip ~ purge) { return (synth(405, "Not allowed")); } return (purge); } # 原有其他配置保持不变 }
修改完成后重启Varnish服务生效:systemctl restart varnish
- 第二步:修正Magento基础URL与代理配置
登录Magento后台进入「商店 > 配置 > 通用 > Web」,统一配置HTTPS协议:- 不安全基础URL:
https://www.example.us/ - 安全基础URL:
https://www.example.us/ - 「前端使用安全URL」「管理端使用安全URL」均设为是
也可以直接通过命令行完成配置:
- 不安全基础URL:
bin/magento config:set web/unsecure/base_url https://www.example.us/ bin/magento config:set web/secure/base_url https://www.example.us/ bin/magento config:set web/secure/use_in_frontend 1 bin/magento config:set web/secure/use_in_adminhtml 1 bin/magento config:set web/secure/offloader_header X-Forwarded-Proto
配置完成后清空Magento缓存:bin/magento cache:flush
- 第三步:清理Nginx冗余配置
你当前443端口的location配置中存在和反向代理无关的FastCGI参数,删除以下两行避免配置混淆即可:
fastcgi_buffer_size 32k; fastcgi_buffers 4 32k;
修改完成后重载Nginx生效:nginx -s reload
内容的提问来源于stack exchange,提问作者Cary Grant
相关产品推荐
相关产品推荐

