如何将NGINX反向代理到具有自签名证书的后端服务器?

如何将NGINX反向代理到具有自签名证书的后端服务器?

我有一个带有网络服务器和 OpenVPN 访问服务器(带有自己的网络界面)的小型网络。我只有 1 个公共 IP,希望能够将子域指向网络服务器上的网站(例如 website1.domain.com、website2.domain.com),并将子域 vpn.domain.com 指向 OpenVPN 访问的 Web 界面服务器。

经过一些谷歌行动后,我认为最好的方法是设置一个代理服务器。 NGINX 似乎可以通过“proxy_pass”函数来做到这一点。我让它适用于 HTTP 后端 URL(网站),但它不适用于 OpenVPN 访问服务器 Web 界面,因为它强制使用 HTTPS。我对 HTTPS 很满意,并且更喜欢将它用于网络服务器上托管的网站。默认情况下是自签名证书。已安装,我也想使用自签名证书。对于其他网站。

我如何“接受”自签名证书。对于后端服务器?我发现我需要生成一个证书。并在 NGINX 反向代理配置中定义它,但我不明白这是如何工作的,例如我的 OpenVPN 服务器已经安装了 SSL 证书。我可以通过以下方式访问 OpenVPN Web 界面https://direct.ip.address.here/admin但当我尝试通过 Chrome 访问网络界面时,出现“此网站无法提供安全连接”页面。

我的 NGINX 反向代理配置:

server {
  listen        443;
  server_name   vpn.domain.com;

  ssl_verify_client off;

  location / {
    # app1 reverse proxy follow
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass https://10.128.20.5:443;
    proxy_ssl_verify off;
  }

  access_log /var/log/nginx/access_log.log;
  error_log /var/log/nginx/access_log.log;
}

server {
  listen        80;
  server_name   website1.domain.com;

  location / {
    # app1 reverse proxy follow
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://10.128.11.20:80;
  }

  access_log /var/log/nginx/access_log.log;
  error_log /var/log/nginx/access_log.log;
}


附近的一个想法... 也许 NGINX 根本不是合适的工具(现在或长期)?假设我可以修复证书。我目前遇到的问题是,我们需要更多后端 Web 服务器来处理流量,是否也可以扩展 NGINX 代理?比如集群或者负载均衡器之类的?我应该寻找一个完全不同的工具吗?

答案1

您的 443 服务器块未配置用于 SSL 请求。您需要添加ssllisten指令并配置ssl_certificatessl_certificate_key

例如

server {
  listen        443 ssl;
  ssl_certificate /path/to/ssl/certificate.pem;
  ssl_certificate_key /path/to/ssl/certificate.key;
# ...

您可以在此处找到有关这些设置和其他 TLS/SSL 相关设置的更多信息:http://nginx.org/en/docs/http/configuring_https_servers.html

我目前遇到的问题是,我们需要更多后端 Web 服务器来处理流量,是否也可以扩展 NGINX 代理?

NGINX 可以很好地垂直扩展(增加一台服务器上的资源)。如果您想要添加更多 NGINX 服务器(为了水平可扩展性或为了高可用性)并且您只有一个公共 IP 地址,则需要管理虚拟 IP (VIP)。您可以使用该keepalived服务来管理 VIP。但是,对于小型网络,我认为您不需要这个。

相关内容