2

我正在尝试在 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/');

我想知道如何使用现有的 Nginx 配置将这个 Node.js 应用程序绑定到带有 SSL 的端口上。

4

2 回答 2

1

您必须使用 nginx 作为 nodejs 应用程序的反向代理。

例如,让节点在 3000 端口上运行,然后在你的 nginx conf 中执行类似的操作。

如果节点应用程序是服务器中唯一的东西,

server {
   listen 443;
   <-- snip -->

   location / {
      proxy_pass http://localhost:3000;
   }

   <-- snip -->
}

如果您在服务器上运行其他类似 php 应用程序的东西,请创建另一个服务器块并server_name为您的应用程序单独提供一个。

server {
   listen 443;
   server_name nodeapp.mysite.com;
   <-- snip -->

   location / {
      proxy_pass http://localhost:3000;
   }

   <-- snip -->
}
于 2017-08-04T12:39:46.843 回答
0

这是我对问题的回答。有两个错误:

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) {
于 2017-08-04T13:26:03.823 回答