динамическая обработка ошибок

test157 at smail.ee test157 at smail.ee
Mon Jun 16 16:09:41 MSD 2008


задача очень простая, все ошибки разбиты на две группы - одни
обрабатывают статически, т.е. Nginx'ом - другие передаются на backend
для обработки. делается все примерно так:

error_page 501 502 503 504 507 /error/index.html;

error_page 404 @e404;
   
location @e404 {
  rewrite  .*  /e/index.php?id=404&ip=$remote_addr&uri=$request_uri  last;
}

# тут статика
location /error/ {
  root /var/www;
  internal;
}

# шлем ошибку на backend
location  /e/ {
  proxy_pass http://127.0.0.1:80;
  internal;
}

т.е. 404 идет на обработку удаленно, все 500-ые идут локально. так
вот, все работает очень хорошо, до той поры пока живой backend - как
только 127.0.0.1 уходит в офф - начинает лезть 502-ой эррор, хотя он
переопределен вверху, на уровне сервера - однако он исчезает, если его
переназначить в location / - но тогда начинает лезть error 404 - хотя
он сам по себе определен выше работать через backend который в офе.

суть вопроса, почему лезет 502-ой, и как избавиться от него - с учетом
того что сам 404 должен идти через backend.  я пробовал переназначать
404-ую на статику в самом /error/ но это ничего не дало, пробовал
играться с рекурсией - тоже мимо.

как вариант обрабатывать ошибки на самом backendе и опустить
использование rewrite_url - но не хотелось бы его озадачивать этим.

P.S.: и еще может стоит ввести новую переменную которая будет
содержать код ошибки? или такие вещи делаются как-то иначе? а то чтобы
создать динамические обработки для 10 ошибок нужно сделать 10 блоков
с @ где будет только разница в коде ошибке.











More information about the nginx-ru mailing list