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

Django+Apache+WSGI多站点配置异常:访问第二个站点跳转到第一个

Apache2多站点冲突:访问第二个站点被重定向到第一个站点的排查与修复

问题描述

服务器配置两个站点,第一个站点监听80/443端口(带SSL),第二个站点监听8080端口,访问第二个站点时被重定向至第一个站点,无法正常运行。

当前配置信息

第一个站点配置(first_site.com.conf)

GNU nano 5.4                                                  first_site.com.conf                                                           
<VirtualHost first_site.com:80>
    #ServerAdmin admin@soporte.localhost
    ServerName inscripcion.uepbi.com
    #ServerAlias www.first_site.com
    #DocumentRoot /home/sites/first_site
    #DocumentRoot /var/www
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    Alias /favicon.ico /home/sites/first_site/staticfiles/favicon.ico
    Alias /static/ /home/sites/first_site/staticfiles/
    <Directory /home/sites/first_site/staticfiles>
        Require all granted
    </Directory>

    Alias /uploads/ /home/sites/first_site/uploads/
    <Directory /home/sites/first_site/uploads>
        Require all granted
    </Directory>

    <Directory /home/sites/college_system/college_system>
        <Files wsgi.py>
                Require expr %{HTTP_HOST} == "first_site.com"
                Require expr %{HTTP_HOST} == "www.first_site.com"
                Options
        </Files>
    </Directory>

    WSGIDaemonProcess first_site python-path=/home/sites/first_site python-home=/home/sites/first_site_env
    #WSGIPythonHome /home/sites/first_site
    #WSGIPythonPath /home/sites/first_site
    WSGIProcessGroup first_site
    WSGIScriptAlias / /home/sites/first_site/first_site/wsgi.py process-group=first_site application-group=%{GLOBAL}
    Redirect "/""https://first_site.com/
RewriteEngine on
RewriteCond %{SERVER_NAME} =www.first_site.com [OR]
RewriteCond %{SERVER_NAME} =first_site.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
#RewriteCond %{SERVER_NAME} !on [OR]
#RewriteCond %{SERVER_NAME} ^www\. [NC]
#RewriteRule ^ https://first_site.com%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

第二个站点配置

<VirtualHost second_site.com:8080>
    #ServerAdmin admin@soporte.localhost
    ServerName second_site.com
    #ServerAlias www.second_site.com
    #DocumentRoot /home/sites/second_site
    ErrorLog ${APACHE_LOG_DIR}/error_demo_college.log
    CustomLog ${APACHE_LOG_DIR}/access_demo_college.log combined
    Alias /favicon.ico /home/sites/second_site/staticfiles/favicon.ico
    Alias /static/ /home/sites/second_site/staticfiles/
    <Directory /home/sites/second_site/staticfiles>
        Require all granted
    </Directory>
    <Directory /home/sites/second_site/static>
        Require all granted
    </Directory>

    Alias /uploads/ /home/sites/second_site/uploads/
    <Directory /home/sites/second_site/uploads>
        Require all granted
    </Directory>

    <Directory /home/sites/second_site/second_site>
        <Files wsgi.py>
                Require expr %{HTTP_HOST} == "second_site.com"
                Require expr %{HTTP_HOST} == "www.second_site.com"
                Options
        </Files>
    </Directory>

    WSGIDaemonProcess second_site python-path=/home/sites/second_site python-home=/home/sites/second_site_env
    WSGIProcessGroup second_site
    WSGIScriptAlias / /home/sites/second_site/second_site/wsgi.py process-group=second_site application-group=%{GLOBAL}
    #Redirect permanent "/""http://second_site.com/
#RewriteEngine on
#RewriteCond %{SERVER_NAME} =www.second_site.com [OR]
#RewriteCond %{SERVER_NAME} =second_site.com
#RewriteCond %{SERVER_NAME} !on [OR]
#RewriteCond %{SERVER_NAME} ^www\. [NC]
#RewriteRule ^ https://second_site.com%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

第一个站点SSL配置(first_site.com-ssl.conf)

GNU nano 5.4                                               first_site.com-ssl.conf                                                         
<IfModule mod_ssl.c>
<VirtualHost first_site.com:443>
    #ServerAdmin admin@soporte.localhost
    ServerName first_site.com
    #ServerAlias www.first_site.com
    #DocumentRoot /home/sites/first_site
    #DocumentRoot /var/www
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    Alias /favicon.ico /home/sites/first_site/staticfiles/favicon.ico
    Alias /static/ /home/sites/first_site/staticfiles/
    <Directory /home/sites/first_site/staticfiles>
        Require all granted
    </Directory>

    Alias /uploads/ /home/sites/first_site/uploads/
    <Directory /home/sites/first_site/uploads>
        Require all granted
    </Directory>

    <Directory /home/sites/first_site/first_site>
        <Files wsgi.py>
            Require expr %{HTTP_HOST} == "first_site.com"
            Require expr %{HTTP_HOST} == "www.first_site.com"
            Options
        </Files>
    </Directory>

    WSGIDaemonProcess first_site2 python-path=/home/sites/first_site python-home=/home/sites/first_site_env
    #WSGIPythonHome /home/sites/first_site_env
    #WSGIPythonPath /home/sites/first_site
    WSGIProcessGroup first_site2
    WSGIScriptAlias / /home/sites/first_site/first_site/wsgi.py process-group=first_site
    #Redirect "/""https://first_site.com/

Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/first_site.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/first_site.com/privkey.pem
</VirtualHost>
</IfModule>

ports.conf配置

# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf

Listen 80
Listen 8080
<IfModule ssl_module>
        Listen 443
</IfModule>

<IfModule mod_gnutls.c>
        Listen 443
</IfModule>

1. vim: syntax=apache ts=4 sw=4 sts=4 sr noet

排查与修复步骤

1. 修正VirtualHost监听地址

所有<VirtualHost>指令应监听全局IP的对应端口,而非绑定具体域名:

  • 第一个站点80端口:将<VirtualHost first_site.com:80>改为<VirtualHost *:80>
  • 第一个站点SSL端口:将<VirtualHost first_site.com:443>改为<VirtualHost *:443>
  • 第二个站点:将<VirtualHost second_site.com:8080>改为<VirtualHost *:8080>

2. 修复第一个站点80端口的语法错误

删除未闭合的Redirect指令:

# 移除这条错误指令
Redirect "/""https://first_site.com/

保留下方的Rewrite规则即可实现HTTP到HTTPS的重定向。

3. 统一WSGI进程组配置

第一个站点SSL配置中,WSGIProcessGroup与WSGIScriptAlias的process-group需保持一致:

# 原配置
WSGIProcessGroup first_site2
WSGIScriptAlias / /home/sites/first_site/first_site/wsgi.py process-group=first_site

# 修正后
WSGIProcessGroup first_site
WSGIScriptAlias / /home/sites/first_site/first_site/wsgi.py process-group=first_site

4. 验证配置并重启服务

检查Apache配置语法:

apache2ctl configtest

输出Syntax OK后重启服务:

systemctl restart apache2

5. 正确访问第二个站点

访问第二个站点时必须指定8080端口:http://second_site.com:8080,直接访问http://second_site.com会走80端口,被第一个站点的重定向规则捕获。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 05:57:05