Apache2虚拟主机域名不起作用(debian 11)

问题描述 投票:0回答:1

我使用的是 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               *:*

dns debian apache2
1个回答
0
投票

您的网络情况看起来像这样:

                 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
)


如果稍后您希望可以通过互联网访问服务器,则必须

  1. 向路由器添加端口转发
    :80 -> 192.168.0.3:80
  2. 提供您的公共 IP 地址的域名。 IE。使用动态 DNS 服务(有些是免费的)。
  3. 在 Apache 中为您的虚拟主机命名,使其与动态 DNS 服务中配置的域名相符。

要从网络内访问这样一个公开的虚拟主机,您应该在本地配置它,否则每个调用都会访问公共 DNS 来请求被调用主机名的 IP 地址。这个可以做吗

  • 通过您想要访问的每个客户端的主机文件(如上所述)或
  • 通过配置本地 DNS,提供本地 IP 地址和应与服务器关联的主机名之间的链接。整个本地网络的一种配置。在这种情况下,应消除 Apache IP 地址的现有
    hosts
    配置。他们会覆盖 DNS 中的设置。
© www.soinside.com 2019 - 2024. All rights reserved.