请教下 Apache2 代理二级域名的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
CamelName
V2EX    Apache

请教下 Apache2 代理二级域名的问题

  •  
  •   CamelName 2024-10-06 19:44:33 +08:00 1339 次点击
    这是一个创建于 415 天前的主题,其中的信息可能已经有所发展或是发生改变。

    主机上有两个 web 服务,分别占用 4000 端口和 3000 端口,基于域名+端口可成功访问

    希望实现子域名访问对应端口,如下:

    sub1.domain.com -- ip:3000

    sub2.domain.com -- ip:4000

    添加域名解析

    在域名解析供应商处完成如下配置

    20241006-1910-Fig-1

    Apache2 反向代理配置

    参考以下步骤,在服务器上完成 apache2 反向代理配置子

    在 Apache 中,你可以使用mod_proxy模块来设置反向代理,从而隐藏后端服务的真实端口号。通过这种方式,用户访问子域名时就像访问普通的 HTTP 或 HTTPS 网站一样,而不会看到后端服务运行的具体端口。

    以下是基于 Apache 完成反代配置的步骤:

    1. 确保安装了 Apache 和必要的模块: 确保你的 Apache 服务器已经安装了mod_proxymod_proxy_http等模块。如果没有安装,可以通过以下命令安装(以 Debian/Ubuntu 系统为例):

      sudo a2enmod proxy sudo a2enmod proxy_http 

      安装完成后需要重启 Apache 服务:

      sudo systemctl restart apache2 
    2. 配置虚拟主机: 在 Apache 的配置文件目录下(通常是/etc/apache2/sites-available/),创建一个新的虚拟主机配置文件,或者编辑现有的配置文件。假设你想要为子域名service.example.com配置反向代理,并且该子域名将指向本地机器上运行的一个服务,例如运行在 3000 端口上的 Web 应用。

    3. 添加反向代理配置: 编辑配置文件并添加如下内容:

      <VirtualHost *:80> ServerName service.example.com # 可选:重定向所有请求到 HTTPS Redirect permanent / https://service.example.com/ </VirtualHost> <IfModule mod_ssl.c> <VirtualHost *:443> ServerName service.example.com # SSL 证书配置 SSLEngine on SSLCertificateFile /path/to/certificate.crt SSLCertificateKeyFile /path/to/private.key # 如果有中间证书 SSLCertificateChainFile /path/to/chain.pem # 开启日志记录 ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined # 反向代理配置 ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass / http://localhost:3000/ ProxyPassReverse / http://localhost:3000/ </VirtualHost> </IfModule> 

      这个配置做了几件事:

      • 设置了一个监听 80 端口的虚拟主机,它会把所有请求永久重定向到 HTTPS 。
      • 设置了一个监听 443 端口的安全虚拟主机,用于处理加密连接。
      • 配置了 SSL 证书。
      • 启用了反向代理,并指定了后端服务的地址(这里假设是同一台机器上的 8080 端口)。
    4. 启用站点并重启 Apache: 保存更改后的配置文件,然后启用这个站点配置:

      sudo a2ensite your-config-file.conf sudo systemctl reload apache2 
    5. 测试配置: 使用浏览器或其他工具(如 curl )访问http://service.example.com,应该会被自动重定向到https://service.example.com,并且最终可以看到运行在 8080 端口上的服务内容。

    问题

    完成配置后,访问http://sub1.example.com ,无法访问,提示 502

    请教

    1. 上述配置方法可能是哪里出错了?请有实操经验的大佬指导下

    2. 除了上面这个方法,有没有其他方法?(已尝试宝塔面板)

    第 1 条附言    2024-10-07 09:30:16 +08:00

    可能是背景交代不全,补充说明下,服务器端的web服务是docker起的,架构如下


    说明

    • 主域名访问80端口,正常访问
    • 访问子域名返回502,服务端curl localhost:3000 可正常访问,但curl sub1.example.com 返回无法解析
    • 查看log,子域名.log 为空,全局日志没有子域名信息

    猜想

    • 会不会是DNS域名解析配置的问题?
    9 条回复    2024-10-07 09:42:48 +08:00
    pgup
        1
    pgup  
       2024-10-06 21:12:31 +08:00
    想知道配置文件中『 ProxyPass 』和『 ProxyPassReverse 』后面配置的内容是什么。这个地方比较容易出错,可能误以为 /sub1/ http://localhost:8080/ 对应 https://sub1.example.com ,但实际上对应 https://example/sub1.com
    CamelName
        2
    CamelName  
    OP
       2024-10-06 21:49:56 +08:00
    @pgup

    感谢答复,以 sub1 为例(对应端口 3000 ),配置文件中的两个参数是如下配置:

    ProxyPass / http://localhost:3000/

    ProxyPassReverse / http://localhost:3000/
    z7356995
        3
    z7356995  
       2024-10-06 21:55:20 +08:00 via Android
    你要查看 log
    CamelName
        4
    CamelName  
    OP
       2024-10-06 21:57:05 +08:00
    @pgup

    完整参数如下:


    ```

    <VirtualHost *:80>
    ServerName sub1.example.com

    # 反向代理配置
    ProxyRequests Off
    <Proxy *>
    Order deny,allow
    Allow from all
    </Proxy>

    # 设置后端服务地址
    ProxyPass / http://localhost:3000/
    ProxyPassReverse / http://localhost:3000/

    # 日志记录
    ErrorLog ${APACHE_LOG_DIR}/sub1.example.com_error.log
    CustomLog ${APACHE_LOG_DIR}/sub1.example.com_access.log combined
    </VirtualHost>

    ```
    jucelin
        5
    jucelin  
       2024-10-07 08:29:00 +08:00
    可以测试下 http://localhost:3000/ 能不能访问。
    再分别尝试
    http://127.0.0.1:3000/
    http://内网 IP:3000/
    SenLief
        6
    SenLief  
       2024-10-07 08:31:10 +08:00
    看一下日志吧,502 有些是后端应用的问题,我之前就是后端挂了不知道出现了 502
    CamelName
        7
    CamelName  
    OP
       2024-10-07 08:57:38 +08:00
    CamelName
        8
    CamelName  
    OP
       2024-10-07 09:31:28 +08:00
    @jucelin @SenLief

    感谢答复,补充说明了下背景,请再看看
    CamelName
        9
    CamelName  
    OP
       2024-10-07 09:42:48 +08:00
    结帖,问题还是,DNS 子域名配置的问题,参考下图配置,就能成功访问了。

    ![success]( https://tuchuang-wangpeng.oss-cn-hangzhou.aliyuncs.com/tuchuang-wangpeng/20241007094217.png)
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4304 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 00:13 PVG 08:13 LAX 16:13 JFK 19:13
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86