Apache - 仅在特定域上侦听,而不是 IP

Ale*_*lex 12 virtualhost apache-2.2

如何配置 apache 以拒绝直接连接到 IP 地址 ( http://xxx.xxx.xxx.xxx ) 而不是 vhost 名称http://example.com 的连接

我的虚拟主机配置:

ServerName example.com

<VirtualHost *:80>

        ServerName example.com

        DocumentRoot /var/www/           
        <Directory /var/www/>                    
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

Sha*_*den 29

您不能让它拒绝连接,因为在客户端实际发送 HTTP 请求之前,服务器不知道用户尝试用作其 HTTP 主机的主机名(或 IP)。TCP 侦听器始终绑定到 IP 地址。

相反,HTTP 错误响应是否可以接受?

<VirtualHost *:80>
    ServerName catchall
    <Location />
        Order allow,deny
        Deny from all
    </Location>
</VirtualHost>

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/
    <Directory /var/www/>
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

  • @Alex 不,这是完全不可能的。必须建立 TCP 连接,并且客户端必须发送他们的 HTTP 请求(或他们的 SNI 标头,我想),然后服务器才能确定他们是尝试访问其 HTTP 请求中的域名还是 IP 地址. (3认同)
  • @HelpingHand 不是用户的 IP。服务器需要知道用户将在 HTTP 请求中发送的主机标头,直到 TCP 连接完全建立后它才知道。 (3认同)