Ubuntu Apache2 vhost 配置

Ubuntu Apache2 vhost 配置

我是 apache2 新手,在 Ubuntu Server 12.04 LTS 上配置 apache2 时遇到了一些麻烦。所有子域都指向默认子域。以下是我的目标:

domain.com -> MAIN SITE (port 80)
sub1.domain.com -> SITE 1 (port 80)
sub2.domain.com -> SITE 2 (port 80)
SSL.domain.com -> SITE 3 (port 443) 

但是根据我的配置,当我例如执行以下操作时:

https://sub1.domain.com (port 443)

apache 给了我 SITE 3,这不是我想要的,我不希望 443 上的这个子域名有任何回报。如何配置好 apache2,让好的域名指向适当端口上的正确 SITE,并且如果我不想要,就不回答?这是我的网站配置摘要:对于主站点:

<VirtualHost domain.com:80>
    ServerAdmin [email protected]
    ServerName domain.com
    ServerAlias www.domain.com
    DocumentRoot /var/www/default/public_html

    <Directory />
        Order Deny,Allow
        Deny from all
        Options None
        AllowOverride None
        Options -Indexes -ExecCGI
    </Directory>

    <Directory /var/www/default/public_html>
        Order Allow,Deny
        allow from all
        Options -Indexes -ExecCGI
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined env=!local 
</VirtualHost>

对于每个子域:

<VirtualHost sub1.domain.com:80>
    ServerAdmin [email protected]
    ServerName sub1.domain.com  
    ServerAlias sub1.domain.com
    DocumentRoot /var/www/sub1/public_html



    <Directory />
        Order Deny,Allow
        Deny from all
        Options None
        AllowOverride None
    </Directory>

    <Directory /var/www/sub1>
                Order Deny,Allow
                Deny from all
                Options None
                AllowOverride None
        </Directory>

    <Directory /var/www/sub1/public_html>
        Order Allow,Deny
        allow from all
        Options -Indexes -ExecCGI
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/sub1_error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/sub1_access.log combined env=!dontlog 
</VirtualHost>

非常感谢您的帮助!祝您有美好的一天。

答案1

为了让 Apache 忽略你没有明确添加的名称,你可以添加一个 mod_rewrite 规则,该规则检查 ${HTTP_HOST},如果不匹配,则发送 Forbidden 403 错误

在 ssl 虚拟主机上:

RewriteEngine on
RewriteCond ${HTTP_HOST} !^SSL.domain.com [NC]
RewriteRule /* - [F]

对于非 SSL 域,您只需创建一个不指定 ServerName 的默认虚拟主机,即可捕获任何与您想要的域不匹配的请求。只需确保它首先列出(参见第二部分)https://httpd.apache.org/docs/current/vhosts/name-based.html

相关内容