nginx 配置 http/2(h2) 和 http 在同一端口的问题
nginx 配置 http/2(h2) 和 http 在同一端口的问题
大家好,我是烤鸭:
这个完全是个采坑记录了。
场景说明
由于这边有个需求想加个支持 grpc 方式转发的域名。
正常的二级域名都是映射到80端口,所以也没想太多,按照这个方式加上了。
# 已有的配置
server {listen 80;server_name yyy.xx.com;# access_log logs/access.log main;location / {proxy_pass http://127.0.0.1:10086; # 此处配置http服务的ip和端口}
}# grpc 代理配置
server {listen 80 http2; # grpc方式对外暴露端口server_name xxx.xx.com;# access_log logs/access.log main;location / {grpc_pass grpc://127.0.0.1:11800; # 此处配置grpc服务的ip和端口}
}
生效之后,nginx 其他的域名访问不了了,what ???
问题排查
加的这块有什么问题呢?
有人说是因为 http2 必须建立在https之上,只能挂在 443端口,果然改成 443端口之后,其他域名就可以访问了。
事实是这样的么?
我们看下nginx 官网对 http/2 升级的说明。
https://www.nginx.com/blog/nginx-1-9-5/
如果您的应用程序还没有用SSL/TLS加密,那么现在正是采取这一行动的好时机。加密应用程序可保护您免受间谍和中间人攻击。一些搜索引擎甚至奖励加密网站在搜索结果中排名的提高。以下配置块将所有普通HTTP请求重定向到站点的加密版本。
要启用HTTP/2支持,只需将http2参数添加到所有监听端口中。还包括ssl参数,这是必需的,因为浏览器不支持没有加密的HTTP/2。
两句话:开启 ssl/tsl,配置http2 ,这里虽然官方demo给的端口是 443,但是说明没有说必须配置在443。
http/2 和https 到底有什么区别?浏览器如果兼容https协议,访问 http/2 就没问题。这个只是针对 client端的,如果通过程序语言,使用 http/2 的grpc 方式,仅配置 http2 就行。
问题原因
那如果不是 http/2 必须配置在 443端口的原因,实际原因是什么。
几年前就有人给nginx提过这个问题。
https://trac.nginx.org/nginx/ticket/808
https://trac.nginx.org/nginx/ticket/816
http/2 和 http 可以同时存在,只要不是同一个端口就行。如果是支持ssl 也可以是同一个端口。
配置 http/2 也可以两个方式,
listen port_num http2 ssl
(支持HTTP/1.1和h2,通过ALPN选择协议)
listen port_num http2
(仅支持h2)
由于我是服务端连接,所以选择了下边的方式。
仅支持h2就无法响应其他的协议了,看下源码更清晰。
(https://github.com/nginx/nginx/blob/9e07862d6e9d37041a42bbfa34dd1f56ed547505/src/http/ngx_http_request.c#L324-L331)
解决方案
仅配置 http/2 的时候选择一个和 http不同的端口。
配置 http2 ssl 的时候选择支持 https的端口。(一般就是 443)
nginx 配置 http/2(h2) 和 http 在同一端口的问题相关推荐
- nginx配置二级目录,反向代理不同ip+端口
场景描述: 通过二级目录(虚拟目录,应用程序)的方式访问同一ip+端口的不同应用,例如location是用户使用页面,location/admin/是管理页面,location部署在192.168.1 ...
- Nginx配置二级目录反向代理本机不同端口
前序 最近在家里的服务器上装了一大堆的服务器软件,大多数都需要Web网站访问的,比如:Gitlab.Apache.Jenkins等等.然而又因为是不同的应用,需要占用不同的端口,每次访问起来都需要在I ...
- nginx配置与应用
Nginx 初识nginx 介绍Nginx Nginx安装 配置文件 启动Nginx Nginx配置文件 日志格式 网站配置 server配置网站 虚拟化主机 nginx日志 切割日志 nginx模块 ...
- nginx配置http、https访问,nginx指定ssl证书,阿里云腾讯云华为云设置nginx https安全访问
nginx配置http.https访问 要设置https访问需要从对应的云厂商申请证书,并下载Nginx证书到服务器. 我这里从阿里云申请了免费的域名证书,然后将证书放置在服务器的/etc/ssl/. ...
- 快速通过nginx配置域名访问
配置nginx进行域名访问文件 在nginx安装目录下的conf目录下新建一个配置文件,比如你新加的域名为admin.hello.com,你希望通过这个域名访问admin项目,那么新建一个admin. ...
- 前后端分离nginx配置,同时解决跨域问题
背景 现在,web开发的前后端分离技术越来越火爆,由于最近的公司官网使用了前后端分离的方案,这里就来记录一下前后端分离的项目部署.这里我们使用的前端框架是Vue.js,后台使用Laravel7提供数据 ...
- Nginx 配置清单(一篇够用)
欢迎关注方志朋的博客,回复"666"获面试宝典 Nginx 是一个高性能的 HTTP 和反向代理 web 服务器,同时也提供了 IMAP/POP3/SMTP 服务,其因丰富的功能集 ...
- docker nginx 配置负载均衡
在上篇的文章中我们介绍了docker nginx配置简单的代理 在这篇文章我们介绍docker 利用nginx配置负载均衡 所谓的负载均衡是两台服务器,或者是多台服务器上面部署项目,但是访问的方式是通 ...
- python修改nginx配置文件_zookeeper 动态管理nginx配置
假设我们有一个场景,所有服务器共享同一份配置文件,我们肯定不可能单独手动维护每台服务器,这时可以利用zookeeper的配置管理功能. 环境:python + nginx + zookeeper 目的 ...
最新文章
- Repeater分页代码
- 计算机巨星陨落!图灵奖得主 Edmund Clarke 因感染“新冠”逝世
- 打开AD组策略编辑器提示“strings区段项目太长被截断”的解决
- NYOJ 613 免费馅饼
- C#中多线程同步的Monitor理解
- c语言ungetc参数,关于一些C语言标准I/O函数的见解。int ungetc(int ch,FILE *fp)函数...
- 三、linux目录浏览管理及维护
- 牛客网 【每日一题】6月11日题目精讲 背包
- java 中的正则表达式_Java中的正则表达式–软介绍
- LeetCode 20. 有效的括号 golang(三)
- for循环与each的区别
- layui 复选框checked获取值和赋值
- 程序员转项目管理之考证PMP
- 硬盘属于计算机的主存吗,.硬盘装在主机箱内,因此硬盘属于主存对吗
- Android移动应用技术打地鼠小游戏(简单App实现)——学习成果
- nyoj239 月老的难题 (匈牙利算法,最大匹配,邻接表)
- html-css-边框样式
- 输出青蛙跳台所有路径
- sfsfdgsdfg
- 蜂鸣器制作“ 孤勇者 ”音乐
热门文章
- 前端学习(3178):ant-design介绍1
- 前端学习(3061):vue+element今日头条管理-接口分页参数说明
- 前端学习(2902):javascript浏览器的历史
- PS教程第二十三课:套索工具
- [css] 请描述css的权重计算规则
- 前端学习(2567):指令的本质
- 前端学习(2440):axios处理文章数据
- “睡服”面试官系列第八篇之iterator(建议收藏学习)
- 前端学习(1512):vue-router文档
- java学习(41):成员实例的定义和访问续