Jay 的意思是,你需要使用配置的主机名(在你的容器 .yml 定义中为 DISCOURSE_HOSTNAME),而不是任何碰巧解析到同一 IP 地址的主机名。
这是故意的,这样你就不能轻易地从任何地方反向代理一个公共实例,并且只接受配置的主机名:
$ curl -I https://try.discourse.org/about.json
HTTP/2 200
server: nginx
date: Mon, 15 May 2023 16:25:05 GMT
content-type: application/json; charset=utf-8
[...]
# The following is equivalent to creating a DNS record at
# try.somebogusreverseproxy.com pointing to the same IP address as try.discourse.org,
# and then requesting https://try.somebogusreverseproxy.com/about.json
$ curl -H 'Host: try.somebogusreverseproxy.com' -I https://try.discourse.org/about.json
HTTP/2 404
cache-control: no-cache
content-length: 1427
content-type: text/html
cdck-proxy-id: app-router-tiehunter02.sea1
cdck-proxy-id: app-balancer-tieinterceptor1b.sea1
反之,如果你尝试这样做:
curl -H 'Host: YOUR_CONFIGURED_HOSTNAME' -I https://discourse_app/metrics
它应该可以工作,但这是一种 hack。预期是你将根据需要设置 DNS,以便可以透明地通过配置的主机名访问 Discourse:
curl -I https://YOUR_CONFIGURED_HOSTNAME/metrics
如何做到这一点很大程度上取决于你的需求,但最简单的选择是在 HTTP 请求发起的源头在 /etc/hosts 中设置一个别名。