Ubuntu 14.04에서 사용자 지정 오류 페이지를 사용하도록 Apache를 구성하는 방법
소개
Apache는 세계에서 가장 널리 사용되는 웹 서버입니다. 잘 지원되고 기능이 풍부하며 유연합니다. 웹 페이지를 디자인할 때 사용자에게 표시되는 모든 콘텐츠를 사용자 지정하는 것이 유용한 경우가 많습니다. 여기에는 사용할 수 없는 콘텐츠를 요청할 때의 오류 페이지가 포함됩니다. 이 가이드에서는 Ubuntu 14.04에서 사용자 지정 오류 페이지를 사용하도록 Apache를 구성하는 방법을 보여줍니다.
전제 조건
이 가이드를 시작하려면 sudo
권한이 있는 루트가 아닌 사용자가 필요합니다. 이 가이드를 따라 이 유형의 사용자를 설정할 수 있습니다.
사용자 지정 오류 페이지 만들기
데모 목적으로 몇 가지 사용자 지정 오류 페이지를 생성하지만 사용자 지정 페이지는 분명히 다를 것입니다.
Ubuntu의 Apache 설치가 기본 문서 루트를 설정하는 /var/www/html
디렉토리에 사용자 지정 오류 페이지를 넣습니다. custom_404.html
이라는 404 오류에 대한 페이지와 custom_50x.html
이라는 일반 500 수준 오류에 대한 페이지를 만들 것입니다. 테스트만 하는 경우 다음 줄을 사용할 수 있습니다. 그렇지 않으면 다음 위치에 자신의 콘텐츠를 넣으십시오.
- echo "<h1 style='color:red'>Error 404: Not found :-(</h1>" | sudo tee /var/www/html/custom_404.html
- echo "<p>I have no idea where that file is, sorry. Are you sure you typed in the correct URL?</p>" | sudo tee -a /var/www/html/custom_404.html
- echo "<h1>Oops! Something went wrong...</h1>" | sudo tee /var/www/html/custom_50x.html
- echo "<p>We seem to be having some technical difficulties. Hang tight.</p>" | sudo tee -a /var/www/html/custom_50x.html
이제 클라이언트 요청으로 인해 다른 오류가 발생할 때 제공할 수 있는 두 개의 사용자 지정 오류 페이지가 있습니다.
오류 페이지를 사용하도록 Apache 구성
이제 올바른 오류 조건이 발생할 때마다 이러한 페이지를 활용해야 한다고 Apache에 알리기만 하면 됩니다. 구성하려는 /etc/apache2/sites-enabled
디렉터리에서 가상 호스트 파일을 엽니다. 000-default.conf
라는 기본 서버 블록 파일을 사용하지만 기본 파일이 아닌 파일을 사용하는 경우 자체 서버 블록을 조정해야 합니다.
- sudo nano /etc/apache2/sites-enabled/000-default.conf
이제 Apache를 사용자 지정 오류 페이지로 가리킬 수 있습니다.
올바른 사용자 지정 페이지에 직접 오류 발생
ErrorDocument
지시문을 사용하여 각 오류 유형을 연결된 오류 페이지와 연결할 수 있습니다. 이것은 현재 정의된 가상 호스트 내에서 설정할 수 있습니다. 기본적으로 각 오류에 대한 http 상태 코드를 오류 발생 시 제공하려는 페이지에 매핑하기만 하면 됩니다.
이 예에서 오류 매핑은 다음과 같습니다.
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ErrorDocument 404 /custom_404.html
ErrorDocument 500 /custom_50x.html
ErrorDocument 502 /custom_50x.html
ErrorDocument 503 /custom_50x.html
ErrorDocument 504 /custom_50x.html
</VirtualHost>
이 변경만으로도 지정된 오류가 발생할 때 사용자 정의 오류 페이지를 제공하기에 충분합니다.
그러나 클라이언트가 오류 페이지를 직접 요청할 수 없도록 추가 구성 세트를 추가할 것입니다. 이렇게 하면 페이지의 텍스트가 오류를 참조하지만 http 상태가 "200\(성공적인 요청을 나타냄)인 이상한 상황을 방지할 수 있습니다.
오류 페이지가 직접 요청되면 404로 응답
이 동작을 구현하려면 각 사용자 정의 페이지에 대해 Files
블록을 추가해야 합니다. 내부에서 REDIRECT_STATUS
환경 변수가 설정되었는지 여부를 테스트할 수 있습니다. ErrorDocument
지시문이 요청을 처리할 때만 설정해야 합니다. 환경 변수가 비어 있으면 404 오류가 발생합니다.
<VirtualHost *:80>
. . .
ErrorDocument 404 /custom_404.html
ErrorDocument 500 /custom_50x.html
ErrorDocument 502 /custom_50x.html
ErrorDocument 503 /custom_50x.html
ErrorDocument 504 /custom_50x.html
<Files "custom_404.html">
<If "-z %{ENV:REDIRECT_STATUS}">
RedirectMatch 404 ^/custom_404.html$
</If>
</Files>
<Files "custom_50x.html">
<If "-z %{ENV:REDIRECT_STATUS}">
RedirectMatch 404 ^/custom_50x.html$
</If>
</Files>
</VirtualHost>
오류 페이지를 클라이언트에서 직접 요청하면 올바른 환경 변수가 설정되지 않아 404 오류가 발생합니다.
500 수준 오류에 대한 테스트 설정
존재하지 않는 콘텐츠를 요청하여 구성을 테스트하기 위해 404 오류를 쉽게 생성할 수 있습니다. 500 수준 오류를 테스트하려면 올바른 페이지가 반환되도록 더미 프록시 패스를 설정해야 합니다.
가상 호스트 하단에 ProxyPass
지시문을 추가합니다. /proxytest
에 대한 요청을 로컬 컴퓨터의 포트 9000으로 보냅니다(실행 중인 서비스가 없음).
<VirtualHost *:80>
. . .
ErrorDocument 404 /custom_404.html
ErrorDocument 500 /custom_50x.html
ErrorDocument 502 /custom_50x.html
ErrorDocument 503 /custom_50x.html
ErrorDocument 504 /custom_50x.html
<Files "custom_404.html">
<If "-z %{ENV:REDIRECT_STATUS}">
RedirectMatch 404 ^/custom_404.html$
</If>
</Files>
<Files "custom_50x.html">
<If "-z %{ENV:REDIRECT_STATUS}">
RedirectMatch 404 ^/custom_50x.html$
</If>
</Files>
ProxyPass /proxytest "http://localhost:9000"
</VirtualHost>
완료되면 파일을 저장하고 닫습니다.
이제 다음을 입력하여 mod_proxy
및 mod_proxy_http
모듈을 활성화합니다.
- sudo a2enmod proxy
- sudo a2enmod proxy_http
Apache 다시 시작 및 페이지 테스트
다음을 입력하여 구문 오류에 대한 구성 파일을 테스트하십시오.
- sudo apache2ctl configtest
보고된 모든 문제를 해결합니다. 파일에 구문 오류가 없으면 다음을 입력하여 Apache를 다시 시작하십시오.
- sudo service apache2 restart
이제 서버의 도메인 또는 IP 주소로 이동하여 존재하지 않는 파일을 요청하면 설정한 404 페이지가 표시됩니다.
http://server_domain_or_IP/thiswillerror
더미 프록시 패스에 대해 설정한 위치로 이동하면 사용자 지정 500 수준 페이지에서 "503 서비스를 사용할 수 없음\ 오류가 표시됩니다.
http://server_domain_or_IP/proxytest
이제 돌아가서 Apache 구성에서 가짜 프록시 패스 행을 제거할 수 있습니다. 다른 곳에서 사용할 필요가 없는 경우 프록시 모듈을 비활성화할 수 있습니다.
- sudo a2dismod proxy
- sudo a2dismod proxy_http
이러한 변경 사항을 구현하려면 서버를 다시 시작하십시오.
- sudo service apache2 restart
결론
이제 사이트에 대한 사용자 지정 오류 페이지를 제공해야 합니다. 이것은 사용자가 문제를 겪고 있을 때에도 사용자 경험을 개인화할 수 있는 쉬운 방법입니다. 이러한 페이지에 대한 한 가지 제안은 도움이나 추가 정보를 얻기 위해 이동할 수 있는 위치에 대한 링크를 포함하는 것입니다. 이렇게 하면 연결된 오류가 발생하는 경우에도 링크 대상에 액세스할 수 있는지 확인하십시오.