Назад | Перейти на главную страницу

Как добавить резервную копию моего прокси в nginx?

Я пытаюсь создать прокси для моего приложения узла через nginx, думая, что это даст мне страницы с ошибками, если приложение узла не работает или недоступно на порту.

Приложение узла работает на 127.0.0.1:1337 и я слушаю mydomain:8080 и отправьте его.

server {
    listen       8080;
    server_name  mydomain;
    access_log   /log/path/logging.log;
    root         /path/to/root/;
    error_page   400 401 402 403 404 500 501 502 503 504  /error/index.html;

    location / {
        proxy_redirect          off;
        proxy_pass_header       Server;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        X-Scheme $scheme;
        proxy_set_header        Host $http_host;
        proxy_set_header        X-NginX-Proxy true;
        proxy_connect_timeout   5;
        proxy_read_timeout      240;
        proxy_intercept_errors  on;

        proxy_pass              http://127.0.0.1:1337;
    }
}

К сожалению, когда я выключаю приложение узла и запрашиваю у меня 502 плохой шлюз, mydomain:8080. Однако это ожидаемое поведение от nginx. Мне нужна страница, которую я могу определить, которая будет отображаться, когда служба приложения узла не работает.

Есть идеи, что как это сделать?

Я нашел ответ:

server {
    listen       8080;
    server_name  mydomain;
    access_log   /log/path/logging.log;
    error_page   400 401 402 403 404 405 500 501 502 503 504  @error_page;

    location     @error_page {
        root       /var/www/html/;
        rewrite ^  https://domain.com/error/index.html;
        break;
    }

    location / {
        proxy_redirect          off;
        proxy_pass_header       Server;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        X-Scheme $scheme;
        proxy_set_header        Host $http_host;
        proxy_set_header        X-NginX-Proxy true;
        proxy_connect_timeout   5;
        proxy_read_timeout      240;
        proxy_intercept_errors  on;

        proxy_pass              http://127.0.0.1:1337;
    }
}

Это перенаправит весь трафик с maindomain:8080 к https://domain.com/error/index.html если служба на http://127.0.0.1:1337 недоступен (все ошибки).

Надеюсь, это поможет кому-то в будущем.

Вам не хватает того, что Nginx делает именно то, что должен, и ваши ожидания неверны. Вы говорите Nginx «используйте этот шлюз», а когда шлюза нет, он правильно сообщает об этом.

Что бы вы хотели или ожидали, если ваше приложение узла перестанет работать?

Обновить - вот как я откатываюсь с HHVM на PHP5, потому что HHVM довольно часто дает сбой.

upstream php {
  server 127.0.0.1:9001;
}
upstream php-fpm {
  server unix:/var/run/php-fpm/php-fpm.sock;
}

# Inside server block
location ~ \.(hh|php)$ {
    error_page 502 = @fallback;
    fastcgi_pass   php;
}