Plesk环境下如何将域名80、443端口请求转发到Docker容器?
解决Plesk域名80/443端口全量转发到Docker容器的方案
前提准备
- 确保
example.com已经在Plesk面板中添加为站点,且域名解析指向当前服务器公网IP - 确认Docker容器的1080、10443端口在本地可正常访问,即
curl http://127.0.0.1:1080、curl https://127.0.0.1:10443能正常返回站点内容
配置步骤(推荐用Plesk托管SSL证书方案,无需维护Docker内证书)
- 进入Plesk面板,打开
example.com站点的Apache & Nginx设置页面 - 拉到页面底部的额外的Nginx指令输入框,粘贴以下配置:
location / { # 所有请求转发到Docker的1080端口,Plesk侧自动处理SSL加解密 proxy_pass http://127.0.0.1:1080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 适配WebSocket场景,不需要可以删除 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; }
- 取消勾选页面中「由Nginx直接提供静态文件」的选项,避免Nginx优先处理静态资源不走转发规则
- 如果你需要自动将HTTP请求跳转HTTPS,勾选页面中的「将所有HTTP连接重定向到HTTPS」即可,Plesk会自动处理跳转逻辑
- 保存配置,等待10秒左右让Plesk重载Web服务,清理浏览器缓存后访问站点即可验证
若需要保留Docker内的HTTPS配置,转发443到10443端口
将上面的额外Nginx指令替换为以下内容即可:
if ($server_port = 80) { set $proxy_port 1080; } if ($server_port = 443) { set $proxy_port 10443; } location / { proxy_pass http://127.0.0.1:$proxy_port; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }
原Proxy Rules不生效的原因
Plesk自带的Proxy Rules功能限制同一路径仅能配置1条规则,且规则优先级低于站点默认的Web服务配置,仅适合路径拆分转发的场景,不支持全站点多端口转发需求,因此直接配置不生效。
内容的提问来源于stack exchange,提问作者fguillen
相关产品推荐
相关产品推荐

