【问题标题】:NGINX: HTTP redirect to HTTPS not working with nodeNGINX:HTTP 重定向到 HTTPS 不适用于节点
【发布时间】:2016-05-18 20:36:32
【问题描述】:

我正在尝试将所有 HTTP 请求重定向到 HTTPS 请求。我的后端是节点。 这是我在 conf.d/ 上的 nginx 配置:

upstream node {
server  127.0.0.1:8000;
}
server {
    listen      80;
    server_name mydomain.com;
    return 301  https://$server_name$request_uri;
}
server {
    listen 443 ssl;
    server_name mydomain.com;
    ssl on;
    gzip on;
    ssl_certificate /etc/letsencrypt/live/mydomain.com/cert.pem;
    ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem;
    ssl_session_timeout 5m;

location / {
    proxy_pass http://node;
    proxy_redirect off;
}

}

这是我的节点配置:

// Calls config file to ExpressJS instance 
var app = require('./config/express')();

// Calls config file to MongoDB
require('./config/database')('mongodb://10.0.2.18/mydb');

http.createServer(app).listen(app.get('port'), function(){

console.log('HTTP listening on' + app.get('port'));

});

当我明确使用 HTTPS 协议时,它可以工作。但是,如果我使用 HTTP 协议,它就不起作用,即不会重定向到 HTTPS。

有什么建议吗?

【问题讨论】:

  • 对于它的价值,如果其他人在与我相同的情况下看到这一点:我刚刚从旧版本的 Nginx 升级到最新版本以使用 HTTP2,长话短说,我的 HTTPS 重定向没有工作,因为我仍然必须杀死旧的 Nginx 进程并重新启动 Nginx。

标签: http redirect nginx https


【解决方案1】:

我找了一个类似的例子,发现这个页面:https://bjornjohansen.no/redirect-to-https-with-nginx

我看到的唯一有意义的区别是,在那个页面上,他正在做return 301 https://$host 而不是$server_name。这个问题似乎表明使用主机可能会更好:https://serverfault.com/questions/706438/what-is-the-difference-between-nginx-variables-host-http-host-and-server-na

我还会仔细检查配置中的所有 server_name 条目。

您应该能够通过使用诸如 Charles、wireshark 之类的工具,甚至浏览器调试器来查看重定向 - 所以应该可以使用它来计算返回的内容。它也可能在日志文件中。

如果直接去https://的时候正常,说明https和nginx和node的连接正常;只需要让重定向正常工作。

【讨论】:

  • 我刚刚发现了错误。我在我的 iptables 列表中留下了一条规则,将包从端口 80 重定向到 3000。这样请求甚至不会到达 nginx。使用端口 443 它可以正常工作,因为它没有规则。
猜你喜欢
  • 1970-01-01
  • 2018-05-24
  • 2018-12-23
  • 2015-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多