Apache-2.2

伺服器別名不工作

  • September 21, 2020

我有一個 VPS,我已將其配置為使用基於名稱的託管來託管多個網站。只使用example.comwww.example.com都很好。它也適用於example.net,但是當我嘗試example.net時,它會恢復為我的預設站點配置,它只顯示我的預設(空)index.html 頁面。

這是預設文件:

<VirtualHost *:80>
       ServerAdmin webmaster@localhost

       DocumentRoot /var/www
       <Directory />
               Options FollowSymLinks
               AllowOverride None
       </Directory>
       <Directory /var/www/>
               Options Indexes FollowSymLinks MultiViews
               AllowOverride All
               Order allow,deny
               allow from all
       </Directory>

       ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
       <Directory "/usr/lib/cgi-bin">
               AllowOverride None
               Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
               Order allow,deny
               Allow from all
       </Directory>

       ErrorLog /var/log/apache2/error.log

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

       CustomLog /var/log/apache2/access.log combined

   Alias /doc/ "/usr/share/doc/"
   <Directory "/usr/share/doc/">
       Options Indexes MultiViews FollowSymLinks
       AllowOverride None
       Order deny,allow
       Deny from all
       Allow from 127.0.0.0/255.0.0.0 ::1/128
   </Directory>

</VirtualHost>

這是example.com站點的配置:

   <VirtualHost *:80>
    ServerAdmin admin@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /srv/www/example.com/public_html/
    ErrorLog /srv/www/example.com/logs/error.log
    CustomLog /srv/www/example.com/logs/access.log combined
<Directory /srv/www/example.com/public_html/>
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>

這是example.net站點的配置:

<VirtualHost *:80>
    ServerAdmin admin@example.net
    ServerName example.net
    ServerAlias www.example.net
    DocumentRoot /srv/www/example.net/public_html/
    ErrorLog /srv/www/example.net/logs/error.log
    CustomLog /srv/www/example.net/logs/access.log combined
<Directory /srv/www/example.net/public_html/>
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>

問題可能出在哪裡?

我相信,ServerAlias 屬性出了點問題。

可能是因為網站的建構方式嗎?因為example.com是一個Joomla站點,而example.net是一個 Zend Framework 站點。以防萬一,我還將為example.net插入 .htaccess 文件,因為example.com已禁用它: example.net

SetEnv APPLICATION_ENV development

RewriteRule  ^(browse|config).*  - [L]
ErrorDocument 500 /error-docs/500.shtml
SetEnv CACHE_OFFSET 2678400


<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Expires "Fri, 25 Sep 2037 19:30:32 GMT"
Header unset ETag
FileETag None
</FilesMatch>

RewriteEngine On
RewriteRule ^(adm|statistics) - [L]
RewriteRule ^/public/(.*)$ http://example.net/$1 [R]
RewriteRule ^(.*)$ public/$1 [L]

任何幫助將不勝感激!

編輯這樣我的問題就很清楚了:問題是,一個站點既可以使用www前綴,也可以不使用它,而第二個站點則不能。我想知道如何使第二個站點也可以使用www前綴。

確保配置指令中的優先順序與 Apache 處理請求的方式相匹配 - 即,如果您的指令像這樣載入,您將不會有太多運氣:

  • example.com
  • 預設/包羅萬象
  • universal.lv

不管它們是在單個文件還是多個文件中聲明 - 只要“universal.lv”是最後一個,就不會到達,因為 default/catch-all vhost 將在它之前。

出於這個原因,我通常將我的預設/catch-all 配置命名為“z-default.conf”(或者,如果您有一個以“z”、“zz”…等開頭的域),以確保它是僅當沒有其他虛擬主機匹配時才處理。

嘗試相應地重命名。


**更新:**以免與_default_VirtualHost 指令混淆

使用萬用字元 DNS將所有對 example.com 的請求定向到伺服器的 IP(擷取錯誤鍵入的子域),Apache 解析以下配置文件:

  • 000-default.conf - VirtualHost _default_:80/ ServerName <hostname>- 擷取針對伺服器 IP 的請求(可以重定向到主域或簡單地使用中Directory指定的預設值進行阻止conf.d/security
  • 範例.conf - VirtualHost *:80/ServerName www.example.com
  • example2.conf - VirtualHost *:80/ServerName www.example2.com
  • zzz-example.conf - VirtualHost *:80// ServerName example.com-ServerAlias *.example.com重定向到規範的 www 域
  • zzz-example2.conf - VirtualHost *:80// ServerName example2.com-ServerAlias *.example2.com重定向到規範的 www 域

如文件所述, Apache 會選擇第一個匹配的 VirtualHost(即),但如果您在指令_default_:80中使用萬用字元,則這種行為是不可取的。ServerAlias

引用自:https://serverfault.com/questions/212071