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

nginx как обратный прокси с несколькими доменами и хостами

Этот вопрос, вероятно, задавали несколько раз, но со всеми результатами, которые я смог найти, и своими небольшими знаниями, я как бы потерялся. Я использую Fedora 29.

Что я пытаюсь сделать с nginx:

Образец :

Как я смогу это сделать? Давайте зашифруем настроенную мной конфигурацию nginx автоматически, но это кажется чересчур.


Большое спасибо за ответ, я чувствую, что добился некоторого прогресса, даже если пока не работаю. Я размещаю здесь свой полный файл конфигурации, потому что теперь у меня ошибка «502 Bad Gateway». IP-адрес не находится в той же подсети, что и обратный прокси-сервер, но полностью доступен, без межсетевого экрана или проблем с маршрутизацией.

Есть идеи, где я могу двигаться дальше? В исходной конфигурации также есть файл конфигурации certbot, который включает шифры и протоколы. Может надо заново включить?

Также: внутренние серверы, к которым я пытаюсь получить доступ, имеют сертификаты, подписанные моей собственной AD CS, но на обратном прокси-сервере не установлен корневой сертификат. Возможно я должен ?

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 4096;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
        listen 80;
        server_name  _;
        return 301 https://$host$request_uri;
    }

    server {
        listen  443 ssl;
        server_name scans.domain.com;
        ssl  on;
        ssl_certificate /etc/letsencrypt/live/www.domain.com/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/www.domain.com/privkey.pem; # managed by Certbot

        location  / {
                proxy_pass  https://192.168.XX.YY/;
        }
    }
}

Чтобы NGINX разрешал несколько доменных имен для независимых прокси-серверов, вам необходимо настроить серверный блок для каждого используемого домена (и да, вам это нужно). include предоставлено LE):

server { listen 443 ssl; server_name application.domain.com; ssl on; ssl_certificate /etc/letsencrypt/live/www.domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.domain.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; location / { proxy_pass https://hostname1.domain.local:80/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } server { listen 443 ssl; server_name test.domain.com; ssl on; ssl_certificate /etc/letsencrypt/live/www.domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.domain.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; location / { proxy_pass https://hostname3.domain.local:80/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } server { listen 443 ssl; server_name www.domain.com; ssl on; ssl_certificate /etc/letsencrypt/live/www.domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.domain.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; location / { proxy_pass https://hostname2.domain.local:1234/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }

в конфигурации http.conf вы можете указать правило для перенаправления всего трафика, поступающего на порт 80 (независимо от домена): server { listen 80; server_name _; return 301 https://$host$request_uri; }

если вы пытаетесь перенаправить https> http, вам также понадобится конфигурация обратного прокси, что-то вроде этого будет работать:

server { listen 443 ssl; server_name application.domain.com; ssl on; ssl_certificate /etc/ssl/public/application.domain.com.combined; ssl_certificate_key /etc/ssl/private/application.domain.com.key; location / { proxy_pass http://hostname1.domain.local:80/; } }

Обратите внимание, что вам не обязательно размещать каждый из веб-сайтов на разных портах, nginx знает, какой контент предоставлять вашему клиенту на основе имени домена.

С Уважением,