在两个子域上运行 php 和 django

在两个子域上运行 php 和 django

我和朋友做了一个由两部分组成的项目。一部分是用 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 访问。

当然,我遗漏了一些其他步骤,但这只是关于如何做到这一点的真正高层次的概述。可能还有数百万种其他方法可以实现它。

相关内容