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


26

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

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


2
PHP 파일을 실행하는 것이 "해킹"으로 분류되는지 확실하지 않습니다. 웹 서버가 설계된 것과 정확히 같은 종류입니다.
Mark Henderson

3
흠. 한 줄의 서버 응답을 설정하기 위해 해석 된 전체 스크립팅 언어를 호출하면 해킹으로 간주됩니다. 정교한 해결 방법없이 응답 헤더 행을 설정하면 웹 서버가 설계된 것과 더 가깝습니다.
dan mackinlay

답변:


32

이는 모든 요청에 ​​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를 활성화 할 수 있습니다 .


2
+1 : 측면 설명 : [RedirectMatch 503. *] 및 [헤더는 항상 "18000"이후 재시도 설정] 규칙 만 추가 할 수 있으며 기본 503 오류 메시지와 함께 작동합니다. conf.d / localized-error-pages 파일을 확인하여 다른 언어 (협상, 별명 및 모듈 포함)에 대해 다른 메시지를 설정하십시오.
lepe

작동합니다! 개인 웹 사이트에는을 사용 RedirectMatch 503 ^/(?!\.Error/.*|dragonlord-bg\.jpg)합니다.
bwDraco

7

시험

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가 표시됩니다.


고마워 데이빗. mod_alias는 그 대답을 찾을 것으로 예상되는 곳이 아니지만 일을하는 것처럼 보입니다.
dan mackinlay

네, 리디렉션은 실제로 당신이하고있는 일에 대한 올바른 동사가 아닙니다 :)
David Pashley

리디렉션 503에는 하나의 인수 인 URL 경로가 누락되어 항상 필수입니다. 반면에 리디렉션 된 코드가 300-399가 아닌 경우 URL을 생략해야합니다.

1
"리디렉션은 두 개 또는 세 개의 인수 (선택적 상태, 다음에 리디렉션 할 문서 및 도착 URL)를 취합니다."라는 문맥에서보다 완전한 예제를 제공 할 수 있습니까?
Tom

4
Redirect 503 /작동하는 것 같습니다.
mpartel

0

유지 관리 모드를보다 유연하게 만들려면 특수 파일이있을 때 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을 한 번에 처리 할 수 ​​있기 때문에 프런트 엔드 캐싱 프록시를 처리하기가 더 쉬울 때 작동한다는 것입니다.

출처 :

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.