我是 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