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
没有区别。