我尝试与nginx一起运行节点服务器。使用护照模块,我遵循本地身份验证策略。我的问题是所有像'/ login'这样的快速重定向都会导致'localhost:3000 / login'而不是'http://:3000 / login'。
这是一个示例函数:
exports.ensureAuthenticated = function(req, res, next) {
if (req.isAuthenticated()) { return next(); }
res.redirect('/login');
}
当服务器是远程ip plus端口时,即使res.redirect(服务器+'/ login')也没有区别。
这是我的nginx配置(/ etc / nginx / sites-available / default)
upstream node_app {
server **<ip>**:3000;
}
server {
listen 8080;
server_name **<ip>**;
root /home/nls/www2;
access_log /var/log/nginx/foo.access.log;
error_page 404 /404.html;
location /remote_data/ {
# Proxy request to node:
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-NginX-Proxy true;
proxy_pass http://node_app;
proxy_redirect off;
access_log /var/log/nginx/foo_nodeapp.access.log;
}
location / {
try_files $uri $uri/index.html 404;
}
}
服务器代码不包含对localhost重定向的引用。在客户端也是重定向实现没有这样的重定向。
编辑:这会造成麻烦的溃败:
app.post('/login', passport.authenticate('local', { failureRedirect: 'http://<ip>:3000/login', failureFlash: true }), function(req, res) { res.redirect('http://**<ip>**:3000/vi-lab'); });