![](/img/trans.png)
[英]Nginx(reverse proxy) cant forward SSL certificate of https backend to clients
[英]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.