node.js - 设置 nginx ssl nodejs+express socket.io angularjs

标签 node.js ssl nginx socket.io

我在后端构建了 nodejs+express,在前端构建了 angularjs,并在 nginx 下运行。 这是我的 nginx 设置

  server {
      listen 82;
      server_name example.com www.example.com;
      access_log /var/log/nginx/access.log;
      error_log /var/log/nginx/error.log;

      location / {
        rewrite     ^   https://$server_name$request_uri? permanent;
      }

  }

这条路由 443 用于 ssl

 server {
      listen 443;
      ssl on;
      access_log  /var/log/nginx/access.log;
      error_log /var/log/nginx/error.log;
      ssl_certificate /home/ubuntu/config.com.ssl/ssl.crt;
      ssl_certificate_key /home/ubuntu/config.com.ssl/ssl.key;
      server_name example.com www.example.com;

      location / {
          proxy_pass https://someIP:8085;

          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 ~ ^/(scripts.*js|styles|images) {
          gzip_static on;
          expires 1y;
          add_header Cache-Control public;
          add_header ETag "";

          break;
      }
      location /socket.io {
          proxy_pass https://someIP:3001;
          #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 /api {
          proxy_pass https://someIP:3001;

          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 /public {
          proxy_pass https://someIP:3001;

          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;
       } 
}   

在后端我这样设置服务器

   var app = require('../app');
   var debug = require('debug')('tlevi:server');
   var fs = require('fs');
   var http = require('http');
   var https = require('https')
   var options = {
      key: fs.readFileSync('./configssl/ssl.key'),
      cert: fs.readFileSync('./configssl/ssl.crt')
  }
  /**
   * Get port from environment and store in Express.
   */

  var port = normalizePort(process.env.PORT || '3001');
  app.set('port', port);

  /**
   * Create HTTP server.
   */

  //var server = http.createServer(app);
  var server = https.createServer(options, app);
  /**var server = https.createServer(app, options, (req, res) => {
    res.writeHead(200);
    res.end('hello world\n ssl');
  }).listen(3000);
  */
  var io = app.io;
  io.attach(server);

  /**
   * Listen on provided port, on all network interfaces.
   */

  server.listen(port);
  server.on('error', onError);
  server.on('listening', onListening);

服务器运行顺畅,但客户端出现 502 错误网关(但 ssl 运行良好)。有时客户端可以运行,但可以从客户端到服务器请求 API。

我错过了什么?

最佳答案

哇晚响应:listen 82; 应该是 listen 80;

默认的 http 请求端口是 80。这可以解释为什么 ssl 可以正常工作。

关于node.js - 设置 nginx ssl nodejs+express socket.io angularjs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38889607/

相关文章:

node.js - 在 node.js http 响应结束时运行清理代码

node.js - Windows Subsystem for Linux (WSL) 使用共享 Node.js 安装与 Windows : Node. js npm 和 npx 二进制文件不起作用

ssl - 在 Safari 和 websockets (osx/ios) 中使用自签名证书

SSL 证书 .csr .key .cert 文件

reactjs - React 网站子文件夹中的 "404 Not Found"

nginx - SSL 握手失败

node.js - 使用 Node.js SDK 调用链代码时出错 [TypeError : Cannot read property 'getConnectivityState' of undefined]

javascript - 如何使用react-datepicker 促进轻松的逐年导航?

基于 nginx 的 ssl 终止符上的 SSL 错误

javascript - Nginx 不传递自定义 header 来访问后端(Node js)