我正在尝试使用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函数。
答案 0 :(得分:0)
这是一个CloudFlare问题。上面的代码有效。对于CloudFlare,您需要在“加密”区域下进行设置,以使用完全SSL模式。同样,我也执行了http to https重定向选项。
这似乎已经解决了所有问题。