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

如何配置Phoenix应用结合Nginx反向代理支持多域名访问?

配置Phoenix应用与Nginx支持多域名访问

要让单实例Phoenix应用处理多个域名的请求,需要分别调整Nginx反向代理配置和Phoenix应用自身配置,具体步骤如下:

一、修改Nginx配置

  1. 更新server块的域名匹配规则
    找到你的Phoenix应用对应的Nginx server配置块,将原有的单个server_name替换为所有需要支持的域名(包括www前缀,若有需求):

    server {
        listen 80;
        listen [::]:80;
        server_name domain1.com www.domain1.com domain2.com www.domain2.com;
    
        # 启用HTTPS的场景,需补充SSL配置
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        ssl_certificate /path/to/fullchain.pem;
        ssl_certificate_key /path/to/privkey.pem;
    
        # 核心配置:传递真实请求的Host头给Phoenix
        location / {
            proxy_pass http://localhost:4000; # 指向Phoenix实例的运行地址
            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;
        }
    }
    

    若需要分开记录不同域名的日志,也可以复制多个server块,每个块对应一个域名,但所有块的proxy_pass都指向同一个Phoenix实例。

  2. 更新SSL证书(启用HTTPS时)
    如果使用Let's Encrypt生成证书,需重新申请包含所有域名的多域名证书:

    certbot certonly --nginx -d domain1.com -d www.domain1.com -d domain2.com -d www.domain2.com
    

    确保Nginx配置中的ssl_certificate和ssl_certificate_key指向新生成的证书文件。

二、调整Phoenix应用配置

  1. 允许多个域名的Host请求
    在Phoenix的生产环境配置文件(config/prod.exs)中,找到Endpoint配置项,修改check_origin参数,指定所有允许的域名(生产环境不建议直接设为false,避免安全风险):

    config :my_app, MyAppWeb.Endpoint,
        url: [scheme: "https", port: 443], # 移除硬编码的host,让应用动态获取请求域名
        check_origin: [
            "//domain1.com",
            "//www.domain1.com",
            "//domain2.com",
            "//www.domain2.com"
        ],
        # 保留其他原有配置...
    

    若为测试或完全信任的场景,可临时设置check_origin: false允许任意域名访问。

  2. 确保URL生成适配请求域名
    移除Endpoint配置中硬编码的host值,这样Phoenix路由助手生成URL时会自动使用当前请求的Host,而非固定域名:

    # 错误示例:硬编码单个域名
    # url: [host: "domain1.com", scheme: "https", port: 443]
    
    # 正确配置:动态匹配请求Host
    url: [scheme: "https", port: 443]
    
  3. 重启Phoenix应用
    配置修改后,重启应用使配置生效:

    # 假设使用systemd管理应用
    sudo systemctl restart my_app
    

三、验证配置

  1. 重新加载Nginx配置:
    sudo nginx -s reload
    
  2. 分别访问每个域名,确认应用能正常响应,且页面内生成的URL与访问域名一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:42:53