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
相关产品推荐
相关产品推荐

