Verdaccio搭配Nginx配置HTTPS反代时出现连接拒绝、混合内容报错
问题根因
所有报错本质是两个配置缺失导致的:
- Verdaccio未配置子路径前缀,不知道自身服务挂载在
/verdaccio/路径下,生成的资源、接口路径拼接错误 - Nginx反向代理未传递原始请求协议头,导致Verdaccio始终认为自身服务在HTTP协议下,返回的所有链接均为
http://开头,触发混合内容拦截、CSP规则拦截
官方默认反代配置仅适用于Verdaccio部署在域名根目录的场景,直接套用到子路径部署场景必然出现路径匹配错误。
解决步骤
1. 修改Verdaccio配置
找到Verdaccio的配置文件config.yaml(Docker部署时一般为挂载到容器内/verdaccio/conf/config.yaml的宿主机文件),新增如下配置,指定服务前缀:
url_prefix: /verdaccio/
注意配置值末尾的斜杠不能省略,否则会出现路径拼接错误。
2. 替换Nginx反向代理配置
删除原有错误的Verdaccio反代规则,替换为如下配置:
location /verdaccio/ { proxy_pass http://127.0.0.1:6666/verdaccio/; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 关键:传递原始请求协议,告知后端前端使用HTTPS proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Prefix /verdaccio/; proxy_redirect off; # 可选:强制升级页面内HTTP请求为HTTPS,不需要可删除 add_header Content-Security-Policy "upgrade-insecure-requests" always; }
注意proxy_pass末尾必须携带/verdaccio/路径,和Verdaccio内配置的url_prefix保持一致,否则会出现路径转发错误。
3. 重载服务生效
- 重启Verdaccio容器加载新配置:
docker restart <你的verdaccio容器名称> - 验证Nginx配置无语法错误后重载:
nginx -t && nginx -s reload
4. 验证效果
清空浏览器缓存(或使用无痕模式)访问https://my.site/verdaccio/即可正常加载包列表,不会再出现CSP、混合内容拦截报错。
原有配置错误说明
- 第一版自定义配置:缺失
X-Forwarded-Proto协议头,且proxy_pass路径和Verdaccio实际服务路径不匹配,导致接口请求地址错误、协议错误,触发CSP拦截、包列表加载失败 - 官方默认配置:面向根路径部署场景设计,未适配子路径部署的路径规则,同时缺失协议头传递,导致静态资源路径404、混合内容拦截
内容的提问来源于stack exchange,提问作者Tsunani
相关产品推荐
相关产品推荐

