Nginx 透明反向代理 https 和 http 到另一台服务器

Nginx 透明反向代理 https 和 http 到另一台服务器

我对此进行了一段时间的研究,但其他人询问的用例与我想要实现的更复杂/不同。

我使用 Nginx 在端口 80 和 443 上为网站(例如 example1.com)提供页面。它可以很好地提供 http 和 https 服务。我现在在内部网络上有第二台运行 Apache 的服务器。这是为第二个网站(例如 example2.com)服务的。我有一个 WAN IP 地址,两个网站的 A 记录都指向它。

我的路由器将端口 80 和 443 转发到 nginx 服务器。我希望 Nginx 能够检查请求是针对 example1.com 还是 example2.com,并将 example1.com(现在)发送给自身,而将 example2.com 的所有流量传递到 Apache 服务器。由于我在 example2.com Apache 服务器上正确设置了所有 SSL 证书,我希望 Nginx 能够透明地将所有内容传递给 Apache。我想我需要代理传递。我是否也需要在 Nginx 上设置相同的证书,或者它是否可以透明地将所有内容传递给 apache 服务器,就像我将端口 443 直接转发给它一样?如果能提供建议的配置,我将不胜感激。

答案1

您只需要一个新的服务器块,将 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;
  }
}

相关内容