如何在 VPS 上的不同文件夹中托管多个网站?
How to host multiple websites on different folders on a VPS?
我有一个 domain1.com
指向我的 VPS 服务器(我刚刚在 A
条目中指定了 IP 地址)。更具体地说,domain1.com
指向我的 VPS.
的文件夹 /var/www/html
我想在此 VPS 上托管另一个网站,域名为:domain2.com
我的想法是新建一个目录:/var/www/html2
,把新网站的代码放在里面,然后重定向domain2.com
到这个文件夹。
但是,我不知道如何通过添加 A
(DNS) 条目来做到这一点。另外,没有解决方案可以使用 .htaccess
吗?
根据它的声音,您可能已经为 domain1.com
配置了主服务器配置。如果您只在您的服务器上托管 1 个站点,这没问题,但如果您托管多个网站(不同的域),那么您需要配置 虚拟主机 。一个用于 domain1.com
,另一个用于 domain2.com
,等等
您可能已经将 domain1.com
的必要指令(即 ServerName
、DocumentRoot
等)直接放在主服务器配置中,这些需要移动到<VirtualHost>
改为容器。
例如:
<VirtualHost *:80>
ServerName domain1.com
ServerAlias www.domain1.com
DocumentRoot /var/www/html
<Directory /var/www/html>
Require all granted
# Enable .htaccess overrides if required
AllowOverride All
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName domain2.com
ServerAlias www.domain2.com
DocumentRoot /var/www/html2
<Directory /var/www/html2>
Require all granted
# Enable .htaccess overrides if required
AllowOverride All
</Directory>
</VirtualHost>
为两个域添加相同的 A
记录。 (您可能也想对 www 子域执行相同的操作,或者创建一个 CNAME
记录。)所以两个域都指向相同的 IP 地址(即您的服务器)。然后,Apache 可以通过将请求 (HTTP 1.1) 上的 Host
header 与 ServerName
(或 ServerAlias
)指令进行比较来确定将请求路由到哪个虚拟主机 <VirtualHost>
容器。
通常将 <VirtualHost>
容器放在一个单独的 .conf
文件中,该文件稍后 包含在 主服务器配置中,使用 Include
指令。
参考:
- https://httpd.apache.org/docs/2.4/vhosts/
- https://httpd.apache.org/docs/2.4/mod/core.html#virtualhost
- https://httpd.apache.org/docs/2.4/mod/core.html#include
更新:
Also, is there not a solution to work with .htaccess
?
您没有使用 .htaccess
实现虚拟主机。使用 .htaccess
你可以重写 URL 这样你就可以模拟类似的东西(使用一个为多个域服务的虚拟主机)但是这不是必需的,如果你是托管完全独立的网站。
我有一个 domain1.com
指向我的 VPS 服务器(我刚刚在 A
条目中指定了 IP 地址)。更具体地说,domain1.com
指向我的 VPS.
/var/www/html
我想在此 VPS 上托管另一个网站,域名为:domain2.com
我的想法是新建一个目录:/var/www/html2
,把新网站的代码放在里面,然后重定向domain2.com
到这个文件夹。
但是,我不知道如何通过添加 A
(DNS) 条目来做到这一点。另外,没有解决方案可以使用 .htaccess
吗?
根据它的声音,您可能已经为 domain1.com
配置了主服务器配置。如果您只在您的服务器上托管 1 个站点,这没问题,但如果您托管多个网站(不同的域),那么您需要配置 虚拟主机 。一个用于 domain1.com
,另一个用于 domain2.com
,等等
您可能已经将 domain1.com
的必要指令(即 ServerName
、DocumentRoot
等)直接放在主服务器配置中,这些需要移动到<VirtualHost>
改为容器。
例如:
<VirtualHost *:80>
ServerName domain1.com
ServerAlias www.domain1.com
DocumentRoot /var/www/html
<Directory /var/www/html>
Require all granted
# Enable .htaccess overrides if required
AllowOverride All
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName domain2.com
ServerAlias www.domain2.com
DocumentRoot /var/www/html2
<Directory /var/www/html2>
Require all granted
# Enable .htaccess overrides if required
AllowOverride All
</Directory>
</VirtualHost>
为两个域添加相同的 A
记录。 (您可能也想对 www 子域执行相同的操作,或者创建一个 CNAME
记录。)所以两个域都指向相同的 IP 地址(即您的服务器)。然后,Apache 可以通过将请求 (HTTP 1.1) 上的 Host
header 与 ServerName
(或 ServerAlias
)指令进行比较来确定将请求路由到哪个虚拟主机 <VirtualHost>
容器。
通常将 <VirtualHost>
容器放在一个单独的 .conf
文件中,该文件稍后 包含在 主服务器配置中,使用 Include
指令。
参考:
- https://httpd.apache.org/docs/2.4/vhosts/
- https://httpd.apache.org/docs/2.4/mod/core.html#virtualhost
- https://httpd.apache.org/docs/2.4/mod/core.html#include
更新:
Also, is there not a solution to work with
.htaccess
?
您没有使用 .htaccess
实现虚拟主机。使用 .htaccess
你可以重写 URL 这样你就可以模拟类似的东西(使用一个为多个域服务的虚拟主机)但是这不是必需的,如果你是托管完全独立的网站。