[server] 외부 스크립트를 호출하지 않고 아파치에서 503 상태를 반환하는 방법

시간이 오래 걸리는 SE_firendly 방식으로 유지 관리를 위해 다운되는 동안 내 사이트 중 하나에서 503 상태 코드를 반환해야합니다. 외부 스크립트를 호출하지 않고이를 수행하는 방법을 찾지 못하는 것 같습니다.

상태 헤더를 설정하는 PHP 스크립트를 호출하는 것과 같은 해킹에 의존하지 않고 임의의 HTTP 상태 코드를 반환 할 수있는 아파치 지시어가 있습니까?



답변

이는 모든 요청에 ​​503 상태와 함께 정적 보류 페이지를 제공합니다.

RedirectMatch 503 ^/(?!holding\.html)
ErrorDocument 503 /holding.html
Header always set Retry-After "18000"

RedirectMatch는 홀딩 페이지 자체를 무효화하여 무한 루프를 생성하는 데 사용됩니다.

mod_header는이 예제에서 18000 초 (5 시간) 후에 백업해야한다고 Google / 다른 봇 등에 알릴 수 있도록 Retry-After 헤더를 설정하는 데 사용됩니다. sudo ap2enmod header헤더 지시문에 필요한 mod_header를 활성화 할 수 있습니다 .


답변

시험

Redirect 503 / /

에서 http://httpd.apache.org/docs/2.2/mod/mod_alias.html#redirect :

숫자 상태 코드를 상태 값으로 제공하여 다른 상태 코드를 반환 할 수 있습니다. 상태가 300에서 399 사이 인 경우 URL 인수가 존재해야하며 그렇지 않으면 생략해야합니다. 상태는 Apache 코드에 알려야합니다 (http_protocol.c의 send_error_response 함수 참조).

추가 참고 : 503 오류에 대한 기본 / 구성된 ErrorDocument가 표시됩니다.


답변

유지 관리 모드를보다 유연하게 만들려면 특수 파일이있을 때 503을 설정하십시오.

RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}/.maintenance -f
RewriteRule .* - [R=503]

참고 : DOCUMENT_ROOT의 위치는 httpd 2.2와 2.4 사이에서 다를 수 있습니다

이렇게하면 “touch /path/to/docroot/.maintenance”만 있으면 사이트에서 503을 즉시 반환 할 수 있습니다. 그런 다음 모든 것을 순결하게 만들려면 형식이 좋은 사용자 정의 HTML 오류 페이지를 작성하여 올바른 아파치 서버의 구성 파일에 추가하십시오.

ProxyErrorOverride on
ErrorDocument 503 /error/503.html

웹 서버가 여러 개인 경우 보너스 포인트의 경우 공유 파일 시스템에서 .maintenance의 위치를 ​​지정하거나 더 많은 보너스 포인트를 설정하십시오.

pdsh -w $web1_ip,$web2_ip,$web3_ip "sudo touch /path/to/docroot/.maintenance"

유지 관리 모드 파일을 기반으로하는 장점은 응용 프로그램이 빠르고 간단하며 모든 백엔드 503을 한 번에 처리 할 수 ​​있기 때문에 프런트 엔드 캐싱 프록시를 처리하기가 더 쉬울 때 작동한다는 것입니다.

출처 :


답변