使用 Nginx 在端口上绑定 Node.js 应用程序
Binding a Node.js Application on a Port with Nginx
我正在尝试在 Nginx Ubuntu 17.04 上使用 SSL 在端口上设置 Node.js 生产应用程序。到目前为止,我已经启动了 SSL Nginx
服务器和 运行。
这是我的 Nginx 配置文件的样子:
server {
listen 80 default_server;
listen [::]:80 default_server;
listen 443 ssl;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name example.com www.example.com;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
location ~ /\.ht {
deny all;
}
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
if ($scheme != "https") {
return 301 https://$host$request_uri;
}
ssl_dhparam /etc/ssl/certs/dhparam.pem;
}
这就是我的 Node.js 应用程序的样子:
#content of index.js
'use strict';
const http = require('http');
http.createServer((req, res) => {
res.writeHead(200, {
'Content-Type': 'text/html; charset=utf-8',
});
res.write('<h1>I’m a Node app!</h1>');
res.end(3000, 'localhost')
}).listen();
console.log('http://example.com:3000/');
我想知道如何将此 Node.js 应用程序绑定到具有 SSL 和现有 Nginx 配置的端口上。
您必须使用 nginx 作为您的 nodejs 应用程序的反向代理。
例如,在端口 3000 上创建节点 运行,然后在您的 nginx conf 中执行类似的操作。
如果节点应用程序是服务器中唯一的东西,
server {
listen 443;
<-- snip -->
location / {
proxy_pass http://localhost:3000;
}
<-- snip -->
}
如果您在服务器上有其他类似 php 应用程序 运行ning 的东西,请创建另一个服务器块并为您的应用程序提供一个单独的 server_name
。
server {
listen 443;
server_name nodeapp.mysite.com;
<-- snip -->
location / {
proxy_pass http://localhost:3000;
}
<-- snip -->
}
这是我对问题的回答。
有两个错误:
1) 编辑和添加 server
闭包文件:
location ~ ^/(nodeApp|socket\.io) {
proxy_pass http://localhost:3000;
}
SocketIO 默认使用 /socket.io 路径,因此需要配置 Nginx 以便它不仅代理 /nodeApp 请求,还代理 /socket.io
2) 在 Node.js 服务器文件中再进行一次编辑。替换:
http.createServer((req, res) => {` to `app.get('/node', function(req, res) {
我正在尝试在 Nginx Ubuntu 17.04 上使用 SSL 在端口上设置 Node.js 生产应用程序。到目前为止,我已经启动了 SSL Nginx
服务器和 运行。
这是我的 Nginx 配置文件的样子:
server {
listen 80 default_server;
listen [::]:80 default_server;
listen 443 ssl;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name example.com www.example.com;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
location ~ /\.ht {
deny all;
}
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
if ($scheme != "https") {
return 301 https://$host$request_uri;
}
ssl_dhparam /etc/ssl/certs/dhparam.pem;
}
这就是我的 Node.js 应用程序的样子:
#content of index.js
'use strict';
const http = require('http');
http.createServer((req, res) => {
res.writeHead(200, {
'Content-Type': 'text/html; charset=utf-8',
});
res.write('<h1>I’m a Node app!</h1>');
res.end(3000, 'localhost')
}).listen();
console.log('http://example.com:3000/');
我想知道如何将此 Node.js 应用程序绑定到具有 SSL 和现有 Nginx 配置的端口上。
您必须使用 nginx 作为您的 nodejs 应用程序的反向代理。
例如,在端口 3000 上创建节点 运行,然后在您的 nginx conf 中执行类似的操作。
如果节点应用程序是服务器中唯一的东西,
server {
listen 443;
<-- snip -->
location / {
proxy_pass http://localhost:3000;
}
<-- snip -->
}
如果您在服务器上有其他类似 php 应用程序 运行ning 的东西,请创建另一个服务器块并为您的应用程序提供一个单独的 server_name
。
server {
listen 443;
server_name nodeapp.mysite.com;
<-- snip -->
location / {
proxy_pass http://localhost:3000;
}
<-- snip -->
}
这是我对问题的回答。 有两个错误:
1) 编辑和添加 server
闭包文件:
location ~ ^/(nodeApp|socket\.io) {
proxy_pass http://localhost:3000;
}
SocketIO 默认使用 /socket.io 路径,因此需要配置 Nginx 以便它不仅代理 /nodeApp 请求,还代理 /socket.io
2) 在 Node.js 服务器文件中再进行一次编辑。替换:
http.createServer((req, res) => {` to `app.get('/node', function(req, res) {