LINUX.ORG.RU
решено ФорумAdmin

Nginx upstream как проксировать?

 , ,


0

1

Привет всем. Настроил nginx balancer (nginx upstream). Вот только он не проксирует, а перенаправляет просто на сервера.
Это и есть его работа ? Или я настроил неправильно .... Помогите пожалуйста разобраться.
Я понимаю так, что Balancer должен проксировать на другие сервера и не менять имени домена, а он меняет на субдомены.

Nginx balancer conf:

upstream backend  {
        least_conn;
        server s2.domain.com:8082 max_fails=3 fail_timeout=100s;
        server s1.domain.com:8081 max_fails=3 fail_timeout=100s;
        }

 server_name _;

        listen 443;

        ssl on;
        ssl_certificate /var/www/ssl/site/*.domain.com.crt;
        ssl_certificate_key /var/www/ssl/site/*.domain.com.key;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
        ssl_session_cache   shared:SSL:10m;
        ssl_session_timeout 5m;
        ssl_prefer_server_ciphers on;
        ssl_stapling on;
        ssl_stapling_verify on;
        add_header Strict-Transport-Security 'max-age=604800';
        #length_hiding on;
        add_header Content-Security-Policy-Report-Only "default-src https:; script-src https: 'unsafe-eval' 'unsafe-inline'; style-src https: 'unsafe-inline'; img-src https: data:; font-src https: data:; report-uri /csp-report";
        ssl_dhparam /var/www/ssl/site/dhparam.pem;


        location / {
       proxy_read_timeout 1200;
       proxy_connect_timeout 1200;
       proxy_pass http://backend/;
       proxy_set_header Host domain.com;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header HTTPS on;
        }


Nginx client 1 conf:

server {
        listen 8081;
        server_name s1.domain.com;
        root /var/www/site/public/public/;
       #https://s1.domain.com$request_uri? permanent;
        }


server {
    listen   8081;
    listen 443 ssl;
    server_name s1.domain.com;
    root /var/www/site/public/public/;

    index index.php index.html index.htm;

        ssl_certificate /var/www/ssl/site/*.domain.com.crt;
        ssl_certificate_key /var/www/ssl/site/*.domain.com.key;


        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
        ssl_session_cache   shared:SSL:10m;
        ssl_session_timeout 5m;
        ssl_prefer_server_ciphers on;
        ssl_stapling on;
        ssl_stapling_verify on;
        add_header Strict-Transport-Security 'max-age=604800';
        #length_hiding on;
        add_header Content-Security-Policy-Report-Only "default-src https:; script-src https: 'unsafe-eval' 'unsafe-inline'; style-src https: 'unsafe-inline'; img-src https: data:; font-src https: data:; report-uri /csp-report";
        ssl_dhparam /var/www/ssl/site/dhparam.pem;

sendfile off;

    client_max_body_size 100m;


    location ~ \.php$ {
#        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_intercept_errors off;
        fastcgi_buffer_size 16k;
        fastcgi_buffers 4 16k;
        fastcgi_read_timeout 60s;

#Fastcgi cache config
#       fastcgi_hide_header "Set-Cookie";
        add_header X-Cache $upstream_cache_status;
        fastcgi_cache SITE;
        fastcgi_cache_bypass $no_cache;
        fastcgi_no_cache $no_cache;

    }

    location ~ /\.ht {
        deny all;
    }

}

Nginx client 2 conf:

server {
        listen 8082;
        server_name s2.domain.com;
        root /var/www/site/public/public/;
        #rewrite ^(.+)$ https://s2.domain.com$request_uri? permanent;
        }


server {
    listen   8082;
    listen 443 ssl;
    server_name s2.domain.com;
    root /var/www/site/public/public/;

    index index.php index.html index.htm;

        ssl_certificate /var/www/ssl/stage/*.domain.com.crt;
        ssl_certificate_key /var/www/ssl/stage/*.domain.com.key;


        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
        ssl_session_cache   shared:SSL:10m;
        ssl_session_timeout 5m;
        ssl_prefer_server_ciphers on;
        ssl_stapling on;
        ssl_stapling_verify on;
        add_header Strict-Transport-Security 'max-age=604800';
        #length_hiding on;
        add_header Content-Security-Policy-Report-Only "default-src https:; script-src https: 'unsafe-eval' 'unsafe-inline'; style-src https: 'unsafe-inline'; img-src https: data:; font-src https: data:; report-uri /csp-report";
        ssl_dhparam /var/www/ssl/site/dhparam.pem;
   sendfile off;

    client_max_body_size 100m;


    location ~ \.php$ {
#        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_intercept_errors off;
        fastcgi_buffer_size 16k;
        fastcgi_buffers 4 16k;

#Fastcgi cache config
#       fastcgi_hide_header "Set-Cookie";
        add_header X-Cache $upstream_cache_status;
        fastcgi_cache SITE;
        fastcgi_cache_bypass $no_cache;
        fastcgi_no_cache $no_cache;

    }

    location ~ /\.ht {
        deny all;
    }

}

Перемещено leave из general

перенаправляет

Что значит перенаправляет? HTTP 302 found?

Nginx client 1 conf:

server_name - тут должен стоять домен сайта

goingUp ★★★★★
()
Ответ на: комментарий от goingUp

Перенаправляет с domain.com на s1.domain.com или на s2.domain.com в зависимости от назначенного метода балансировки (в моем случае это least_conn). То есть на всех клиентах server_name должен быть domain.com ?

Dr_Behaviour
() автор топика
Ответ на: комментарий от Dr_Behaviour

То есть на всех клиентах server_name должен быть domain.com ?

Да. Еще на них излишний конфиг ssl, ваш балансер проксирует уже http. А вот на балансере конфига http нету.

goingUp ★★★★★
()

Выше уже все правильно сказали. Убери https с бэкэнда, добавь в балансер, поставь одинаковый server_name.

Кроме того (если это виртуалки) имеет смысл запилить третью ноду чуть послабее, и выставить ее резервной.

svr4
()
Ответ на: комментарий от Dr_Behaviour

Зачем в такой конфигурации вообще nginx'ы на бекенде? Вешаешь php-fpm на порт, проксируешь с балансера сразу на него.

Deleted
()
Ответ на: комментарий от svr4

выставить ее резервной

Это через дерективу backup в upstream'е? У ТС'а не заработает, ибо работает только с RR балансировкой.

Deleted
()
Ответ на: комментарий от Deleted

На бэкенде Nginx'ами сокращать нагрузку с помощью настроек gzip и кэширования. Этот вариант хуже, чем использовать напрямую php-fpm?

Dr_Behaviour
() автор топика

Спасибо всем участникам этой темы. Все советы оказались верными.

Dr_Behaviour
() автор топика
Ответ на: комментарий от Dr_Behaviour

gzip и кэширование вполне потянет load balancer.

goingUp ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.