Nginx错误重定向太多-node.js+;sockets.io+;express.js

Nginx错误重定向太多-node.js+;sockets.io+;express.js,node.js,nginx,Node.js,Nginx,我正在尝试使用node.js、sockets.io和express.js设置nginx。express.js正在监听端口3000,我已将sockets.io连接到同一个express对象 我收到浏览器错误“重定向太多”。它看起来像是在(http->https)之间跳转?。我已附上我的代码。然而,我注意到,如果我在第8行注释掉我的重写规则,它就不再给我错误了。然而,它所做的是加载默认的nginx index.html,而不是我想要的nodejs服务器(localhost:3000)。我做错了什么

我正在尝试使用node.js、sockets.io和express.js设置nginx。express.js正在监听端口3000,我已将sockets.io连接到同一个express对象

我收到浏览器错误“重定向太多”。它看起来像是在(http->https)之间跳转?。我已附上我的代码。然而,我注意到,如果我在第8行注释掉我的重写规则,它就不再给我错误了。然而,它所做的是加载默认的nginx index.html,而不是我想要的nodejs服务器(localhost:3000)。我做错了什么

/etc/nginx/sites available/exampledomain.conf:

upstream upstream-nodejs {
        server 127.0.0.1:3000;
}

server {
        listen                  80;
        server_name             example.com www.example.com;
        rewrite                 ^(.*)   https://$host$1 permanent;
}

server {
        listen                  443 ssl;

        ssl                     on;
        server_name             example.com www.example.com;

        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; 
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; 

        keepalive_timeout       60;
        ssl_session_cache       shared:SSL:10m;

        large_client_header_buffers 8 32k;

        location / {
                proxy_pass              http://upstream-nodejs;
                proxy_next_upstream     error timeout invalid_header http_500 http_502 http_503 http_504;
                proxy_redirect          off;
                proxy_buffering         off;

                proxy_set_header        Host                    $host;
                proxy_set_header        X-Real-IP               $remote_addr;
                proxy_set_header        X-Forwarded-For         $proxy_add_x_forwarded_for;
                proxy_set_header        X-Forwarded-Proto       $scheme;
                add_header              Front-End-Https         on;
        }

        location /socket.io/ {
                proxy_pass              http://upstream-nodejs;
                proxy_redirect off;

                proxy_http_version      1.1;

                proxy_set_header        Upgrade                 $http_upgrade;
                proxy_set_header        Connection              "upgrade";

                proxy_set_header        Host                    $host;
                proxy_set_header        X-Real-IP               $remote_addr;
                proxy_set_header        X-Forwarded-For         $proxy_add_x_forwarded_for;
        }
}
下面是我的示例node.js代码:

#!/usr/bin/env node
const express = require('express');
const app = express();

app.get('/', (req, res) => {
  console.log('GET detected.');
  res.send("Hello World!");
});

const port = 3000;
const server = app.listen(port, () => {
  console.log(`Listening on http://localhost:${port}`);
});

get函数在“太多重定向”错误期间从未被调用。

这是一个CloudFlare问题。上面的代码有效。对于CloudFlare,需要在“Crypto”区域下设置,以使用完整SSL模式。此外,我还在上执行了http到https重定向选项

这似乎已经解决了所有问题