Bagaimana cara men-debug konfigurasi host virtual Apache?

140

Sekali lagi, saya memiliki masalah dengan konfigurasi host virtual apache saya. (Konfigurasi default digunakan sebagai pengganti konfigurasi khusus saya).

Masalahnya bukanlah kesalahan konfigurasi tetapi bagaimana mengatasinya.

Apakah ada yang punya saran bagus untuk menyelesaikan masalah semacam ini dengan cepat?

Beberapa informasi lagi.

File conf default adalah yang ini:

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>

Dan konfigurasi host virtual yang tidak berlaku adalah yang ini:

<VirtualHost *:*>

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

</VirtualHost>
GaetanZ
sumber

Jawaban:

202

Pemeriksaan sintaks

Untuk memeriksa file konfigurasi untuk kesalahan sintaks:

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

# Debian-based (Ubuntu)
apache2ctl -t

# MacOS
apachectl -t

Buat daftar host virtual

Untuk mencantumkan semua host virtual, dan lokasinya:

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

# Debian-based (Ubuntu)
apache2ctl -S

# MacOS
apachectl -S
sqren
sumber
5
-Sadalah sinonim -t -D DUMP_VHOSTSsehingga keduanya sama
aron.duby
2
Untuk Windows, (jika Anda menggunakan xampp), Anda memiliki perintah yang sama di: \ xampp \ apache \ bin
Jahmic
Untuk Wamp:c:\\wamp\\bin\\apache\\apache2.4.9\\bin\\httpd.exe -S
Lg102
2
Itu sangat berguna, terima kasih tetapi itu tidak cukup, saya mendapat masalah dengan vhost yang harus digunakan dan tidak, saya tidak tahu mengapa, saya ingin mendapatkan log tentang bagaimana apache memilih vhost.
Loenix
1
Apakah ada cara untuk membuat Apache menambahkan pesan ke file kesalahan atau di tempat lain ketika akses aktual masuk untuk virtual atau host utama yang memberikan informasi dinamis tentang host mana yang dipilih? Saya telah mencoba LoadModule log_debug_module modules / mod_log_debug.so ... LogMessage "Debug 1" hook = all
David Spector
28

Inilah perintah yang menurut saya bisa membantu:

apachectl -t -D DUMP_VHOSTS

Anda akan mendapatkan daftar semua vhost, Anda akan tahu mana yang default dan Anda akan memastikan bahwa sintaks Anda benar (sama seperti configtest apachectl yang disarankan oleh yojimbo87).

Anda juga akan tahu di mana setiap vhost dideklarasikan. Ini bisa berguna jika file konfigurasi Anda berantakan. ;)

Arnaud Massé
sumber
24

Jika Anda mencoba men-debug konfigurasi host virtual, Anda mungkin menemukan sakelar baris perintah Apache -S berguna. Artinya, ketik perintah berikut:

httpd -S

Perintah ini akan mengeluarkan deskripsi tentang bagaimana Apache mengurai file konfigurasi. Pemeriksaan yang cermat atas alamat IP dan nama server dapat membantu mengungkap kesalahan konfigurasi. (Lihat dokumen untuk program httpd untuk opsi baris perintah lainnya).

Michael Spector
sumber
9
Di Apache2 iniapache2ctl -S
artfulrobot
1
atau secara bergantianAPACHE_RUN_USER=www-data APACHE_RUN_GROUP=www-data /usr/sbin/apache2 -S
rleir
12

Pertama periksa file konfigurasi untuk kesalahan sintaks dengan apachectl configtestdan kemudian lihat log kesalahan apache .

yojimbo87
sumber
Saya tidak memiliki kesalahan sintaks karena server saya melakukan boot ulang dan memuat ulang konfigurasi tanpa masalah. Saya tidak tahu di log mana saya dapat menemukan detail tentang konfigurasi saya.
GaetanZ
Log kesalahan biasanya terletak di file '/var/log/apache2/error.log'.
yojimbo87
Anda juga dapat menggunakan "apache2ctl -t".
Larry Silverman
12

Saya memiliki file konfigurasi VirtualHost baru yang tidak muncul saat menggunakan apachectl -Sperintah. Setelah banyak garukan kepala, saya menyadari bahwa file saya tidak memiliki sufiks ".conf". Setelah saya mengganti nama file dengan sufiks itu, Vhost saya mulai ditampilkan dan berfungsi!

GreensterRox
sumber
8

Saya baru-baru ini mengalami beberapa masalah dengan VirtualHost. Saya dulu a2ensitemengaktifkan host tetapi sebelum menjalankan restart (yang akan mematikan server jika gagal) saya berlari

apache2ctl -S

Yang memberi Anda beberapa info tentang apa yang terjadi dengan host virtual Anda. Itu tidak sempurna, tapi membantu.

Jacksonkr
sumber
3

Saya menemukan kesalahan saya sendiri, saya tidak menambahkan nama file log: ErrorLog / var / log / apache2
Dan jalur ini: Direktori "/ usr / share / doc /" Tidak berisi sumber situs web.

Setelah saya mengubah keduanya, semuanya bekerja. Menariknya, apache tidak mengeluarkan kesalahan apa pun, hanya saja tidak membuka situs web saya secara diam-diam di Mac OS Sierra saya.

Konstantin Vahrushev
sumber
Jawaban bagus, bantu saya menemukan masalah serupa. Semua sintaks dan -S vhosts benar, situs masih salah disajikan. Ternyata: 80 dan: 443 memiliki file log akses yang sama, yang sepertinya membingungkan. Pisahkan file untuk setiap port, dan situs mulai bekerja.
David McNeill