我希望我的 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 等。