Загрузка...

How to correctly use https domains in nginx load balancer?

Thread in Web development created by Toil Feb 26, 2024. (bumped Feb 26, 2024) 116 views

  1. Toil
    Toil Topic starter Feb 26, 2024 ������� ������ :coder: 3543 Nov 18, 2018
    Мне нужно, чтобы один домен вел на несколько других доменов, которые имеют одинаковый функционал. Если я проксирую прописав единственный домен вручную в "proxy_set_header Host" и в "proxy_ssl_name", то все работает, если беру домен из балансера с указанием порта (через $proxy_host), то получаю ошибку, что запрошенный инстанс не существует (а например на сайтах, которые находятся под cloudflare, просто получаю 404).

    Собственно, сам вопрос, как я могу брать домен из балансера, но так, чтобы он проксировался без ошибок?
    Code

    upstream vot_worker {
    # server vot-worker.onrender.com weight=3 down fail_timeout=30s;
    server vot.deno.dev:443;
    # server vot-new.toil-dump.workers.dev down weight=1 fail_timeout=30s;
    }

    server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    ssl_certificate /etc/letsencrypt/live/<my_domain>/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/<my_domain>/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    # Bad Bot Blocker
    include /etc/nginx/bots.d/ddos.conf;
    include /etc/nginx/bots.d/blockbots.conf;

    server_name <my_domain>;

    location / {
    proxy_pass https://vot_worker;

    proxy_set_header Host "vot.deno.dev";
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_http_version 1.1;
    proxy_buffering off;
    proxy_buffer_size 16k;
    proxy_busy_buffers_size 24k;
    proxy_buffers 64 4k;
    proxy_ssl_server_name on;
    proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    proxy_ssl_name "vot.deno.dev";
    }
    }

    [IMG]
    Code

    upstream vot_worker {
    # server vot-worker.onrender.com weight=3 down fail_timeout=30s;
    server vot.deno.dev:443;
    # server vot-new.toil-dump.workers.dev down weight=1 fail_timeout=30s;
    }

    server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    ssl_certificate /etc/letsencrypt/live/<my_domain>/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/<my_domain>/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    # Bad Bot Blocker
    include /etc/nginx/bots.d/ddos.conf;
    include /etc/nginx/bots.d/blockbots.conf;

    server_name <my_domain>;

    location / {
    proxy_pass https://vot_worker;

    proxy_set_header Host $proxy_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_http_version 1.1;
    proxy_buffering off;
    proxy_buffer_size 16k;
    proxy_busy_buffers_size 24k;
    proxy_buffers 64 4k;
    proxy_ssl_server_name on;
    proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    proxy_ssl_name $proxy_host;
    }
    }
    [IMG]
    ⁡/video-translation/audio-proxy/c3a7d3378c314033969dc9e3198964b5.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=TUjU1hKqZCA89kq9Wfr3/20240225/us-east-1/s3/aws4_request&X-Amz-Date=20240225T165740Z&X-Amz-Expires=7200&X-Amz-SignedHeaders=host&X-Amz-Signature=73dde9683c5b1ad277d9227b1bb8bf388f16d4a1169e818dc08f8ae37851764


    Если всё проксируется правильно, то отобразиться Request has expired (проксирование работает), в противном случае показывается просто заглушка от deno, что инстанс не найден (проксирование работает не правильно)
     
  2. iosios
    iosios Mar 2, 2024 7 Mar 2, 2024
    Скорее всего, вся проблема в том, что ты используешь $proxy_host (который по умолчанию, кстати) в и хост записывается с proxy_pass, где у тебя стоит "https://vot_worker", то есть хост = vot_worker. Ну и принимающий сервер не понимает, что это за хост.
    Чтобы это исправить нужно использовать $host, так будет браться именно хост твоего ****** сервера. Если нужен хост именно с твоих ориджинов, то есть тех хостов, которые находятся "upstream vot_worker", тогда, как я знаю, можно их достать через дабл проксинг.
     
    1. Toil Topic starter
      iosios, спасибо за подсказку, но уже сделал через лб траефика
Top
Loading...