通过 proxy_pass 在 NGINX 中提供 NodeJS HTTPS 应用程序
Serve a NodeJS HTTPS app, in NGINX via proxy_pass
我目前有一个 NGINX 服务器 运行正在运行一个 ReactJS 应用程序,指向 /build 文件夹,启用 HTPPS 并通过 NGINX 运行正在运行。
除此之外,我曾经有一个 NodeJS 应用程序(网站)运行在端口 8888 上使用反向代理,默认情况下可以通过端口 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;
}
}
我的目标是保持其当前功能:2 个独立的应用程序,在同一个 machine/webserver 上,我可以根据用户需要相互重定向。
我错过了什么?大多数答案让我让 NGINX 处理 HTTPS 部分并让 NodeJS 应用 运行ning 在 HTTP 上,但我真的需要让 NodeJS 运行ning 在 HTTPS 上。
提前致谢!
如果您想将两者都作为 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 处理时间。
我目前有一个 NGINX 服务器 运行正在运行一个 ReactJS 应用程序,指向 /build 文件夹,启用 HTPPS 并通过 NGINX 运行正在运行。
除此之外,我曾经有一个 NodeJS 应用程序(网站)运行在端口 8888 上使用反向代理,默认情况下可以通过端口 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;
}
}
我的目标是保持其当前功能:2 个独立的应用程序,在同一个 machine/webserver 上,我可以根据用户需要相互重定向。
我错过了什么?大多数答案让我让 NGINX 处理 HTTPS 部分并让 NodeJS 应用 运行ning 在 HTTP 上,但我真的需要让 NodeJS 运行ning 在 HTTPS 上。
提前致谢!
如果您想将两者都作为 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 处理时间。