Debian

子域的 Debian 10 apache2 虛擬主機

  • November 1, 2021

我有和Debian 10配置子域。主域配置:apache2``virtual hosts

<VirtualHost *:80>
   ServerName system.com
   ServerAlias system.com
   ServerAdmin webmaster@localhost
   DocumentRoot /var/www/system.com
   
   <Directory /var/www/system.com>
       Options -Indexes +FollowSymLinks
       AllowOverride All
   </Directory>
   
   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined
   
</VirtualHost>

對於我在虛擬主機中的子域配置:

<VirtualHost *:80>
   ServerName api.system.com
   ServerAlias api.system.com
   ServerAdmin webmaster@localhost
   DocumentRoot /var/www/api.system.com
   
   <Directory /var/www/api.system.com>
       Options -Indexes +FollowSymLinks
       AllowOverride All
#       Order Allow,Deny
#       Allow from All
   </Directory>

   
   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

現在,當我在瀏覽器中鍵入 system.com 時,它會顯示 system.com 目錄中的 index.html。當我輸入 api.system.com 時,它會顯示 api.system.com 文件夾中的 index.html。

命令的輸出sudo apache2ctl -S::

my@server088331:/etc/apache2/sites-available$ sudo apache2ctl -S
VirtualHost configuration:
*:80                   is a NameVirtualHost
        default server api.system.com (/etc/apache2/sites-enabled/api.system.conf:1)
        port 80 namevhost api.system.com (/etc/apache2/sites-enabled/api.system.conf:1)
                alias api.system.com
        port 80 namevhost phpmyadmin.system.com (/etc/apache2/sites-enabled/phpmyadmin.conf:1)
                alias phpmyadmin.system.com
        port 80 namevhost system.com (/etc/apache2/sites-enabled/system.conf:1)
                alias system.com
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex default: dir="/var/run/apache2/" mechanism=default
Mutex mpm-accept: using_defaults
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

一切看起來都不錯,但問題在於子域。當我輸入 api.system.com 時,我從 api.system.com 目錄中獲取 index.html 的內容。但是當我輸入例如 api55.system.com 時,我也從 api.system.com 獲得 index.html。api41.system.com 等的結果相同。儘管這些域不存在,並且這些域的虛擬主機中不存在配置

如何配置虛擬主機以僅允許獲取特定域的 index.html。因為當我添加第二個域時,它應該只從虛擬主機中為給定子域分配的文件夾中獲取文件

我假設您正在瀏覽的所有主機都具有相同的 IP 地址。也許這會有所幫助

RewriteEngine on
RewriteCond   %{HTTP_HOST} !^api.system.com
RewriteRule ^ - [L,R=404]

尚未在我自己的系統上對其進行測試,但在瀏覽 api.system.com 以外的任何 URL 時,它應該返回 404 錯誤。這是你要求的嗎?

引用自:https://unix.stackexchange.com/questions/675598