Node.js 使用SSL的nodejs应用程序的Nginx配置

Node.js 使用SSL的nodejs应用程序的Nginx配置,node.js,ssl,nginx,Node.js,Ssl,Nginx,我有一个节点应用程序正在运行 localhost:8008/serviceName 此应用程序位于/opt/myfolder/test/中,我还在其中的certs文件夹中生成了一个.pem文件和一个由CA签名的.cer文件。 我还安装了pm2,以帮助我从https端点运行此服务器 我创建了一个名为service.conf的文件,并将其符号链接到/etc/nginx/sites enabled 这就是.conf文件的外观 server { listen 443;

我有一个节点应用程序正在运行

localhost:8008/serviceName

此应用程序位于
/opt/myfolder/test/
中,我还在其中的certs文件夹中生成了一个
.pem
文件和一个由CA签名的
.cer
文件。 我还安装了pm2,以帮助我从https端点运行此服务器

我创建了一个名为
service.conf
的文件,并将其符号链接到
/etc/nginx/sites enabled

这就是
.conf
文件的外观

    server {
        listen 443;

        server_name localhost

        root /opt/myfolder/test/public;
        index index.html index.htm;

        ssl on;
        ssl_certificate    /opt/myfolder/test/certs/server.cer
        ssl_certificate_key    /opt/myfolder/test/certs/server.pem;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
    ssl_session_cache shared:SSL:1m;


    location @app {
        log_not_found off;
        access_log off;
        proxy_pass https://127.0.0.1:8008;
        proxy_http_version 1.1;
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_cache_bypass $http_upgrade;
    }

    location / {
        try_files $uri $uri/ @app;
    }

}
在我的Node.js应用程序中,我添加了以下内容:

var server = https.createServer({
      key: fs.readFileSync(path.join(__dirname, 'certs', 'server.pem')),
      cert: fs.readFileSync(path.join(__dirname, 'certs', 'server.cer'))
    }, app);


 server = app.listen(8008,'localhost', function() {
  console.log('Express server listening on port ' + server.address().port);
});
通过以下方式重新启动nginx:
sudo服务nginx restart
并使用pm2启动应用程序:
pm2 start app.js

我现在可以访问

localhost:8008/serviceName

但我无法访问

我想知道我的配置是否有问题,或者应用程序是否通过nginx路由。 我缺少什么?

替换:

server = app.listen(8008,'localhost', function() {
  console.log('Express server listening on port ' + server.address().port);
});
与:


解决了这个问题。

您已经创建了https服务器,在下一行中,您将其扔掉,并创建默认http服务器(
app.listen(…);
),当您转到
localhost:8008
时,您将完全绕过nginx。如果你想使用nginx,你不需要你的应用程序使用HTTPS
server = app.listen(8008,'localhost', function() {
  console.log('Express server listening on port ' + server.address().port);
});
server.listen(8008,'localhost', function() {
  console.log('Express server listening on port ' + server.address().port);
});