Harici komut dosyalarını çağırmadan 503 durumunu apache'de nasıl iade edebilirim


26

Zaman aşımına uğrayan SE_firendly tarzında bakım için kapalıyken sitelerimden birinden 503 durum kodu döndürmem gerekiyor. Bundan kaçınmayı tercih ettiğim harici komut dosyalarını çağırmadan bunun nasıl yapılacağını çözemiyorum.

Durum başlığını belirleyen bir php betiğini çağırmak gibi kesimlere başvurmadan keyfi bir HTTP durum kodu döndürmeme izin verecek bir apache yönergesi var mı?


2
Bir PHP dosyasını çalıştırmanın bir "hack" olarak sınıflandırıldığından emin değilim ... ... tam olarak bir web sunucusunun yapması gereken şey ...
Mark Henderson

3
Hm. Sunucu yanıtının tek bir satırını ayarlamak için bütün bir yorumlanmış komut dosyası dilini çağırmanın hack olarak nitelendirilebileceğini düşünüyorum. Ayrıntılı bir geçici çözüm olmadan yanıt başlıklarının ayarlanması bana web sunucularının ne yapmak için tasarlandıklarına daha yakın görünüyor.
dan mackinlay

Yanıtlar:


32

Bu, her talebe, 503 durumu ile birlikte statik bir tutma sayfası sunar.

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

RedirectMatch, tutma sayfasını, aksi takdirde sonsuz bir döngü oluşturacak şekilde olumsuzlamak için kullanılır.

mod_header, bir Retry-After başlığı ayarlamak için kullanılır, böylece Google / diğer botlara vb. bu örnekte 18000 saniye (5 saat) sonra yedeklemeniz gerektiğini söyleyebilirsiniz. sudo ap2enmod headerMod_header'ı (Başlık direktifi için gerekli olan) aktif hale getirebilirsiniz .


2
+1: Yandaki yorum: Yalnızca [RedirectMatch 503. *] Ve [Başlık her zaman Yeniden Dene "18000"] kurallarını ekleyebilir ve varsayılan 503 hata iletisiyle çalışır. Farklı diller için farklı bir ileti ayarlamak için conf.d / localized-error-pages dosyasını kontrol edin (anlaşma gerektirir, takma ad ve modüller içerir).
lepe

İşe yarıyor! Kişisel web sitem için kullanıyorum RedirectMatch 503 ^/(?!\.Error/.*|dragonlord-bg\.jpg).
bwDraco

7

Deneyin

Redirect 503 / /

Gönderen http://httpd.apache.org/docs/2.2/mod/mod_alias.html#redirect :

Diğer durum kodları, durum değeri olarak sayısal durum kodu verilerek döndürülebilir. Durum 300 ile 399 arasındaysa, URL argümanı mevcut olmalı, aksi takdirde ihmal edilmelidir. Durumun Apache koduyla bilinmesi gerektiğine dikkat edin (http_protocol.c içindeki send_error_response işlevine bakın).

Ek Not: Bu, 503 Hatası için varsayılan / yapılandırılmış ErrorDocument öğesini görüntüler.


Sağol David. mod_alias bu cevabı bulmayı umduğum yer değil, fakat işi yapıyor gibi görünüyor.
dan mackinlay

evet, Yönlendirme gerçekten yaptığınız şey için doğru bir fiil değildir :)
David Pashley

Yönlendirme 503, her zaman zorunlu olan bir argüman, URL-yolu eksik. Yönlendirilmiş kod 300-399 değilse, diğer yandan URL atlanmalıdır

1
Bunu yaparken bir hata alıyorum: "Yönlendirme iki veya üç argüman alıyor, isteğe bağlı bir durum, ardından yönlendirilecek belge ve hedef URL", bağlamda daha eksiksiz bir örnek verebilir misiniz?
Tom

4
Redirect 503 /iş gibi görünüyor.
mpartel

0

Bakım modunuzu daha esnek hale getirmek için, özel bir dosya olduğunda 503'ü ayarlayın, ala:

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

NOT: DOCUMENT_ROOT'un konumu httpd 2.2 ile 2.4 arasında değişebilir

Bu şekilde yapmanız gereken tek şey "/path/to/docroot/.maintenance" a dokunmaktır ve siteniz anında 503’leri döndürmeye başlayacaktır. Daha sonra hepsini saf hale getirmek için, özel olarak güzel bir şekilde biçimlendirilmiş html hata sayfası oluşturun ve bunu doğru apache sunucusunun config dosyasına ekleyin:

ProxyErrorOverride on
ErrorDocument 503 /error/503.html

Bonus puanlar için birden fazla web sunucunuz varsa, paylaşılan bir dosya sisteminde .maintenance konumunu ya da daha fazla bonus puan verin:

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

Bakım modu dosyasını temel almanın avantajı, uygulamanızın çalışmadığı zamanlarda çalışması, hızlı ve basit olması ve ön uç önbellekleme proxy'sinin işlenmesi daha kolay çünkü tüm arka uç 503'leri tek bir dokunuşta tutabilirsiniz.

Kaynaklar:

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.