我有一台NGINX服务器当前正在运行ReactJS应用,指向/ build文件夹,并通过NGINX启动并运行HTPPS。
此外,我曾经在8888端口上运行一个带有反向代理的NodeJS应用程序(网站),默认情况下可以通过80端口访问它。该应用程序以前以HTTP协议运行。
使用HTTPS来提供此NodeJS网站的需求已经增加,而让这两个应用程序一起运行我遇到了很多麻烦。始终是502错误或SLL_do_handshake错误。
这是我的实际配置。 React应用程序块保持不变,在我开始修改Node one之前,它工作得很好。
server {
listen 80 default_server;
server_name _;
return 301 https://$host$request_uri;
}
# PLATFORM - DEFAULT SERVER
server {
server_name platform.domain.com;
listen 80 default_server;
ssl_certificate /etc/ssl/certs/server.crt;
ssl_certificate_key /etc/ssl/certs/server.key;
location / {
proxy_pass https://xx.xx.xx.xx:8888/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
error_page 404 /404.html;
location = /404.html {}
error_page 500 502 503 504 /50x.html;
location = /50x.html {}
}
# REACT APP
server {
server_name dashboard.domain.com;
listen 443 ssl;
root /var/www/react-app/build;
index index.html;
include snippets/cert-params.conf;
include snippets/ssl-params.conf;
location / {
try_files $uri $uri/ /index.html;
}
}
我的目标是维持其当前功能:在同一台计算机/ Web服务器上,我可以根据用户的需要相互重定向两个独立的应用程序。
我想念什么?大多数答案使我让NGINX处理HTTPS部分,并使NodeJS应用程序在HTTP上运行,但是我确实需要让NodeJS在HTTPS上运行。
谢谢!
答案 0 :(得分:1)
由于您想将两者都当作https处理,因此可以如下组合代码块。 在/ api上,您可以接受所有与节点相关的请求。您可以保留/作为您的反应路径。
server {
listen 80 default_server;
server_name _;
return 301 https://$host$request_uri;
}
# Combine React and Node in same 443 block
server {
server_name dashboard.domain.com;
listen 443 ssl;
# REACT APP
root /var/www/react-app/build;
index index.html;
include snippets/cert-params.conf;
include snippets/ssl-params.conf;
location /api {
proxy_pass https://xx.xx.xx.xx:8888/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location / {
try_files $uri $uri/ /index.html;
}
}
如果先使用nginx处理所有https请求,然后以简单的http协议将代理传递给节点服务器,则实际上会更好,因为这样可以减少节点js的ssl处理时间。