记录一次nginx升级,支持ipv4和ipv6访问https
项目要求,需要让现有网站项目支持https,并同时支持ipv6访问,经过分析,现在nginx版本较老,所以决定升级nignx,并且同步配置https和ipv6。 |
服务器网络环境需要支持ipv6,并且分配公网ipv6地址,ssl证书提前申请好.
wget
yum install openssl yum install openssl-devel
判断域名解析是否支持ipv6
找一台支持ipv6网络的客户端电脑,仅使用ipv6网络来ping网站域名,如果解析域名返回的ip地址不是ipv6,则说明域名ipv6解析未做。编译nginx
./configure --user=root --group=root --prefix=/usr/local/nginx --with-http_ssl_module --with-stream --with-mail=dynamic --with-http_gzip_static_module --with-pcre --with-http_mp4_module --with-http_gunzip_module --with-ipv6 make make install
这里注意,在较高的nginx版本里面,已经自带了ipv6模块,不用增加–with-ipv6,如果是比较老的版本编译,需要增加–with-ipv6,如果编译的时候出现如下警告提示,说明版本已经自带ipv6模块:
修改配置文件
把之前申请的https证书(crt文件和key文件)上传到服务器目录
listen 443 ssl; listen [::]:443 ssl; ssl_certificate /usr/local/nginx/conf/conf.d/ssl/ ssl_certificate_key /usr/local/nginx/conf/conf.d/ssl/ ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; listen 443 ssl; 支持ipv4访问https listen [::]:443 ssl; 支持ipv6访问https
firewall-cmd --zone=public --add-port=443/tcp --permanent firewall-cmd --reload
./sbin/nginx -s reload
查看443端口是否在监听状态
lsof -i:443
如图所示,https协议已经在监听状态,并且分别支持ipv4和ipv6!
一切操作和流程都没有问题,但是发现启动后,网站只支持ipv4访问htpps,ipv6访问提示如下错误:
提示: 错误代码:SSL_ERROR_RX_RECORD_TOO_LONG
通过分析得出:
ipv4下能正常访问https
ipv6下访问https的流量是到了nginx服务器
ipv6下测试443端口是通的
经过反复分析以及错误代码提示能判断出ipv6是证书没有被有效识别到,导致ipv6无法使用https,但是ipv4下又能识别到证书,根据这一现象,能判断出是ipv4和ipv6下网络流量的走向不同所致,经过和云服务器提供商沟通,发现原来是在ipv6下互联网访问443端口的流量被映射到了内网服务器的80端口,所以ipv6下测试443端口是通的,但是又无法识别证书的问题。
总体上升级配置是非常简单的,并没有任何难度,但是中途因为网络问题还是出现了意外,所以在分析应用故障的时候,一定要注意外部的网络环境问题。
原文地址:https://www.cnblogs.com/chenguopa/p/15238081.html
- PHP开发过程的那些坑(三) ——PHParray_shift函数
- CSS3弹性盒布局
- iBatis.Net(4):DataMapper API
- PHP开发过程的那些坑(四) ——PDO bindParam函数
- iBatis.Net(3):创建SqlMapper实例
- PHP开发过程的那些坑(五) ——PHP的empty()
- iBatis.Net(2):基本概念与配置
- ASP.NET Web API中的依赖注入什么是依赖注入ASP.NET Web API依赖解析器使用Unity解析依赖配置依赖解析
- 解决Entity Framework查询匿名对象后的跨域访问的一种方式
- WebSocket在ASP.NET MVC4中的简单实现
- 在ASP.NET MVC中使用Unity进行依赖注入的三种方式第一种方法第二种方法第三种方法
- Unity Container中的几种注册方式与示例1.实例注册2.简单类型注册
- 使用Unity创建依赖注入依赖注入生命周期:注册、解析、销毁 注册解析销毁
- 使用WCF进行跨平台开发之三(JAVA调用WCF服务)1.开发必备2.生成WCF客户端3.开发程序4.结束语
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- php DES加密算法实例分析
- php提供实现反射的方法和实例代码
- PHP实现批量修改文件名的方法示例
- Linux VPS快速下载Bilibili视频脚本 ,支持1080P/720P/360P等格式
- PHP递归统计系统中代码行数
- PHP切割整数工具类似微信红包金额分配的思路详解
- php写入文件不覆盖的实例讲解
- php解决crontab定时任务不能写入文件问题的方法分析
- Laravel项目中timeAgo字段语言转换的改善方法示例
- php生成微信红包数组的方法
- 解决php写入数据库乱码的问题
- php写入txt乱码的解决方法
- PHP实现的AES 128位加密算法示例
- php写入mysql中文乱码的实例解决方法
- php实现的支付宝网页支付功能示例【基于TP5框架】