You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker栈中Yaws的redirect规则为何无法直接转发请求到内部容器?

问题原因

Yaws的<redirect>配置的作用是返回3xx重定向响应给客户端浏览器,浏览器会主动向重定向目标地址发起新请求,和Nginx的proxy_pass服务端内部反向转发逻辑完全不同。你配置的重定向目标http://wmy是Docker内部网络的域名,公网环境的浏览器无法解析该域名,因此出现访问报错。

实现方案

推荐直接使用Yaws原生的反向代理配置实现需求,无需自己开发appmod转发逻辑,性能和稳定性都优于手动实现的透传代码:
将三个域名分别拆分到独立的server块配置,yaws.conf示例如下:

# 主域名domain.tld,保留appmod处理逻辑
<server domain.tld>
    port = 80
    listen = 0.0.0.0
    docroot = /your/docroot/path
    appmods = </, your_appmod_module exclude_paths plugins img images styles scripts>
</server>

# 二级域名my.domain.tld,反向代理到wmy容器
<server my.domain.tld>
    port = 80
    listen = 0.0.0.0
    revproxy = / http://wmy/
    # 可选:传递客户端请求头到上游容器
    revproxy_header = Host $host
    revproxy_header = X-Real-IP $remote_addr
    revproxy_header = X-Forwarded-For $proxy_add_x_forwarded_for
</server>

# 二级域名sm.domain.tld,反向代理到wsm容器
<server sm.domain.tld>
    port = 80
    listen = 0.0.0.0
    revproxy = / http://wsm/
    revproxy_header = Host $host
    revproxy_header = X-Real-IP $remote_addr
    revproxy_header = X-Forwarded-For $proxy_add_x_forwarded_for
</server>

如果你的业务场景确实需要保留自定义的请求判断逻辑(比如特殊路径转发到adm容器的需求),可以将三个域名的server块拆分后,仅给主域名绑定appmod,另外两个域名根据实际需求选择原生revproxy或者轻量专用appmod即可,无需每次请求都判断Host字段,逻辑更清晰,性能也更好。

内容的提问来源于stack exchange,提问作者kklepper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 15:48:00