如何为 Server-Hostname 配置 apache (vhost)

如何为 Server-Hostname 配置 apache (vhost)

首先,抱歉我的英语不太好。但让我解释一下我遇到的 apache vhosts 问题。

示例:我的服务器名称是 example.de (/etc/hostname)。如果我针对此特定域进行配置,我的虚拟主机将无法工作。看来 apache 使用默认虚拟主机。但我需要默认虚拟主机来处理服务器上未激活的页面。因此,我无法将其用于域 example.de

我需要以下问题的解决方案:

  • example.de - 应该指向 /var/www/example(这不起作用,因为 /etc/hostanme)
  • example2.de - 应该指向 /var/www/example2 (这有效)
  • domain-i-got-but-not-active.de 应该指向 /var/www/default (这可行,但也会捕获 example.de)

我无法更改我的主机名,因为如果服务器名称设置不正确,从我的服务器发送的邮件将被检测为垃圾邮件。

下面是我的虚拟主机的一个示例:

 # For default-pages
 <VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/default
        <Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>
        <Directory /var/www/default>
                Options FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>
</VirtualHost>

# Doesn´t work, points to default (above code)
<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName example.de
        DocumentRoot /var/www/example
        <Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>
        <Directory /var/www/example>
                Options FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>
</VirtualHost>

# All fine
<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName example2.de
        DocumentRoot /var/www/example2
        <Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>
        <Directory /var/www/example2>
                Options FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>
</VirtualHost>

答案1

根据Apache 文档

如果未指定 ServerName,则服务器将尝试通过对 IP 地址执行反向查找来推断主机名。

反向查找:查找 IP 地址以找到该 IP 地址的域名。

我猜这就是为什么example.de默认提供服务的原因VirtualHost,因此尝试添加ServerName domain-i-got-but-not-active.de,如果这VirtualHost是第一个定义:

它具有最高优先级,可以视为默认或主服务器。这意味着如果收到的请求与指定的 ServerName 指令之一不匹配,则将由第一个 VirtualHost 提供服务。

答案2

<VirtualHost *:80>
    DocumentRoot /var/www/example
    DirectoryIndex index.php
    ServerName example.de 
    setEnv DOMAIN_NAME example.de 
   <Directory "/var/www/example">
         Options Indexes FollowSymLinks MultiViews
         AllowOverride All
         Order allow,deny
         allow from all
         Require all granted
  </Directory>
  </VirtualHost>

尝试这个

相关内容