Как создать пользовательскую ошибку 502 nginx в ядре nginx (не используя перенаправление на страницу с ошибкой)?
Иногда возникает проблема с ошибкой 502, когда служба httpd недоступна.
Но только через 1 минуту сайт вернется.
Мне нужно настроить сообщение 502, чтобы попросить пользователя подождать 1 минуту, а затем обновить страницу, или вставить JavaScript или мета обновить тег на страницу автоматического обновления через 1 минуту.
URL-адрес страницы должен быть одинаковым для создания эффекта обновления
Обратите внимание, что я знаю о перенаправлении страницы с настраиваемой ошибкой, например location = /502.html
, но этот тип страницы пользовательских ошибок перенаправляет пользователя на другую страницу, если они обновят страницу, они снова получат страницу с ошибкой.
Любая идея будет очень полезна.
ИЗМЕНИТЬ ОБНОВЛЕНИЕ для более подробной информации 10/06/2012.
My nginx config:
user nobody;
# no need for more workers in the proxy mode
worker_processes 24;
error_log /var/log/nginx/error.log crit;
#worker_rlimit_nofile 20480;
events {
worker_connections 109024; # increase for busier servers
use epoll; # you should use epoll here for Linux kernels 2.6.x
}
http {
server_name_in_redirect off;
server_names_hash_max_size 2048;
server_names_hash_bucket_size 256;
include mime.types;
default_type application/octet-stream;
server_tokens off;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 20;
ignore_invalid_headers on;
client_header_timeout 50m;
client_body_timeout 50m;
send_timeout 20m;
reset_timedout_connection on;
connection_pool_size 2048;
client_header_buffer_size 256k;
large_client_header_buffers 4 256k;
client_max_body_size 20M;
client_body_buffer_size 300k;
request_pool_size 32k;
output_buffers 14 32k;
postpone_output 1460;
proxy_temp_path /tmp/nginx_proxy/;
proxy_cache_path /dev/shm/nginx levels=1:2 keys_zone=wwwcache:45m inactive=5m max_size=1000m;
client_body_in_file_only off;
access_log off;
open_log_file_cache off;
#log_format bytes_log "$msec $bytes_sent .";
include "/etc/nginx/vhosts/*";
}
и vhost config:
server {
# error_log /var/log/nginx/vhost-error_log warn;
listen 123.30.137.66:80;
server_name xaluan.net mtvvui.com www.daiduong.com.au www.xaluan.net xaluan.com www.xaluan.com www.daiduongrestaurant.net veryzoo.com www.mtvvui.com www.xaluan.org www.veryzoo.com daiduongrestaurant.net xaluan.org daiduong.com.au;
# access_log /usr/local/apache/domlogs/xaluan.net combined;
root /home/xaluano/public_html;
location / {
if ($http_cache_control ~ "max-age=0") {
set $bypass 1;
}
location
~.*\.(3gp|gif|jpg|jpeg|png|ico|wmv|avi|asf|asx|mpg|mpeg|mp4|pls|mp3|mid|wav|swf|flv|htm|txt|js|css|exe|zip|tar|rar|gz|tgz|bz2|uha|7z|doc|docx|xls|xlsx|pdf|iso)$
{
#root /home/xaluano/public_html;
#proxy_cache wwwcache;
#proxy_cache_valid 200 15m;
#proxy_cache_bypass $bypass;
expires 1d;
#try_files $uri @backend;
proxy_pass http://123.30.137.66:8081;
}
error_page 405 = @backend;
add_header X-Cache "HIT from Backend";
#proxy_set_header Server "Caching-Proxy";
#add_header X-Cache-Vinahost "HIT from Backend";
proxy_pass http://123.30.137.66:8081;
include proxy.inc;
}
location @backend {
internal;
proxy_pass http://123.30.137.66:8081;
include proxy.inc;
}
location ~ .*\.(php|jsp|cgi|pl|py)?$ {
#proxy_cache wwwcache;
#proxy_cache_valid 200 15m;
proxy_pass http://123.30.137.66:8081;
include proxy.inc;
}
location ~ /\.ht {
deny all;
}
}
== проверка случая.
Если служба Apache httpd останавливается: #service httpd stop
Затем откройте в браузере эту ссылку:
http://www.xaluan.com/modules.php?name=News&file=article&sid=123456
Вы увидите ошибку 502 с тем же адресом URL-адреса браузера.
== Пользовательская страница с ошибками
Мне нужен конфиг, который поможет при сбое Apache, будет показать пользовательское сообщение, говорящему пользователю, ждать 1 минуту для возврата службы, а затем обновлять текущую страницу с тем же URL (обновить, что я могу сделать легко с помощью JavaScript), Nginx не изменяет URL, поэтому JavaScript может работать.
Ответы
Ответ 1
Я нашел ответ, который работает для меня.
В конфигурационном файле vhost я помещаю вправо в конце блока server
, прежде чем закрывать скобки:
error_page 502 /502.html;
location = /502.html {
root /home/xaluano/public_html;
}
Конечно, мне также нужно создать файл 502.html в моем корне домена, обновить метатег и java- script автообновление.
Содержимое html-страницы:
<head>
<meta http-equiv="refresh" content="40" />
</head>
<body>
<script language="JavaScript" type="text/javascript">
/*<![CDATA[*/
var TimerVal = 40;
var TimerSPan = document.getElementById("CDTimer");
function CountDown(){
setTimeout( "CountDown()", 1000 );
TimerSPan.innerHTML=TimerVal;
TimerVal=TimerVal-1;
if (TimerVal<0) { TimerVal=0;
location.reload(true);
// window.location.href = "http://www.xaluan.com";
} //improvement by vivalibre, tq
}
CountDown();
/*]]>*/ </script>
</body>
Ответ 2
http://nginx.org/r/error_page
Обратите внимание, что error_page 502 /502.html;
выполняет перенаправление внутри. Он не изменяет URL в адресной строке браузера.