django - Apache,mod-wsgi:项目提供任何 URL,ServerName 被忽略
问题描述
我正在 Ubuntu 20 上设置一个 Django 项目和 Apache。下面的设置正确显示了 Django 项目,但是任何指向服务器 IP 地址的 URL 都在这个项目中提供。我显然需要将此限制在我的特定网站 mysite.com。服务器名称被忽略。
我看过其他问题/答案。但是,他们通常会提到 httpd.conf,它在 Apache 中不再使用。或者,没有公认的答案。或者,它与我的设置无关。另外,有人告诉我不要碰apache2.conf。这是一个全新的安装实例,所以没有奇怪的东西。
我最终需要在同一台服务器上提供多个站点。
安装 Apache mod-wsgi:
sudo apt install apache2 apache2-utils ssl-cert libapache2-mod-wsgi
sudo a2enmod rewrite
sudo systemctl restart apache2
设置 .conf 文件并激活它:
Copy mysite.com.conf to /etc/apache2/sites-available
sudo a2ensite mysite.com.conf
sudo a2dissite 000-default.conf
sudo systemctl reload apache2
sudo systemctl restart apache2
mysite.com.conf:
<VirtualHost *:80>
WSGIApplicationGroup %{GLOBAL}
WSGIDaemonProcess test_project_ns processes=1 threads=10 python-path=/home/ubuntu/test_project python-home=/home/ubuntu/test_project/test_env
WSGIProcessGroup test_project_ns
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ServerName mysite.com
ServerAlias www.mysite.com
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /home/ubuntu/test_project/test_ui>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIScriptAlias / /home/ubuntu/test_project/test_ui/wsgi.py
</VirtualHost>
结果:
mysite.com 正确地为 Django 项目提供服务,但任何其他指向服务器的网站也是如此。
apache2ctl -S 的输出:
VirtualHost configuration:
*:80 mysite.com (/etc/apache2/sites-enabled/mysite.com.conf:1)
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex watchdog-callback: using_defaults
Mutex rewrite-map: using_defaults
Mutex default: dir="/var/run/apache2/" mechanism=default
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33 not_used
Group: name="www-data" id=33 not_used
解决方案
因此,如果 apache 没有找到匹配的 URL,它会使用第一个虚拟主机,而不考虑 ServerName。因此,我在真实主机之前添加了一个阻塞虚拟主机。现在,所有与 ServerName 或 ServerAlias 不匹配的站点都会显示标准禁止消息。
这也适用于多个 site.com.conf 文件。我将阻塞虚拟主机添加到每个文件的顶部,因此当有多个文件时,我不必担心哪个虚拟主机是“第一个”。
<VirtualHost *:80>
<Location />
Deny from all
</Location>
</VirtualHost>
<VirtualHost *:80>
ServerName mysite.com
.....
</VirtualHost>
推荐阅读
- java - 数组列表
共享偏好 - angular - “OperatorFunction”类型上不存在属性“地图”
'.ts(2339) - jquery - Jquey $(this).serialize() 返回空字符串
- r - 在 r 中添加具有相似变量的行值
- authentication - Github API Rate Limit Exceeded when it used when it used to work
- sqlite - 在 Android Studio Kotlin 中打开 SQLite 数据库
- c# - c# winforms 如何使用 LINQ 使用异步等待
- c - 将数字的每个数字加一的程序
- html - 通过关注该子元素来设置 contenteditable 块的内部元素
- python - 我不明白他们如何初始化当前的解决方案。有人可以解释这是做什么的吗?