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

Прозрачный обратный прокси-сервер Nginx для https и http на другой сервер

Я исследовал это некоторое время, но варианты использования, о которых спрашивали другие, более сложны / отличаются от того, чего я пытаюсь достичь.

У меня есть страницы обслуживания Nginx на портах 80 и 443 для сайта, например example1.com. Он отлично работает, обслуживая http и https. Теперь у меня во внутренней сети есть второй сервер, на котором работает Apache. Это для второго сайта, например example2.com. У меня есть единственный IP-адрес WAN с A-записями обоих сайтов, указывающими на него.

Мой маршрутизатор перенаправляет порты 80 и 443 на сервер nginx. Я хотел бы, чтобы Nginx мог проверить, был ли запрос для example1.com или example2.com, и отправить example1.com, как сейчас, самому себе, но просто передать весь трафик для example2.com на сервер Apache. Поскольку у меня все сертификаты ssl правильно настроены на сервере Apache example2.com, я надеюсь, что Nginx просто прозрачно передаст все в Apache. Думаю, нужен прокси-пасс. Нужно ли мне также настраивать те же сертификаты на Nginx или он может прозрачно передавать все на сервер apache так же, как если бы я перенаправил порт 443 напрямую на него? Предлагаемая конфигурация будет оценена.

Вам просто нужен новый блок server с server_name, установленным для второго домена, и proxy_pass в местоположении. Если вам нужно, чтобы это был https, вы можете указать либо другой сертификат, либо тот же сертификат, если у него правильные альтернативные имена. Это описано в Nginx руководство для начинающих.

server {
  server_name example.com;
  listen 80;
  listen 443 ssl http2;

  ssl_certificate /var/lib/acme/certs/xyz/fullchain;
  ssl_certificate_key /var/lib/acme/certs/xyz/privkey;

  # Set up preferred protocols and ciphers. TLS1.2 is required for HTTP/2
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;
  ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;

  # This is a cache for SSL connections
  ssl_session_cache shared:SSL:5m;
  ssl_session_timeout 60m;

  location / {
    proxy_pass http://example.com;
  }
}