Apache neden istenen URL ile eşleşen bir SunucuAdı bulunan sanal bir ana bilgisayarı yok sayabilir?


26

Apache yapılandırmam için ikinci bir sanal ana bilgisayar eklemeye çalışıyorum, ancak kullanılacak yeni sanal ana bilgisayarı bulamıyorum.

Benim httpd.confsadece aşağıdaki satırı içerir:

ServerName radiofreebrighton.org.uk

Ayrıca ports.conf, aşağıdakileri içeren bir dosyam var:

NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
    Listen 443
</IfModule>

Ben de iki dosya var sites-availablesembolik olarak hangi sites-enabledtarafından a2ensite:

  • radiofreebrighton.org.uk
  • trafalgararches.co.uk

İlki içeriği:

<VirtualHost _default_:80>
    DocumentRoot /home/tom/www

    ServerAdmin tom@radiofreebrighton.org.uk
    ServerName radiofreebrighton.org.uk
    ServerAlias www.radiofreebrighton.org.uk

    <Directory /home/tom/www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>

    ErrorLog /var/log/apache2/error.log
    LogLevel error
    CustomLog /var/log/apache2/access.log combined

    Alias /wiki /home/tom/www/mediawiki/index.php
</VirtualHost>

İkincisinin içeriği:

<VirtualHost *:80>
    DocumentRoot /home/tom/tata-www

    ServerAdmin admin@trafalgararches.co.uk
    ServerName trafalgararches.co.uk
    ServerAlias www.trafalgararches.co.uk

    <Directory /home/tom/tata-www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>

    logLevel error
    ErrorLog /var/log/apache2/error.log
</VirtualHost>

Ancak trafalgararches.co.uk sayfasından bir sayfa talep ettiğimde, radiofreebrighton.org.uk sayfasından bir sayfa verilir. Bu neden oluyor? Nasıl düzeltebilirim?


Düzenle:

Apache tarafından anlaşıldığı şekilde sanal ana bilgisayar yapılandırması:

tom@rfb:/usr/local$ apache2ctl -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server radiofreebrighton.org.uk (/etc/apache2/sites-enabled/radiofreebrighton.org.uk:1)
         port 80 namevhost radiofreebrighton.org.uk (/etc/apache2/sites-enabled/radiofreebrighton.org.uk:1)
         port 80 namevhost trafalgararches.co.uk (/etc/apache2/sites-enabled/trafalgararches.co.uk:1)
Syntax OK

(Panoda ile apache2ctl -Sbilinir httpd -S.)


1
Sebebinin bu olduğundan emin değilim, ancak eğik çizgileri sizin ServerNameve ServerAliassatırlarınızın ucundan çıkarmanız gerekir . Ayrıca, apache'yi yeniden başlattığınızdan emin olun.
EEAA

Neredeyse pozitifim nedeni bu. Bu, istekteki ana bilgisayar adının o sanal ana bilgisayar için hiçbir zaman SunucuAdı ile eşleşmeyeceği anlamına gelir.
larsks

1
@ErikA, @larsks - Siz benim umutlarım uyandı! Sondaki eğik çizgileri kaldırdım ve apache'yi yeniden başlattım, ancak hiçbir şeyi değiştirmedi.
Tom Wright,

1
Eğer var mı NameVirtualHost *:80Yapılandırmanızda yerde?
larsks

1
Yukarıda belirtilen sitelerin üretim mi gelişme mi olduğundan emin değilim, ancak aslında bu URL'lere gitmek benim için iki farklı sayfa veriyor (görünümüne göre doğru sayfalar). Yukarıdaki hayaletler bir geliştirme sunucusundaysa, bu yorumu dikkate almayın. Aksi halde, sorununuzu yol boyunca bir yerde çözmüş olabilir ve hala etrafta oturan önbellek kopyasına sahip olabilirsiniz.
cyberx86

Yanıtlar:


15

Eh, bu soru bir yaşın üzerinde, ama benzer "sorun" ile tökezledim. Bu açık olabilir, ancak ek sanal ana bilgisayarı etkinleştirdikten sonra apache hizmetini yeniden başlatmayı unutmayın. Bakın, a2ensiteikinci sanal konak için yürütüldükten sonra , çıktısı apache2ctl -Sher iki sitenin de kullanılabilir olduğunu (ve bunlardan biri varsayılandır) gösterecektir.

İki sanal ana makineniz olduğunu varsayalım - site1 ve site2. a2ensite site1Apache servisini çalıştırıp yeniden yüklüyorsunuz. Şimdi erişebilirsiniz http://site1ve bu varsayılandır. Şimdi koşuyorsun a2ensite site2, ama apache'yi yeniden başlatmayı unut Çıktı apache2ctl -Solacak:

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server site1 (/etc/apache2/sites-enabled/site1:1)
         port 80 namevhost site1 (/etc/apache2/sites-enabled/site1:1)
         port 80 namevhost site2 (/etc/apache2/sites-enabled/site2:1)
Syntax OK

Ancak yüklemeyi denediğinizde http://site2, yapılandırma yüklenmediğinden aslında varsayılan siteyi (site1) yükleyecektir.


