Node.js Docker nginx将HTTP重定向到HTTPS
我正在用Docker设置服务器。一个容器运行配置了SSL的nginx映像。第二个容器运行一个简单的节点应用程序(在端口3001上)。这两个容器通过一个--link docker参数进行通信 我需要将所有HTTP请求重定向到HTTPS。查看其他线程和在线源代码,我发现Node.js Docker nginx将HTTP重定向到HTTPS,node.js,nginx,docker,Node.js,Nginx,Docker,我正在用Docker设置服务器。一个容器运行配置了SSL的nginx映像。第二个容器运行一个简单的节点应用程序(在端口3001上)。这两个容器通过一个--link docker参数进行通信 我需要将所有HTTP请求重定向到HTTPS。查看其他线程和在线源代码,我发现return301 https://$host$request\u uri。当我在浏览器中键入时,我会在浏览器中获得上游的名称(而不是)。如何在不定义服务器名称或显式定义域的情况下成功重定向 编辑:我应该澄清,直接在浏览器中访问是可行
return301 https://$host$request\u uri
。当我在浏览器中键入时,我会在浏览器中获得上游的名称(而不是)。如何在不定义服务器名称或显式定义域的情况下成功重定向
编辑:我应该澄清,直接在浏览器中访问是可行的。HTTP没有
这是我的nginx.conf文件:
worker_processes 1;
events { worker_connections 1024; }
http {
upstream node_app {
server node:3001;
}
server {
listen 80;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
location / {
proxy_pass http://node_app/;
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;
}
}
}
看起来一切都很好。尝试了一些curl调用,以确保标题设置正确(推荐@RichardSmith)。也在不同的浏览器中测试。一切都成功了!我需要清除主浏览器的缓存。不知道为什么,但它解决了问题
对于任何有兴趣控制nginx执行的301重定向缓存的人:方法与运行nginx的裸机linux box相同。只需在谷歌上搜索一分钟或更短的时间。在docker中公开两个侦听端口目前似乎不是您的问题(HTTPS将以与HTTP相同的方式公开,以防万一)
nginx
配置看起来不错。节点应用程序是否正在更改域名?使用浏览器插件或curl分析HTTP响应中的位置
头,以确定重定向的确切顺序。@RichardSmith运行curlhttp://localhost --head
并得到以下响应。看起来位置是正确的<代码>HTTP/1.1 301永久移动服务器:nginx/1.11.5日期:Sun,2016年10月16日13:58:39 GMT内容类型:文本/html内容长度:185连接:保持活动位置:https://localhost/如果将代理通行证更改为代理通行证,会发生什么情况http://node_app;代码>?这太奇怪了!我只在Google Chrome上看到这种行为。Safari和Firefox能够成功重定向http://localhost
至https://localhost
。有什么想法吗?