我正在使用Docker设置服务器。一个容器运行配置了SSL的nginx映像。第二个容器使用简单的节点应用程序运行(在端口3001上)。我有两个容器与--link docker参数进行通信。
我需要将所有HTTP请求重定向到HTTPS。查看其他主题和在线资源,我找到了return 301 https://$host$request_uri
。当我在浏览器中输入http://localhost时,我在浏览器中获取了上游的名称(https://node_app而不是https://localhost)。如何在不定义server_name或明确定义域的情况下成功重定向?
修改:我应该澄清一下,直接在浏览器中访问https://localhost是有效的。 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;
}
}
}
答案 0 :(得分:1)
看起来一切都还好。尝试了一些卷曲调用,以确保正确设置标题(@RichardSmith的推荐信用于推荐)。还在不同的浏览器中测试过一切正常!事实证明我需要清除主浏览器的缓存。不知道为什么,但它解决了这个问题!
对于有兴趣控制nginx完成的301重定向缓存的任何人:https://serverfault.com/questions/394040/cache-control-for-permanent-301-redirects-nginx