웹사이트 검색

Ubuntu 14.04에서 사용자 지정 오류 페이지를 사용하도록 Apache를 구성하는 방법


소개

Apache는 세계에서 가장 널리 사용되는 웹 서버입니다. 잘 지원되고 기능이 풍부하며 유연합니다. 웹 페이지를 디자인할 때 사용자에게 표시되는 모든 콘텐츠를 사용자 지정하는 것이 유용한 경우가 많습니다. 여기에는 사용할 수 없는 콘텐츠를 요청할 때의 오류 페이지가 포함됩니다. 이 가이드에서는 Ubuntu 14.04에서 사용자 지정 오류 페이지를 사용하도록 Apache를 구성하는 방법을 보여줍니다.

전제 조건

이 가이드를 시작하려면 sudo 권한이 있는 루트가 아닌 사용자가 필요합니다. 이 가이드를 따라 이 유형의 사용자를 설정할 수 있습니다.

사용자 지정 오류 페이지 만들기

데모 목적으로 몇 가지 사용자 지정 오류 페이지를 생성하지만 사용자 지정 페이지는 분명히 다를 것입니다.

Ubuntu의 Apache 설치가 기본 문서 루트를 설정하는 /var/www/html 디렉토리에 사용자 지정 오류 페이지를 넣습니다. custom_404.html이라는 404 오류에 대한 페이지와 custom_50x.html이라는 일반 500 수준 오류에 대한 페이지를 만들 것입니다. 테스트만 하는 경우 다음 줄을 사용할 수 있습니다. 그렇지 않으면 다음 위치에 자신의 콘텐츠를 넣으십시오.

  1. echo "<h1 style='color:red'>Error 404: Not found :-(</h1>" | sudo tee /var/www/html/custom_404.html
  2. 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
  3. echo "<h1>Oops! Something went wrong...</h1>" | sudo tee /var/www/html/custom_50x.html
  4. 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라는 기본 서버 블록 파일을 사용하지만 기본 파일이 아닌 파일을 사용하는 경우 자체 서버 블록을 조정해야 합니다.

  1. 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_proxymod_proxy_http 모듈을 활성화합니다.

  1. sudo a2enmod proxy
  2. sudo a2enmod proxy_http

Apache 다시 시작 및 페이지 테스트

다음을 입력하여 구문 오류에 대한 구성 파일을 테스트하십시오.

  1. sudo apache2ctl configtest

보고된 모든 문제를 해결합니다. 파일에 구문 오류가 없으면 다음을 입력하여 Apache를 다시 시작하십시오.

  1. sudo service apache2 restart

이제 서버의 도메인 또는 IP 주소로 이동하여 존재하지 않는 파일을 요청하면 설정한 404 페이지가 표시됩니다.

http://server_domain_or_IP/thiswillerror

더미 프록시 패스에 대해 설정한 위치로 이동하면 사용자 지정 500 수준 페이지에서 "503 서비스를 사용할 수 없음\ 오류가 표시됩니다.

http://server_domain_or_IP/proxytest

이제 돌아가서 Apache 구성에서 가짜 프록시 패스 행을 제거할 수 있습니다. 다른 곳에서 사용할 필요가 없는 경우 프록시 모듈을 비활성화할 수 있습니다.

  1. sudo a2dismod proxy
  2. sudo a2dismod proxy_http

이러한 변경 사항을 구현하려면 서버를 다시 시작하십시오.

  1. sudo service apache2 restart

결론

이제 사이트에 대한 사용자 지정 오류 페이지를 제공해야 합니다. 이것은 사용자가 문제를 겪고 있을 때에도 사용자 경험을 개인화할 수 있는 쉬운 방법입니다. 이러한 페이지에 대한 한 가지 제안은 도움이나 추가 정보를 얻기 위해 이동할 수 있는 위치에 대한 링크를 포함하는 것입니다. 이렇게 하면 연결된 오류가 발생하는 경우에도 링크 대상에 액세스할 수 있는지 확인하십시오.