使用 mod_proxy 的 Apache 反向代理

使用 mod_proxy 的 Apache 反向代理

0 简介

我正在尝试使用反向代理设置一台服务器,其中主网站托管在端口 80 和 443 上(我们称之为 example.com),而此网站上用于提供 umami 分析的部分托管在端口 3000 上(我们称之为 umami.example.com)。我使用的是 Django 和 Apache(使用 django 项目中提示的 mod_wsgi),并且必须使用 Cloudflare 设置 DNS。

主网站按预期运行,将 http 流量重定向到 https(有关更多信息请参阅 Apache 部分),我试图在 umami.example.com 下添加此部分,但每个请求最终都以主网站给出的 404 错误结束。

目前,我正在尝试使用反向代理使鲜味部分工作(如 Apache 配置的第一部分所示)

############################################################################

1 DNS

DNS 使用 Cloudflare 配置,具有 3 个 A 记录:

  • example.com -> 服务器 IP 地址
  • umami -> 相同的服务器 ip
  • www -> 再次相同的 IP

以及一些 MX 和 TXT。

############################################################################

2 Apache 配置

<VirtualHost _default_:80>
    ServerAdmin [email protected]
    ServerName umami.example.com

    ProxyPass "/" "http://127.0.0.1:3000/"
    ProxyPassReverse "/" "http://127.0.0.1:3000/"
</VirtualHost>


<VirtualHost *:80>
   ServerName example.com
   ServerAlias www.example.com
   Redirect permanent / https://example.com/
</VirtualHost>


<VirtualHost _default_:443>
    ServerAdmin [email protected]
    ServerName example.com
    ServerAlias www.example.com


    Alias /static /mainfolder/static
    DocumentRoot /mainfolder/django-folder

    <Directory /mainfolder/django-folder/static>
        Require all granted
    </Directory>

    <Directory /mainfolder/django-folder/django-app>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

    WSGIDaemonProcess django-folder python-path=/mainfolder/django-folder python-home=/usr/local/env
    WSGIProcessGroup django-folder
    WSGIScriptAlias / /mainfolder/django-folder/django-app/wsgi.py


    Include /etc/letsencrypt/options-ssl-apache.conf
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem

</VirtualHost>

############################################################################

3 我尝试过的方法

  • 绕过 DNS(端口 80)直接连接到 IP 地址没有任何区别。

  • 绕过 DNS(端口 3000)直接连接到 IP 地址即可按预期工作。

此处编辑

  • 在 Apache Config 上交换位置没有什么区别。

  • Apache Config 上的交换位置的工作方式如下:
    • 当反向代理首先出现(配置如发布的那样)时,连接到 80 端口将为分析网站提供服务。
    • 当重定向首先出现(交换)时,连接到 80 端口将重定向到 HTTPS 网站

结束编辑

  • 添加或删除ProxyPreserveHost没有区别。

相关内容