2011-11-23 15 views
15

SEO amaçları için, nginx'in arkasındaki arka uç makinesinin bir sebepten ötürü geri döndüğünde geri gönderilen HTTP durum kodunu değiştirmek istiyoruz.Proxy_pass ağ geçidi nginx in aşağı olduğunda döndürülmüş HTTP durum kodunu değiştirmek mümkün mü?

Bunu "503 Hizmet Kullanılamıyor" olarak değiştirmek istiyoruz. Google/Bing’e belirtilen bir Yeniden Dene başlığını sağlamasının yanı sıra, isteğin X sayıda saniye içinde tekrar denenmesi gerektiğini de unutmayın.

Bu, nginx aracılığıyla mümkün mü?

Özel bir hata sayfası hakkında değil, başlıkta döndürülen durum kodu hakkında konuşmuyorum.

cevap

29

Bence belirli bir hata sayfası ayarlamanız gerekir, ancak ne yaparsanız elde ederseniz elde edebilirsiniz. Bu deneyin:

location/{ 
    proxy_pass http://backend; 
    proxy_intercept_errors on; 
    error_page 502 503 504 =503 @proxyisdown; # always reply with 503 
} 

location @proxyisdown { 
    add_header Retry-After 500; 
    index my_pretty_error_page.html; 
} 

bunu sen 503 (yani error_page direktifin =503 parçası) dönmek ve yeniden denemek-sonrası parası ile başlıklarını ziyaretçilerin güzel bir şekilde biçimlendirilmiş alacaksınız gerekir bu şekilde çalışıyorsanız "Oops, şu anda sorun yaşıyoruz, birkaç dakika içinde tekrar deneyin" sayfası yerine boş bir "503 gerçekten bunun ne anlama geldiğini bilmiyorum" sayfası. :)

+0

bunu daha sonra bugün deneyecek. soruda daha açık olmalıydım, özel bir hata sayfası da kullanılacak ... sadece bunu nasıl yapacağımızı biliyoruz, sadece durum kodunu nasıl değiştireceğimizi bilmiyorduk/yeniden deneme başlığını ekleyelim. her neyse, 12 saat içinde geri dönecek ve ne ile geldiğimizi bilelim. Bu söyleniyor, bu tam olarak aradığımız gibi görünüyor :) thx. –

+0

Gerekli hata kodunu döndürme konusunda daha fazla açıklık sağlamak için cevabı güncelleştirin. –

+1

Her şey beklendiği gibi çalışıyor. Bunun dışında add_header nginx'te 503 cevabı ile desteklenmez. Daha fazla bilgi için http://forum.nginx.org/read.php?2,3727 adresini kontrol edin. –

2

adı hata sayfası /500.html ve:

error_page 400 404 500 502 504 =503 /500.html; 

# Optional if your public root is set above and the same for error pages, 
# I sometimes please them outside the app, which is why I'm including it. 
location /500.html { 
    root /path/to/public; 
} 

yanı çalışmak ve bana biraz daha basit görünüyor olmalı. Not: Başlığı da desteklemez.

İlgili konular