我使用的是 debian 11 并安装了 apache2,并尝试按照本教程 text 创建虚拟主机。我一步步按照教程进行操作,但是当我尝试在网络浏览器中使用 http://your_domain 访问虚拟主机时,它无法连接。 所以 your_domain.conf 文件看起来像这样
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName your_domain
DocumentRoot /var/www/your_domain
</VirtualHost>
运行时
apachectl -S
我得到以下信息
VirtualHost configuration:
*:80 is a NameVirtualHost
default server example.com (/etc/apache2/sites-enabled/test.conf:1)
port 80 namevhost example.com (/etc/apache2/sites-enabled/test.conf:1)
alias www.example.com
port 80 namevhost test_domain.com (/etc/apache2/sites-enabled/test_domain.com.conf:2)
port 80 namevhost your_domain (/etc/apache2/sites-enabled/your_domain.conf:2)
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex default: dir="/var/run/apache2/" mechanism=default
Mutex watchdog-callback: using_defaults
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33
Group: name="www-data" id=33
我还在/etc/hosts中添加了虚拟主机域名,如下
127.0.0.1 your_domain
。我正在使用谷歌公共 DNS 服务器 8.8.4.4,我的 wifi 配置为谷歌 DNS。我确信 DNS 配置存在问题,因为当我将 debian 设备的 IP 地址和域名添加到 Windows 设备上的 /etc/hosts 时,我能够通过键入 http:// 连接到该站点浏览器中的 your_domain。在我的 debian 设备上,我能够 ping 通 google.com 等域名。
运行时
ss -tuan | grep ":80\s"
显示tcp LISTEN 0 511 *:80 *:*
。
您的网络情况看起来像这样:
Others
\|/
public DNS ——————|
8.8.4.4 |
123.234.12.1 [ INTERNET ]
——————————— - - router - - ————————————————————
priv. DNS ———192.168.0.1 [ LAN ]
192.168.0.2 / \
/ \
/ \
192.168.0.3 192.168.0.4
Apache Server:80 your client PC
127.0.0.1 127.0.0.1
example.com
www.example.com
test_domain.com
your_domain
正如您通过
ss -tuan | grep ":80\s"
的输出所示,您的 Apache 已启动并正在运行。您的问题简化为“如何连接”。
假设您的第一步是通过客户端访问本地 Apache 服务器,您应该忽略图中的“互联网”部分。
这样做告诉您此时使用 Google 的 DNS 服务对于此任务没有用处。
为了尽可能简单地开始,我们还忽略本地/私有 DNS,它可能作为一体式路由器中包含的一项服务存在。
您将 Apache VirtualHosts 配置为“NameVirtualHosts”,以便它们具有相同的 IP 地址和相同的端口。区分他们的唯一方法就是叫他们的名字。
为了能够在 Web 客户端上使用名称,必须知道这些名称并将其链接到您用来连接虚拟主机的客户端系统上的 IP 地址。
通过忽略 DNS 服务器,您必须通过客户端系统上的
hosts
文件来执行此操作:
# Linux:
/etc/hosts
# Windows:
C:\Windows\System32\drivers\etc\hosts
将以下内容添加到文件中。正如您所看到的,可以在一行或多行中执行此操作:
文件:
hosts
192.168.0.3 example.com www.example.com
192.168.0.3 test_domain.com your_domain
重要的是您在所有有权访问 Apache 服务器的客户端上执行此操作。
如果您仅在 Apache 服务器上执行此操作(正如您在问题中所写:
127.0.0.1 your_domain
),那么您只能从该系统本地访问网站。如果您希望在开发系统上有一个本地网络服务器来开发和测试您的网站代码并且不喜欢将其暴露给其他客户端,那么这非常有用(那么您还应该仅将 :80
绑定到 172.0.0.1
)
如果稍后您希望可以通过互联网访问服务器,则必须
:80 -> 192.168.0.3:80
。要从网络内访问这样一个公开的虚拟主机,您应该在本地配置它,否则每个调用都会访问公共 DNS 来请求被调用主机名的 IP 地址。这个可以做吗
hosts
配置。他们会覆盖 DNS 中的设置。