一台服务器上有多个具有子域的应用程序

一台服务器上有多个具有子域的应用程序

我希望我的 VPS 能够托管多个应用程序。例如

  • mydomain.com(Python Django 应用程序)
  • git.mydomain.com(GitLab)
  • blog.mydomain.com(WordPress)

如何实现在一台物理机上运行所有这些?(这里想到了 Heroku-Apps)


由于这个问题因偏离主题而被搁置,并且规则规定至少应提供“尝试解决方案”,因此这里是:我已经在我的 VPS 上设置了 Bind9 以将所有子域重定向到同一 IP,然后我可以从 WSGI 中的 HTTP 请求中读取请求的子域。然后我考虑创建一个 Python 服务器,将 HTTP 请求重新分发到侦听不同端口的应用程序(例如 8000 上的 GitLab、8001 上的 Django 应用程序、8002 上的 Wordpress)。但这不允许正确转发非 HTTP 请求(例如,为 GitLab 读取/写入 Git 存储库)。

我想肯定还有其他方法可以做到这一点,但我不知道怎么做。我也没有像“命名虚拟服务器”这样好的关键字可以搜索,所以我的搜索尝试相当不令人满意。

答案1

Apache 虚拟主机文档可以给你一个很好的概述。

查看所有 [virtualhost] 问题了解您所使用的特定操作系统和发行版的详细信息。

在 Debian/Ubuntu 风格的系统上,您可以添加子域(或其他域),/etc/apache2/sites-available/[YOUR_SUBDOMAIN]然后运行。更改设置后,a2ensite [YOUR_SUBDOMAIN]不要忘记Apache。reload

您可以轻松地使用 nginx 和其他 Web 服务器执行相同的操作,但是如果您对这方面没有太多经验,最好从 Apache 开始。

答案2

如果您使用的是 Apache2,则可以为每个虚拟主机创建一个虚拟主机。我更喜欢使用命名虚拟主机,这样就不需要为每个虚拟主机设置新的 IP 地址。

我的做法是在 /usr/local/apache/conf/extra/httpd_vhosts.conf 文件中添加一个包含行,指向包含所有虚拟主机文件的目录。

------httpd_vhosts.conf--------- Listen 80 Include "/usr/local/apache/conf/extra/vhosts/*.conf" ------结束-----------------------

您需要在虚拟主机之前监听 80,否则您将得到已被使用的端口。

在 vhosts 目录中,添加您的自定义虚拟主机文件。

-------vhosts/example.conf---------------

<虚拟主机 *:80>
    服务器名称 example.com
    文档根目录“/usr/local/apache/htdocs/drupal7”
    服务器管理员[电子邮件保护]
    服务器别名 example.com
    日志级别警告
    错误日志“/usr/local/apache/htdocs/logs/example.error.log”
    CustomLog“/usr/local/apache/htdocs/logs/example.access.log”“%t%a%>s \“%r\”%b%D”
    <目录“/usr/local/apache/htdocs/drupal7”>
       RewriteEngine 开启
       重写库 /
       RewriteCond %{REQUEST_FILENAME} !-f
       RewriteCond %{REQUEST_FILENAME} !-d
       重写规则 ^(.*)$ index.php?q=$1 [L,QSA]
    </目录>
    <位置 />
      命令允许、拒绝
      允许所有人
    </位置>
    <IfModule mod_suphp.c>
        suPHP_UserGroup apache apache
    </IfModule>
    <目录 /usr/local/apache/htdocs/drupal7>
       允许覆盖全部
       RewriteEngine 开启
       重写库 /
       RewriteCond %{REQUEST_FILENAME} !-f
       RewriteCond %{REQUEST_FILENAME} !-d
       重写规则 ^(.*)$ index.php?q=$1 [L,QSA]
       AddOutputFilterByType DEFLATE text/plain
       AddOutputFilterByType DEFLATE text/html
       AddOutputFilterByType DEFLATE text/xml
       AddOutputFilterByType DEFLATE text/css
       AddOutputFilterByType DEFLATE 应用程序/xml
       AddOutputFilterByType DEFLATE 应用程序/xhtml+xml
       AddOutputFilterByType DEFLATE application/rss+xml
       AddOutputFilterByType DEFLATE 应用程序/javascript
       AddOutputFilterByType DEFLATE 应用程序/x-javascript
       AddOutputFilterByType DEFLATE image/jpg
       AddOutputFilterByType DEFLATE 图像/png
       AddOutputFilterByType DEFLATE 图像/gif
       AddOutputFilterByType DEFLATE 图像/ico
    </目录>
    <IfModule mod_expires.c>
       到期日期
       ExpiresDefault“访问后 30 天”
       ExpiresByType text/plain “访问期限另加 30 天”
       ExpiresByType text/html “访问另加 30 天”
       ExpiresByType text/xml “访问另加 30 天”
       ExpiresByType text/css “访问另加 30 天”
       ExpiresByType application/xml “访问加 30 天”
       ExpiresByType application/xhtml+xml “访问加 30 天”
       ExpiresByType application/rss+xml “访问加 30 天”
       ExpiresByType application/javascript “访问加 30 天”
       ExpiresByType application/x-javascript “访问加 30 天”
       ExpiresByType image/gif “访问附加 30 天”
       ExpiresByType image/jpg “访问加 30 天”
       ExpiresByType image/png “访问加 30 天”
       ExpiresByType image/x-icon “访问附加 30 天”
    </IfModule>
</虚拟主机>

- - - 结尾 - - - - - - - - - - - - - - -

因此,您将为每个想要拥有单独主机的子域添加一个新的 vhost 文件。更改 ServerName、ServerAlias、<Directory... 和 <Location 指令以满足您的需求。例如 git.example.com、sub1.example.com、sub2.example.com 等。

相关内容