HTTP / 2 nginx强制redirectHTTP到HTTPS打破预期的行为
我已经设置了一个使用支持HTTP / 2的最新版本的nginx的示例项目。
我正在closures这个官方博客文章: https : //www.nginx.com/blog/nginx-1-9-5/
下面是一个工作代码示例(详细介绍如何在README中设置所有内容 – 下面粘贴了nginx.conf
): https : //github.com/Integralist/Docker-Examples/tree/master/Nginx-HTTP2
user nobody nogroup; worker_processes auto; events { worker_connections 512; } http { upstream app { server app:4567; } server { listen *:80 http2; location /app/ { return 301 https://$host$request_uri; } } server { listen *:443 ssl http2; server_name integralist.com; ssl_certificate /etc/nginx/certs/server.crt; ssl_certificate_key /etc/nginx/certs/server.key; ssl_trusted_certificate /etc/nginx/certs/ca.crt; location /app/ { proxy_pass http://app/; } } }
虽然这个例子有效,但是我遇到了一个问题,如果我使用HTTP在浏览器中访问服务端点,它将首先下载一个名为download
的文件, 然后正确地redirect到HTTPS。
我不知道这个文件是什么,或者为什么redirect导致它发生,但它的内容是?
如果我尝试使用curl
(例如curl –insecure http:// $ dev_ip:$ dev_80 / app / foo),redirect失败,我想这是因为这个奇怪的下载文件? curl对stdout的响应只是??????
我想知道这是否可能是使用Docker来容纳Ruby应用程序和nginx服务器的副作用?
更新
我从http2
listen *:80 http2;
删除了http2
listen *:80 http2;
所以它现在读取listen *:80;
和下载不会发生,但我有问题是试图让redirect指向正确的docker端口现在: – /
为了澄清,我有一个具有dynamic端口生成( -P
)的nginx容器。 一个用于访问集装箱化nginx服务的端口:80
和一个用于:443
– 我的nginx.conf将stream量从HTTPredirect到HTTPS,但是我需要能够识别443端口号。
例如docker ps
显示0.0.0.0:32791->80/tcp, 0.0.0.0:32790->443/tcp
: docker ps
0.0.0.0:32791->80/tcp, 0.0.0.0:32790->443/tcp
我正在尝试将http://example.com:32791/app/fooredirect到https://example.com:32790/app/foo
我不确定如何configurationnginx来知道相关的443 Docker端口号是否是dynamic生成的?
运行nginx容器时,我可以明确地使用-p
。 但是我仍然需要将这个端口号作为一个variables传递给nginx(快速谷歌会build议使用Docker的-e "my_port=9999"
,然后使用nginx的env
声明来访问它)
更新2
我甚至尝试交换显式端口-p
,然后硬编码端口号到nginx.conf
没有运气(例如docker run ... -p 60443:443 -p 60080:80
)…
listen *:80; location /app/ { return 301 https://$host:60443$request_uri; }
…如果我点击http://example.com:60080/app/,它会被redirect到https://example.com:60443/,所以几乎在那里,但实际的path/app/
并没有被添加到最后redirect?
我遇到的问题是试图让redirect指向正确的docker端口
如果你的nginx docker run --link
容器与docker run --link
链接( docker run --link
),那么正确的端口是ruby容器镜像中的EXPOSE
(d)(即使你不知道哪个主机端口的EXPOSE端口是映射)
直接链接容器到容器可以使用dockerfile中提到的端口。
- WordPress的 – curl错误7:无法连接到本地端口80:连接被拒绝
- Jenkins不能curl到Docker容器上的http端点主机
- 泊坞窗自定义DNS在容器之间解决
- 如何使用curl命令获取清单v2模式版本2
- Dockerregistry2.0 API v2
- 警告:模块“curl”已经在第0行的Unknown中加载(从custom.php.ini文件中修复)
- docker-compose中的Docker Couchbase:无法连接到127.0.0.1端口8091:Connection refused wh
- Docker:如何在Docker容器中调整运行在主机上的本地服务器xyz.example.com
- 使用Docker Engine API在现有容器中执行命令