วิธีการดีบักการกำหนดค่าโฮสต์เสมือน apache


138

อีกครั้งฉันมีปัญหากับการกำหนดค่าโฮสต์เสมือน apache ของฉัน (ใช้การกำหนดค่าเริ่มต้นแทนการใช้เฉพาะของฉัน)

ปัญหาไม่ได้เป็นการกำหนดค่าที่ผิดจริงๆ แต่จะแก้ไขได้อย่างไร

ใครบ้างที่มีคำแนะนำที่ดีในการแก้ไขปัญหาประเภทนี้อย่างรวดเร็ว?

ข้อมูลเพิ่มเติมบางส่วน

ไฟล์ conf เริ่มต้นคือไฟล์นี้:

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>

และการกำหนดค่าโฮสต์เสมือนที่ไม่ได้ใช้ก็คือ:

<VirtualHost *:*>

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

</VirtualHost>

คำตอบ:


198

ตรวจสอบไวยากรณ์

วิธีตรวจสอบไฟล์การกำหนดค่าเพื่อดูข้อผิดพลาดทางไวยากรณ์:

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

# Debian-based (Ubuntu)
apache2ctl -t

# MacOS
apachectl -t

รายการโฮสต์เสมือน

ในการแสดงรายการโฮสต์เสมือนทั้งหมดและที่ตั้ง:

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

# Debian-based (Ubuntu)
apache2ctl -S

# MacOS
apachectl -S

5
-Sเป็นคำพ้องความหมายสำหรับ-t -D DUMP_VHOSTSทั้งสองนั้นเหมือนกัน
aron.duby

2
สำหรับ Windows (ถ้าคุณใช้ xampp) คุณมีคำสั่งเดียวกันนี้ที่: \ xampp \ apache \ bin
Jahmic

สำหรับ Wamp:c:\\wamp\\bin\\apache\\apache2.4.9\\bin\\httpd.exe -S
Lg102

2
มันมีประโยชน์มากขอบคุณ แต่มันไม่เพียงพอฉันมีปัญหากับโฮสต์ที่ควรใช้และไม่ใช่ฉันไม่รู้ว่าทำไมฉันต้องการบันทึกเกี่ยวกับวิธีที่ apache เลือก vhost
Loenix

1
มีวิธีใดที่จะทำให้ Apache เพิ่มข้อความลงในไฟล์ข้อผิดพลาดหรือที่อื่น ๆ เมื่อมีการเข้าถึงจริงสำหรับโฮสต์เสมือนหรือโฮสต์หลักที่ให้ข้อมูลแบบไดนามิกเกี่ยวกับโฮสต์ที่ถูกเลือก? ฉันได้ลอง LoadModule log_debug_module modules / mod_log_debug.so ... LogMessage "Debug 1" hook = all
David Spector

28

นี่คือคำสั่งที่ฉันคิดว่าอาจเป็นประโยชน์ได้บ้าง

apachectl -t -D DUMP_VHOSTS

คุณจะได้รับรายชื่อของ vhost ทั้งหมดคุณจะรู้ว่าอันไหนเป็นค่าเริ่มต้นและคุณต้องแน่ใจว่าไวยากรณ์ของคุณนั้นถูกต้อง (เหมือนกับ apachectl configtest ที่ yojimbo87 แนะนำ)

นอกจากนี้คุณยังจะรู้ว่าแต่ละ vhost มีการประกาศ มันจะมีประโยชน์หากไฟล์ปรับแต่งของคุณไม่เป็นระเบียบ ;)


24

หากคุณพยายามดีบักการกำหนดค่าโฮสต์เสมือนคุณอาจพบว่าสวิตช์บรรทัดคำสั่ง Apache -S มีประโยชน์ นั่นคือพิมพ์คำสั่งต่อไปนี้:

httpd -S

คำสั่งนี้จะถ่ายโอนคำอธิบายวิธีที่ Apache แยกวิเคราะห์ไฟล์การกำหนดค่า การตรวจสอบที่อยู่ IP และชื่อเซิร์ฟเวอร์อย่างระมัดระวังอาจช่วยเปิดเผยข้อผิดพลาดในการกำหนดค่า (ดูเอกสารสำหรับโปรแกรมhttpdสำหรับตัวเลือกบรรทัดคำสั่งอื่น ๆ )


9
ใน Apache2 นี่คือapache2ctl -S
artfulrobot

1
หรือสลับกันAPACHE_RUN_USER=www-data APACHE_RUN_GROUP=www-data /usr/sbin/apache2 -S
rleir

12

แรกตรวจสอบการตั้งค่าไฟล์สำหรับข้อผิดพลาดทางไวยากรณ์ด้วยapachectl configtestแล้วมองเข้าไปในข้อผิดพลาด Apache บันทึก


ฉันไม่มีข้อผิดพลาดทางไวยากรณ์เนื่องจากเซิร์ฟเวอร์ของฉันรีบูตและโหลดการกำหนดค่าใหม่โดยไม่มีปัญหาใด ๆ ฉันไม่รู้ว่าบันทึกใดที่ฉันสามารถหารายละเอียดเกี่ยวกับการกำหนดค่า
GaetanZ

บันทึกข้อผิดพลาดมักจะอยู่ในไฟล์ '/var/log/apache2/error.log'
yojimbo87

คุณยังสามารถใช้ "apache2ctl -t"
Larry Silverman

11

ฉันมีไฟล์คอนฟิกูเรชัน VirtualHost ใหม่ที่ไม่แสดงเมื่อใช้apachectl -Sคำสั่ง ฉันพบว่าไฟล์ของฉันไม่มีส่วนต่อท้าย ".conf" เมื่อฉันเปลี่ยนชื่อไฟล์ด้วยคำต่อท้ายนั้น Vhost ของฉันก็เริ่มแสดงและทำงานได้!


8

ฉันเพิ่งมีปัญหาบางอย่างกับ VirtualHost ฉันเคยa2ensiteเปิดใช้งานโฮสต์ แต่ก่อนที่จะเรียกใช้รีสตาร์ท (ซึ่งจะฆ่าเซิร์ฟเวอร์เมื่อล้มเหลว) ฉันวิ่ง

apache2ctl -S

ซึ่งจะให้ข้อมูลบางอย่างเกี่ยวกับสิ่งที่เกิดขึ้นกับโฮสต์เสมือนของคุณ มันไม่สมบูรณ์แบบ แต่ก็ช่วยได้


3

ฉันพบข้อผิดพลาดของตัวเองฉันไม่ได้เพิ่มชื่อไฟล์บันทึก: ErrorLog / var / log / apache2
และพา ธ นี้: ไดเรกทอรี "/ usr / share / doc /" ไม่มีแหล่งเว็บไซต์

หลังจากที่ฉันเปลี่ยนสองคนนี้ทำงานทั้งหมด ที่น่าสนใจ apache ไม่มีปัญหาข้อผิดพลาดใด ๆ เพียงแค่ไม่ได้เปิดเว็บไซต์ของฉันอย่างเงียบ ๆ บน Mac OS Sierra ของฉัน


คำตอบที่ดีช่วยฉันค้นหาปัญหาที่คล้ายกัน ไวยากรณ์และ -S vhosts ทั้งหมดถูกต้องและยังคงให้บริการเว็บไซต์ผิด กลายเป็น: 80 และ: 443 มีไฟล์บันทึกการเข้าใช้งานเหมือนกันซึ่งดูเหมือนจะทำให้เกิดความสับสน แยกไฟล์สำหรับแต่ละพอร์ตและไซต์เริ่มทำงาน
David McNeill
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.