Что IP nginx использует для ip_hash липких сессий?

Ошибки диска являются одной возможной причиной, "У меня есть полномочия только для чтения везде" условие. Некоторые типы аппаратных средств или отказов дисков уровня ядра могут привести к непоследовательной и поврежденной файловой системе, таким образом, ядро охранительно вызовет файловую систему в режим "только для чтения", когда это обнаружит такой отказ. Если бы диск, содержащий Вашу корневую файловую систему, имеет отклонение, что-либо пытающееся записать в диск начало бы видеть ошибки разрешения. Программы, которые не должны писать в диск (как Apache или SSHd), вероятно, продолжат работать просто великолепно.

В следующий раз отказ базы данных происходит, проверьте, что Ваше ядро регистрирует буфер сообщений ПЕРЕД ПЕРЕЗАГРУЗКОЙ для любых признаков ошибки диска. Необходимо будет, вероятно, использовать команду 'dmesg', потому что, если '/var/log' каталог является частью корневой файловой системы, демон системного журнала не сможет записать сообщения об ошибках в '/var/log/messages' 'файл на диске. Кроме того, содержание буфера журнала ядра будет потеряно, когда Вы перезагрузите, таким образом, Вы могли бы хотеть использовать' ssh 'или' scp, 'для копирования тех данных в другом месте.

1
задан 13 September 2011 в 05:31
2 ответа

От:

http://wiki.nginx.org/HttpUpstreamModule#ip_hash

Ключ для хеш-функции - это сетевой адрес клиента класса C.

Также из:

nginx-0.8.53/src/http/modules/ngx_http_upstream_ip_hash_module.c:
     91 static ngx_int_t
     92 ngx_http_upstream_init_ip_hash_peer(ngx_http_request_t *r,
     93     ngx_http_upstream_srv_conf_t *us)
     94 {
...
    114     if (r->connection->sockaddr->sa_family == AF_INET) {
    115
    116         sin = (struct sockaddr_in *) r->connection->sockaddr;
    117         p = (u_char *) &sin->sin_addr.s_addr;
    118         iphp->addr[0] = p[0];
    119         iphp->addr[1] = p[1];
    120         iphp->addr[2] = p[2];
    121
    122     } else {
    123         iphp->addr[0] = 0;
    124         iphp->addr[1] = 0;
    125         iphp->addr[2] = 0;
    126     }
...
    164         for (i = 0; i < 3; i++) {
    165             hash = (hash * 113 + iphp->addr[i]) % 6271;
    166         }

Проверка документации. Было бы довольно легко изменить код, чтобы включить такие данные, как XFF.

2
ответ дан 3 December 2019 в 16:19

Хотя этот вопрос довольно старый и ответ правильный, после некоторых поисков решения моей собственной проблемы с балансировкой нагрузки я обнаружил, что есть более новый вариант, позволяющий сделать клиентский IP-адрес на основе X- Forwarded-For или X-Real-IP, и в сочетании с директивой ip_hash он правильно балансирует нагрузку, используя фактический IP-адрес пользователя в качестве хэша.

http: // nginx.org / en / docs / http / ngx_http_realip_module.html

    set_real_ip_from        127.0.0.1;  # nginx and varnish on other ports
    real_ip_header          X-Real-IP;  # or X-Forwarded-For
#   real_ip_recursive       on;         # doesn't work on nginx 1.0
8
ответ дан 3 December 2019 в 16:19

Теги

Похожие вопросы