Apache sanal ana bilgisayar yapılandırmasında hata ayıklama nasıl yapılır?


138

Bir kez daha, apache sanal ana bilgisayar yapılandırmamla ilgili bir sorunum var. (Özel yapılandırma yerine varsayılan yapılandırma kullanılır).

Sorun gerçekten yanlış yapılandırma değil, nasıl çözüleceğidir.

Herkes bu tür bir sorunu hızlı bir şekilde çözmek için iyi tavsiyeleri var mı?

Biraz daha bilgi.

Varsayılan conf dosyası şudur:

NameVirtualHost *
<VirtualHost *>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www/
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                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
        ServerSignature On

    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>

Ve geçerli olmayan sanal ana bilgisayar yapılandırması şudur:

<VirtualHost *:*>

ProxyPreserveHost On
ProxyPass / http://ip.ip.ip.ip:8088/
ProxyPassReverse / http://ip.ip.ip.ip:8088/
ServerName wiki.mydomain.com

</VirtualHost>

Yanıtlar:


198

Sözdizimi kontrolü

Yapılandırma dosyalarında sözdizimi hataları olup olmadığını kontrol etmek için:

# Red Hat-based (Fedora, CentOS) and OSX
httpd -t

# Debian-based (Ubuntu)
apache2ctl -t

# MacOS
apachectl -t

Sanal ana bilgisayarları listele

Tüm sanal ana bilgisayarları ve konumlarını listelemek için:

# Red Hat-based (Fedora, CentOS) and OSX
httpd -S

# Debian-based (Ubuntu)
apache2ctl -S

# MacOS
apachectl -S

5
-Solduğu için eş anlamlısı -t -D DUMP_VHOSTSbu iki aynıdır bu yüzden
aron.duby

2
Windows için (xampp kullanıyorsanız) şu komutlara da sahipsiniz: \ xampp \ apache \ bin
Jahmic

Wamp için:c:\\wamp\\bin\\apache\\apache2.4.9\\bin\\httpd.exe -S
Lg102

2
Bu çok yararlı, teşekkür ederim ama yeterli değil, bir vhost ile kullanılması gereken bir sorun var ve değil, neden bilmiyorum, apache'nin vhost'u nasıl seçtiği hakkında günlükler almak istiyorum.
Loenix

1
Hangi ana bilgisayarın seçildiği hakkında dinamik bilgi veren sanal veya ana bir ana bilgisayar için gerçek erişim geldiğinde Apache'nin hata dosyasına veya başka bir yere bir mesaj eklemesini sağlamanın bir yolu var mı? LoadModule log_debug_module modülleri / mod_log_debug.so ... LogMessage "Hata ayıklama 1" hook = all
David Spector

28

İşte size yardımcı olabilecek bir komut:

apachectl -t -D DUMP_VHOSTS

Tüm vhost'ların bir listesini alırsınız, hangisinin varsayılan olduğunu bilirsiniz ve sözdiziminizin doğru olduğundan emin olursunuz (yojimbo87 tarafından önerilen apachectl configtest ile aynı).

Ayrıca her vhostun nerede beyan edildiğini de bileceksiniz. Yapılandırma dosyalarınız karışıksa kullanışlı olabilir. ;)


24

Sanal ana makine yapılandırmanızda hata ayıklamaya çalışıyorsanız, Apache -S komut satırı anahtarını yararlı bulabilirsiniz. Yani, aşağıdaki komutu yazın:

httpd -S

Bu komut, Apache'nin yapılandırma dosyasını nasıl ayrıştırdığının bir açıklamasını atar. IP adreslerinin ve sunucu adlarının dikkatle incelenmesi, yapılandırma hatalarının ortaya çıkmasına yardımcı olabilir. ( Diğer komut satırı seçenekleri için httpd programının belgelerine bakın ).


9
apache2ctl -S
Apache2'de

1
veya dönüşümlü olarakAPACHE_RUN_USER=www-data APACHE_RUN_GROUP=www-data /usr/sbin/apache2 -S
rleir

12

Önce yapılandırma dosyalarında sözdizimi hataları olup olmadığını kontrol edin apachectl configtestve ardından apache hata günlüklerine bakın .


Sunucum yeniden başlatıldığında ve herhangi bir sorun olmadan yapılandırmayı yeniden yüklediğinden sözdizimi hatası yok. Hangi günlükte yapılandırmamla ilgili ayrıntıları bulabileceğimi bilmiyorum.
GaetanZ

Hata günlükleri genellikle '/var/log/apache2/error.log' dosyasında bulunur.
yojimbo87

Ayrıca "apache2ctl -t" kullanabilirsiniz.
Larry Silverman

11

apachectl -SKomutu kullanırken gösterilmeyen yeni bir VirtualHost yapılandırma dosyası vardı . Kafa çizilmesinden sonra dosyamda ".conf" soneki olmadığını fark ettim. Dosyayı bu sonekle yeniden adlandırdığımda Vhost'um gösterilmeye ve çalışmaya başladı!


8

Son zamanlarda bir VirtualHost ile ilgili bazı sorunlar yaşadım. a2ensiteBir ana bilgisayarı etkinleştirmek için kullandım ama bir yeniden başlatma çalıştırmadan önce (ki sunucu başarısız olduğunda öldürür) koştum

apache2ctl -S

Bu da size sanal ana makinelerinizde neler olduğu hakkında bilgi verir. Mükemmel değil, ama yardımcı oluyor.


3

Kendi hatamı buldum, günlük dosyası adı eklemedim: ErrorLog / var / log / apache2
Ve bu yol: Dizin "/ usr / share / doc /" Web sitesi kaynakları içermiyordu.

Bu ikisini değiştirdikten sonra hepsi çalıştı. İlginçtir, apache herhangi bir hata vermedi, sadece web sitemi Mac OS Sierra'da sessizce açmadı.


İyi cevap, benzer sorunu bulmama yardım et. Tüm sözdizimi ve -S vhosts doğru, hala yanlış site hizmet. Görünüşe göre: 80 ve: 443, aynı şeyleri karıştırıyor gibi görünen aynı erişim günlük dosyasına sahip. Her bağlantı noktası için ayrı dosya ve siteler çalışmaya başladı.
David McNeill
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.