Aynı çıktıyı alıyorum ancak o zaman bile ikinci web sitesini yüklemiyor.
arqam

15

Bağlantı noktası 443'teki (SSL / HTTPS) ek vhost'larımın listelenen ilk vhost'un dizinine yönlendirilmesiyle benzer bir problem yaşadım. Apache esasen sunucuadı özelliğini görmezden geliyor ve sadece ip: port'ta eşleştiriyordu.

443 numaralı bağlantı noktası için Adlandırılmış sanal barındırma özelliğini etkinleştirmek için 'NameVirtualHost *: 443' komutunu kaçırdığımı ortaya koyuyor.

'NameVirtualHost *: 443' yalnızca bir kez çağrılmalı ve 443 numaralı bağlantı noktası için vhost'larınızın üzerinde tanımlanmalıdır. Tanımımı ports.config dosyasına koydum, şöyle görünecek şekilde:

NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
    NameVirtualHost *:443
    Listen 443
</IfModule>

<IfModule mod_gnutls.c>
    NameVirtualHost *:443
    Listen 443
</IfModule>

Herhangi bir değişiklikten sonra apache'yi yeniden başlatmayı unutmayın.


1
Buna değer ... Apache NameVirtualHostAH00548: NameVirtualHost has no effect and will be removed in the next release /etc/apache2/ports.conf
2.4.18’de

4

2 sentim: bir IP'ye bağlı kalmam gerektiğinden (sitenin kurulu tüm ağlarda yayınlanmasını istemiyorum), sunucunun yerel özel IP'sinin değiştikten sonra, burada değiştirmeyi unuttuğum oldu:

NameVirtualHost 192.168.100.20:80 <VirtualHost 192.168.100.20:80>

Elbette, IP’nin yerel olarak bulunmadığını size bildirmek Apache’nin bir sorunu değil.


2

Tom, lütfen buraya bakın http://httpd.apache.org/docs/2.0/en/mod/core.html#namevirtualhost

Not

Unutmayın, "ana sunucu" ve varsayılan sunucular hiçbir zaman bir NameVirtualHost IP adresine yapılan bir istek için sunulmayacaktır (bir nedenden dolayı NameVirtualHost belirtmediyseniz ancak o adres için herhangi bir VirtualHosts tanımlamıyorsanız).

Bu nedenle , sunucunuzun ip adresini varsayılan olarak değiştirirseniz sorun olmaz .


Bunu denedim ama hiçbir şey değişmedi. Ayrıca kendimi belirli bir IP'ye bağlamaktan da kaçınmak istiyorum, bu yüzden tekrar değiştireceğim. Ayrıca, varsayılan vhost'un işe yaradığını işaret etmeliyim.
Tom Wright,

1

Buradan cevap buluyorum: http://alexking.org/blog/2007/11/01/apache-2-only-serves-first-virtual-host

2 sunucu adını aşağıdaki gibi 1 VirtualHost etiketine yerleştirin:

<VirtualHost *:80>
ServerName beta-site-1.com
DocumentRoot "/Library/WebServer/beta-site-1"

ServerName beta-site-2.com
DocumentRoot "/Library/WebServer/beta-site-2"
</VirtualHost>

İki VirtualHost etiket bloğum olduğu için ikinci siteyle ilgili sorunlarım bitti.


0

Siteleri yeni bir Ubuntu 16 sunucusuna taşırken bu sorunu yaşadım. Biraz kafa çizdikten sonra, SSL Modülünün varsayılan olarak etkin olmadığını fark ettim, bu yüzden <IfModule mod_ssl.c>blokların içindeki herhangi bir şey elbette sessizce yoksayıldı.

Yıllar önce tüm şartlarmı tüm SSL vhost'larımı bu şartlara sardım ve bu sefer sadece config dosyalarını yeni sunucuya kopyaladım.

Modülü etkinleştirerek düzelttim:

sudo a2enmod ssl

0

Bu sorunun kaynağının, sunucumun URL’sini sunucunun dış IP’sine işaret eden sunucumda bir / etc / hosts girişi olduğunu keşfettim.

Bir noktada, DNS hazır olmadan önce ayarlamam gerekiyordu, bu yüzden sunucumda bir / etc / hosts girdisine kendi harici IP'sini göstererek girdim:

1.2.3.4 vhost.example.com

Daha sonra "vhost.example.com" için mevcut bir siteye bir ServerAlias ​​kurdum.

Ancak yapabileceğim hiçbir şey Apache'nin SSL istekleri için vhost.example.com adresine gönderdiği varsayılan ssl.conf sitesini sunmasını engelleyemezdi. Port 80 HTTP tamam çalıştı, ancak SSL her zaman varsayılan siteyi gösterdi. Sonunda bu SO iş parçacığı beni siteleri gösteren "apachectl -S" yi denememe yol açtı ve sonunda bunu çözebildim.

Bu nedenle, beklediğiniz site yerine varsayılan SSL sitesini alıyorsanız, sunucunuzun harici IP adresini / etc / hosts girişine eklemediğinizden emin olun! Gezide yapılmış oldukça garip bir şey, ama umarım bu başkasına yardımcı olur!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.