Làm thế nào để gỡ lỗi một cấu hình máy chủ ảo apache?


138

Một lần nữa, tôi gặp vấn đề với cấu hình máy chủ ảo apache. (Cấu hình mặc định được sử dụng thay cho cấu hình cụ thể của tôi).

Vấn đề không thực sự là cấu hình sai mà là giải quyết nó như thế nào.

Có ai có lời khuyên tốt để giải quyết loại vấn đề này một cách nhanh chóng?

Một số thông tin thêm.

Tệp conf mặc định là tệp này:

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>

Và cấu hình máy chủ ảo không áp dụng là cái này:

<VirtualHost *:*>

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

</VirtualHost>

Câu trả lời:


198

Kiểm tra cú pháp

Để kiểm tra các tệp cấu hình cho các lỗi cú pháp:

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

# Debian-based (Ubuntu)
apache2ctl -t

# MacOS
apachectl -t

Liệt kê máy chủ ảo

Để liệt kê tất cả các máy chủ ảo và vị trí của chúng:

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

# Debian-based (Ubuntu)
apache2ctl -S

# MacOS
apachectl -S

5
-Slà một từ đồng nghĩa -t -D DUMP_VHOSTSvì vậy hai cái đó giống nhau
aron.duby

2
Đối với Windows, (nếu bạn đang sử dụng xampp), bạn có các lệnh tương tự tại: \ xampp \ apache \ bin
Jahmic 6/12/2015

Đối với Wamp:c:\\wamp\\bin\\apache\\apache2.4.9\\bin\\httpd.exe -S
Lg102

2
Điều đó rất hữu ích, cảm ơn bạn nhưng nó vẫn chưa đủ, tôi gặp một số rắc rối với vhost rằng nó nên được sử dụng và không, tôi không biết tại sao, tôi muốn nhận được nhật ký về cách apache chọn vhost.
Loenix

1
Có cách nào để khiến Apache thêm thông báo vào tệp lỗi hoặc ở nơi khác khi có quyền truy cập thực tế cho máy chủ ảo hoặc máy chủ chính cung cấp thông tin động về máy chủ nào được chọn không? Tôi đã thử các mô-đun LoadModule log_debug_module / mod_log_debug.so ... LogMessage "Debug 1" hook = all
David Spector

28

Đây là một lệnh tôi nghĩ có thể giúp đỡ:

apachectl -t -D DUMP_VHOSTS

Bạn sẽ nhận được một danh sách tất cả các vhost, bạn sẽ biết cái nào là mặc định và bạn sẽ đảm bảo rằng cú pháp của bạn là chính xác (giống như apachectl configtest được đề xuất bởi yojimbo87).

Bạn cũng sẽ biết nơi mỗi vhost được khai báo. Nó có thể hữu ích nếu các tập tin cấu hình của bạn là một mớ hỗn độn. ;)


24

Nếu bạn đang cố gắng gỡ lỗi cấu hình máy chủ ảo của mình, bạn có thể thấy công tắc dòng lệnh Apache -S hữu ích. Đó là, gõ lệnh sau:

httpd -S

Lệnh này sẽ đưa ra một mô tả về cách Apache phân tích tệp cấu hình. Kiểm tra cẩn thận các địa chỉ IP và tên máy chủ có thể giúp phát hiện ra các lỗi cấu hình. (Xem tài liệu cho chương trình httpd để biết các tùy chọn dòng lệnh khác).


9
Trong Apache2, đây làapache2ctl -S
artfulrobot

1
hoặc thay thếAPACHE_RUN_USER=www-data APACHE_RUN_GROUP=www-data /usr/sbin/apache2 -S
rleir

12

Đầu tiên hãy kiểm tra các tệp cấu hình cho các lỗi cú pháp apachectl configtestvà sau đó xem xét các bản ghi lỗi apache .


Tôi không có lỗi cú pháp vì máy chủ của tôi khởi động lại và tải lại cấu hình mà không gặp vấn đề gì. Tôi không biết trong nhật ký nào tôi có thể tìm thấy chi tiết về cấu hình của mình.
GaetanZ

Nhật ký lỗi thường nằm trong tệp '/var/log/apache2/error.log'.
yojimbo87

Bạn cũng có thể sử dụng "apache2ctl -t".
Larry Silverman

11

Tôi đã có một tệp cấu hình Virtualhost mới không hiển thị khi sử dụng apachectl -Slệnh. Sau nhiều lần gãi đầu, tôi nhận ra rằng tập tin của mình không có hậu tố ".conf". Khi tôi đổi tên tệp với hậu tố đó, Vhost của tôi bắt đầu hiển thị và hoạt động!


8

Gần đây tôi đã có một số vấn đề với Virtualhost. Tôi đã từng a2ensitekích hoạt máy chủ nhưng trước khi chạy khởi động lại (điều này sẽ giết máy chủ khi không thành công) tôi đã chạy

apache2ctl -S

Cung cấp cho bạn một số thông tin về những gì đang xảy ra với máy chủ ảo của bạn. Nó không hoàn hảo, nhưng nó giúp.


3

Tôi đã tìm thấy lỗi của mình, tôi đã không thêm tên tệp nhật ký: ErrorLog / var / log / apache2
Và đường dẫn này: Thư mục "/ usr / share / doc /" Không chứa nguồn trang web.

Sau khi tôi thay đổi hai cái này, tất cả đều hoạt động. Thật thú vị, apache không phát sinh lỗi, chỉ không mở trang web của tôi một cách im lặng trên Mac OS Sierra của tôi.


Câu trả lời tốt, giúp tôi tìm ra vấn đề tương tự. Tất cả cú pháp và -S vhost đều đúng, trang web vẫn phục vụ sai. Hóa ra là: 80 và: 443 có cùng tệp nhật ký truy cập, điều này dường như gây nhầm lẫn cho mọi thứ. Tập tin riêng biệt cho mỗi cổng và các trang web bắt đầu làm việc.
David McNeill
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.