Aleks_ja
@Aleks_ja

Nginx — the duplicate «https» variable. Что с этим делать?

День добрый!

Столкнулись с такой проблемой - настроили load balancer на nginx.

На старом сервере - работает + на некоторых идентичных по софту серверах работает (на которых крутится аппликэйшн пхпшный). А на именно новых load balancer-ах - выкидывает ошибку "the duplicate "https" variable in /etc/nginx/sites-enabled/dc_proxy:56"

Вот такая конфигурация:

upstream dutybalancer {
    #ip_hash means - the same visitor goes to the same server
    ip_hash;
    #least_conn;
    server application1;
    server application2;
}
upstream dutybalancer_ssl {
    #ip_hash means - the same visitor goes to the same server
    ip_hash;
    #least_conn;
    server application1:443;
    server application2:443;
}

server {
    
    listen      *:443 ssl;    # port https
    listen      *:80;        # port http

if ($server_port = 443) { set $https on;}
if ($server_port = 80) { set $https off; }

... тут немного сертификатов

location / {
      if ($server_port = 443) { proxy_pass https://dutybalancer_ssl; }
      if ($server_port = 80)  { proxy_pass http://dutybalancer; }
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_redirect off;
        proxy_buffering off;
        proxy_set_header   Host  $host;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    }

}

nginx version: nginx/1.4.6 (Ubuntu) 14.04.1

Пробовали идентичные конфиги с рабочих серверов ставить - всё равно ругается.

Также пробовали несколько солюшнов из интернета - на все ругается и пишет "не в правильном месте вставлено"
  • Вопрос задан
  • 3331 просмотр
Решения вопроса 1
Lynn
@Lynn
nginx, js, css
Я не понял зачем вы переопределяете встроенную переменную?
nginx.org/ru/docs/http/ngx_http_core_module.html#v...

Так же непонятен смысл хождения в разные балансеры, обычно ограничиваются прокидыванием туда HTTP-заголовка типа

proxy_set_header X-HTTPS $https;
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Попробуйте разделить конфигурацию на два сервера:
server {
    listen      *:80;        # port http

    set $https off;

    location / {
        proxy_pass http://dutybalancer; 
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_redirect off;
        proxy_buffering off;
        proxy_set_header   Host  $host;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    }

}

server {
    listen      *:443 ssl;    # port https

    set $https on;

    ... тут немного сертификатов

    location / {
        proxy_pass https://dutybalancer_ssl;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_redirect off;
        proxy_buffering off;
        proxy_set_header   Host  $host;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}


Проблема в том, что nginx своеобразно обрабатывает 'if' в конфигурации (wiki.nginx.org/IfIsEvil).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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