繁体   English   中英

后端节点应用程序(Nginx反向代理)上的SSL证书无效

[英]SSL Certificate Invalid on back end Node App (Nginx Reverse Proxy)

所以我遇到了SSL证书的一些问题。

我有一个在端口80上运行的react应用程序,以及在端口443上运行的节点后端。

我有一个指向IP(xx.xx.xxx.xx)的域,它指向react应用程序。 我正在使用nginx代理从前端到后端的请求,因为我在同一台服务器上都有。

这是nginx配置:

server {
  listen 80 ssl;
  server_name xx.xx.xxx.xx;
  ssl_client_certificate /etc/letsencrypt/live/domain.com/cert.pem;
  ssl_certificate /etc/letsencrypt/live/domain.com/cert.pem;
  ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;
  root /home/ubuntu/build;
  index index.html;

  access_log /var/log/nginx/build.access.log;
  error_log /var/log/nginx/build.error.log;
  location / {
    try_files $uri /index.html =404;
  }
}

upstream backend {
  server 127.0.0.1:443;
  server 127.0.0.1:443 max_fails=1 fail_timeout=30s backup;
  keepalive 64;
}

server {
  listen 443 ssl;
  server_name xx.xx.xxx.xx;
  ssl_client_certificate /etc/letsencrypt/live/domain.com/cert.pem;
  ssl_certificate /etc/letsencrypt/live/domain.com/cert.pem;
  ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;
  keepalive_timeout 10;
  location / {
    proxy_pass http://backend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
    proxy_set_header Connection '';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
    proxy_redirect off;
   }
}

当向后端发出请求时,我收到以下错误:

网:: ERR_CERT_COMMON_NAME_INVALID

这是因为证书对“domain.com”有效,而不是后端正在运行的IP(我知道您必须使用完全限定的域来获取证书)。

我的问题是,我可以做什么不同的(使用nginx),允许我的请求在反向代理上通过https进行?

您使用标准端口80和443的方式不同。 这些端口是服务器的入口点,不建议用作反向代理内部运行的端口。

使用反向代理时,我们将其他端口映射到端口80或端口443,因此可以分别通过HTTP或HTTPS公开访问。

如果我们想通过HTTPS访问所有内容,我们需要通过反向代理将react和node应用程序映射到443,并将所有HTTP访问重定向到HTTPS。

所以建议的修复步骤:

1)使用不同的端口,例如3000表示反应,3001表示节点。

2)配置监听端口80的服务器块以重定向到https,如return 301 https://<yourdomainhere.com>

3)删除端口80服务器块中的ssl行。 仅在侦听端口443的服务器块内使用它们

4)修改您的upstream {}块以使用端口3001作为节点应用。 保留使用proxy_pass http://backend; ,它很好。

5)使用proxy_pass http://localhost:3000;添加新的位置块proxy_pass http://localhost:3000; 在侦听端口443的服务器块内部。您现在将拥有两个位置块,一个用于react,另一个用于节点。

6)使用yourdomainhere.com定义每个块的server_name ,因为通常不允许通过SSL证书颁发IP地址。 我建议使用不同的服务器块,使用HTTPS前缀将IP地址重定向到您的域

7)检查错误,然后重启nginx。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM