如何使用 3 个站点设置 Apache:两个基于名称的虚拟主机,一个通过 IP 地址
How to set up Apache with 3 sites: Two name based virtual hosts and one via the IP address
我已经有 2 个站点链接到域。
为此,我将 2 个 conf 文件放入 /etc/apache2/sites-available/
:
<domain1>.conf
<domain2>.conf
有 DocumentRoot /var/www/domain1
和 DocumentRoot /var/www/domain2
。
此外,我需要设置第 3 个站点直接链接到服务器 IP。
为此我创建了 conf 文件:
IP.conf(IP为服务器IP):
<VirtualHost *:80>
ServerAdmin <email>
ServerName <IP>
ServerAlias <IP>
DocumentRoot /var/www/html/wordpress
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
运行:
sudo a2ensite <IP>.conf
并且:
restart apache service.
但这并没有帮助。
请问如何配置路由?
问题是默认的 Apache 配置总是使用服务器的 IP 地址。这样 IP.conf
将永远不会被加载。
您需要编辑位于 sites-available
中的默认 Apache 配置以进行更改。
查看您的配置,您正在指示 ServerName
和 ServerAlias
的原始 IP 地址,这将有效地破坏设置基于名称的虚拟主机的目的:
<VirtualHost *:80>
ServerAdmin <email>
ServerName <IP>
ServerAlias <IP>
DocumentRoot /var/www/html/wordpress
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
在这种情况下,配置将被忽略,因为默认的 Apache 设置将始终遵循您所在机器的 IP 地址。哎呀,如果您的服务器有多个 IP 地址,它甚至会使用所有网络接口。
要使基于名称的虚拟主机正常工作,您必须在您的配置中使用domain/host名称。 domain1
这样的事情:
<VirtualHost *:80>
ServerAdmin <email>
ServerName <domain1>
ServerAlias <domain1>
DocumentRoot /var/www/domain1
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
这是 domain2
<VirtualHost *:80>
ServerAdmin <email>
ServerName <domain2>
ServerAlias <domain2>
DocumentRoot /var/www/domain2
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
现在对于 IP 地址主机配置,您应该进入 Apache 配置目录 — Debian/Ubuntu 上的 /etc/apache2/
或 CentOS/RedHat 上的 /etc/httpd/
— 然后查看sites-available
目录。应该有一个名为 000-default.conf
:
的文件
/etc/apache2/sites-available/000-default.conf
并在那里进行 IP.conf
中显示的更改。在最基本的层面上,只需将 DocumentRoot
更改为:
DocumentRoot /var/www/html/wordpress
然后重新启动 Apache,它应该会按预期工作。
我已经有 2 个站点链接到域。
为此,我将 2 个 conf 文件放入 /etc/apache2/sites-available/
:
<domain1>.conf
<domain2>.conf
有 DocumentRoot /var/www/domain1
和 DocumentRoot /var/www/domain2
。
此外,我需要设置第 3 个站点直接链接到服务器 IP。
为此我创建了 conf 文件: IP.conf(IP为服务器IP):
<VirtualHost *:80>
ServerAdmin <email>
ServerName <IP>
ServerAlias <IP>
DocumentRoot /var/www/html/wordpress
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
运行:
sudo a2ensite <IP>.conf
并且:
restart apache service.
但这并没有帮助。
请问如何配置路由?
问题是默认的 Apache 配置总是使用服务器的 IP 地址。这样 IP.conf
将永远不会被加载。
您需要编辑位于 sites-available
中的默认 Apache 配置以进行更改。
查看您的配置,您正在指示 ServerName
和 ServerAlias
的原始 IP 地址,这将有效地破坏设置基于名称的虚拟主机的目的:
<VirtualHost *:80>
ServerAdmin <email>
ServerName <IP>
ServerAlias <IP>
DocumentRoot /var/www/html/wordpress
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
在这种情况下,配置将被忽略,因为默认的 Apache 设置将始终遵循您所在机器的 IP 地址。哎呀,如果您的服务器有多个 IP 地址,它甚至会使用所有网络接口。
要使基于名称的虚拟主机正常工作,您必须在您的配置中使用domain/host名称。 domain1
这样的事情:
<VirtualHost *:80>
ServerAdmin <email>
ServerName <domain1>
ServerAlias <domain1>
DocumentRoot /var/www/domain1
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
这是 domain2
<VirtualHost *:80>
ServerAdmin <email>
ServerName <domain2>
ServerAlias <domain2>
DocumentRoot /var/www/domain2
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
现在对于 IP 地址主机配置,您应该进入 Apache 配置目录 — Debian/Ubuntu 上的 /etc/apache2/
或 CentOS/RedHat 上的 /etc/httpd/
— 然后查看sites-available
目录。应该有一个名为 000-default.conf
:
/etc/apache2/sites-available/000-default.conf
并在那里进行 IP.conf
中显示的更改。在最基本的层面上,只需将 DocumentRoot
更改为:
DocumentRoot /var/www/html/wordpress
然后重新启动 Apache,它应该会按预期工作。