我和朋友做了一个由两部分组成的项目。一部分是用 Django 制作的,另一部分是用 php 语言制作的。我们只有一台服务器,所以我们想使用 2 个子域。我的问题是这怎么可能?如果我们安装 apache 并创建子域,我们如何让 Django 和 php 在这些子域上运行?
谢谢。
答案1
我假设并且希望您所说的您有一台服务器是指“Linux 服务器”,因此,我向您提供有关 Linux 的信息。
您可以使用 Apache 的子域名在同一台服务器上托管 Django 和 PHP,只需使用两个单独的虚拟主机适用于应用程序。以下是实现此目的的粗略指南:
设置子域名:在您的 DNS 区域中创建两个子域名,或使用hosts 文件在服务器上。例如:
djangoapp.yourdomain.com
phpapp.yourdomain.com
安装所需软件:
确保已安装 apache2。对于 PHP,请根据您的 PHP 版本安装 mod_php 或 php-fpm。对于 Django,您可能会使用 mod_wsgi 或 mod_wsgi-express。为 PHP 配置 Apache:
为 PHP 应用程序创建或编辑 VirtualHost:
<VirtualHost *:80>
ServerName phpapp.yourdomain.com
DocumentRoot /path/to/your/php/app
<Directory /path/to/your/php/app>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
确保将 /path/to/your/php/app 更改为您的 PHP 项目的实际路径。
为 Django 配置 Apache:
对于 Django,您通常会使用 mod_wsgi。以下是基本配置:
<VirtualHost *:80>
ServerName djangoapp.yourdomain.com
WSGIDaemonProcess yourappname python-path=/path/to/your/django/app:/path/to/your/venv/lib/pythonX.X/site-packages
WSGIProcessGroup yourappname
WSGIScriptAlias / /path/to/your/django/app/appname/wsgi.py
<Directory /path/to/your/django/app/appname>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
</VirtualHost>
笔记:
确保将 /path/to/your/django/app 替换为 Django 项目的实际路径。如果使用虚拟环境,请将 /path/to/your/venv 更改为虚拟环境的路径。pythonX.X 应替换为您的 python 版本,例如 python3.8。启用配置并重新启动 Apache:
确保您的配置文件链接到 sites-enabled 目录,然后重新启动 Apache:
sudo a2ensite your_django_config.conf
sudo systemctl restart apache2
确保所需的权限:
确保 Apache 具有读取(如果需要,也可以写入)Django 和 PHP 项目的目录所需的权限。
Django 细节:
确保 settings.py 中的 ALLOWED_HOSTS 包含您的子域名。如果您要提供静态或媒体文件,请确保 Django 的 STATIC_URL 和 MEDIA_URL 已正确设置。考虑使用白噪声对于较简单的设置中的静态文件,或对于较大的项目,使用外部 CDN 或 AWS S3 等服务等专用解决方案。测试:设置后,在浏览器中测试两个子域,以确保它们按预期工作。
通过这些配置,您的 Django 应用程序将可以从 djangoapp.yourdomain.com 访问,并且您的 PHP 应用程序将可以从 phpapp.yourdomain.com 访问。
当然,我遗漏了一些其他步骤,但这只是关于如何做到这一点的真正高层次的概述。可能还有数百万种其他方法可以实现它。