아파치 가상 호스트 구성을 디버깅하는 방법?


138

다시 한 번 아파치 가상 호스트 구성에 문제가 있습니다. (기본 구성은 특정 구성 대신 사용됩니다).

문제는 실제로 잘못된 구성이 아니라 해결 방법입니다.

누구든지 이런 종류의 문제를 빨리 해결할 수있는 좋은 조언이 있습니까?

더 많은 정보.

기본 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
그것은 매우 유용합니다. 감사합니다.하지만 충분하지 않습니다. 호스트에 문제가있어서 사용해야합니다. 왜 그런지 모르겠습니다. 아파치가 호스트를 선택하는 방법에 대한 로그를 얻고 싶습니다.
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

모든 가상 호스트 목록을 얻을 수 있습니다. 어떤 가상 호스트가 기본 호스트인지 알고 구문이 올바른지 확인하십시오 (yojimbo87이 제안한 apachectl configtest와 동일).

또한 각 호스트가 선언 된 위치를 알 수 있습니다. 구성 파일이 엉망인 경우 편리 할 수 ​​있습니다. ;)


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다음 아파치 오류 로그 를 살펴보십시오 .


서버를 재부팅하고 문제없이 구성을 다시로드하기 때문에 구문 오류가 없습니다. 구성에 대한 세부 정보를 찾을 수있는 로그를 모릅니다.
GaetanZ

오류 로그는 일반적으로 '/var/log/apache2/error.log'파일에 있습니다.
yojimbo87

"apache2ctl -t"를 사용할 수도 있습니다.
Larry Silverman

11

apachectl -S명령을 사용할 때 표시되지 않은 새로운 VirtualHost 구성 파일이 있습니다. 머리를 많이 긁은 후 파일에 접미사 ".conf"가 없음을 깨달았습니다. 해당 접미사로 파일 이름을 바꾸면 내 Vhost가 표시되고 작동하기 시작했습니다!


8

최근에 VirtualHost에 문제가있었습니다. a2ensite호스트를 활성화하는 데 사용 되었지만 재시작을 실행하기 전에 (실패한 서버를 죽일 수 있음)

apache2ctl -S

어떤 가상 호스트에 무슨 일이 일어나고 있는지에 대한 정보를 제공합니다. 완벽하지는 않지만 도움이됩니다.


3

내 실수를 발견하고 로그 파일 이름을 추가하지 않았습니다 : ErrorLog / var / log / apache2
그리고이 경로 : "/ usr / share / doc /"디렉토리 웹 사이트 소스를 포함하지 않았습니다.

이 두 가지를 바꾼 후에는 모두 효과가있었습니다. 흥미롭게도, 아파치는 오류를 발생시키지 않았으며, Mac OS Sierra에서 자동으로 웹 사이트를 열지 않았습니다.


좋은 대답, 비슷한 문제를 찾도록 도와주세요. 모든 구문과 -S 가상 호스트가 정확하지만 여전히 잘못된 사이트가 제공되었습니다. : 80과 : 443은 동일한 액세스 로그 파일을 가지고있어서 혼란 스럽습니다. 각 포트마다 파일이 분리되어 사이트가 작동하기 시작했습니다.
David McNeill
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.