冲天香阵透长安,满城尽带黄金甲。这篇文章主要讲述nginx+ipv6+https升级踩坑记相关的知识,希望能为你提供帮助。
上周接到甲方需求,要求把官网升级并支持IPV6。于是申请机器,申请开通网络配置,这些都是兄弟部门完成。由于官网程序本身是部署好的,我们就在新的机器上安装了weblogic应用,nginx应用程序直接复制到新的机器上,一切以为准备就绪时噩梦才开始。步步踩坑记录如下:
首先说明一下我们服务器和nginx的版本介绍,
服务器:SUSE
Nginx:1.13.7
【nginx+ipv6+https升级踩坑记】首先是启动weblogic
一切正常。启动nginx开始报错,缺少gcc,缺少pcre,缺少pcre-devel
开始下载资源并安装。
检查安装命令如下:
rpm -qa pcre
rpm -qa gcc
rpm -qapcre-devel
Nginx启动前要检查一下是否支持ipv6和https。
用./nginx –V命令检查是否支持ipv6
和https.如果出现
configurearguments:--prefix=/XX/XX/nginx --with-http_ssl_module --with-ipv6
说明已经支持,否则要增加模块。增加模块需要重新编译安装。
进入nginx解压文件目录:
#
按需添加编译参数
./configure--prefix=/usr/local/software/nginx/ --with-ipv6(
--with-ipv6必须加,让nginx开启IPV6支持配置)
然后再#编译源码 make ??#?安装 make install
一切就绪后启动用root
用户nginx
,
由于nginx
配置文件是从老的服务器上复制过来的。遇到没有权限的问题,具体错误没有截图。原来配置文件第一行:是user
xxx;
后来修改为user
root;
nginx启动正常。
启动weblogic后发现ipv6
在公网访问不了。局域网内ipv4可以访问。于是就找网络部的兄弟咨询,网络部说到核心交换机后到我们的服务器,是我们的服务器443端口没有相应。公网的浏览器返回的是ERR_SSL_PROTOCOL_ERROR这个错误。从网上找各种资料,又修改了半天配置文件还是不行。最后改成http协议,把配置文件修改后竟然能访问,但是官网的样式都没有加载,还以为是nginx的配置把js和Css拦截,又找资料改配置始终不行。找来项目组的开发同事看了一下,发现问题了是因为没有把ipv6的地址放在拦截的本名单里。然后又把情况和网络部沟通一下。他们还是说没问题。于是建议网络部能不能在局域网内配置一台ipv6的终端,访问我们的https的ipv6服务器测试一下。这次有进步了。内网可以访问,外网不能访问,也就是程序和nginx都没问题,是网络的问题。现在网络部正在加班排查问题。下面是我们的配置文件:
http如下:
userroot;
worker_processes2;
events
worker_connections1024;
http
includemime.types;
default_typeapplication/octet-stream;
sendfileon;
#tcp_nopushon;
server_tokens off;
#keepalive_timeout0;
keepalive_timeout65;
client_max_body_size 30M;
client_header_buffer_size 128k;
client_body_buffer_size 128k;
#gzipon;
server
listen 80;
listen [::]:80 ipv6only=on;
server_name172.16.5.60;
location /
proxy_pass http://127.0.0.1:17001;
proxy_set_header Cookie $http_cookie;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cookie_path / "/; httponly; secure; SameSite=None";
expires -1;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
error_page500 502 503 504/50x.html;
location = /50x.html
roothtml;
Https如下:
userroot;
worker_processes2;
events
worker_connections1024;
http
includemime.types;
default_typeapplication/octet-stream;
log_format tongji $remote_addr--[$time_local]--"$request"
--$status--"$uid"--"$http_cookie"--"$http_user_agent"
--referer:"$httP_referer"
sendfileon;
#tcp_nopushon;
server_tokens off;
#keepalive_timeout0;
keepalive_timeout65;
client_max_body_size 30M;
server
listen443;
listen[::]:443 ssl ipv6only=on;
server_namexxx.com.cn;
set $uid "";
if ( $http_cookie ~* "uid=(\\S+)(; .*|$)")
set $uid $1;
#charset koi8-r;
if ( $time_iso8601 ~ "(\\d4)-(\\d2)-(\\d2)")
set $time $1$2$3;
#ssl on;
#./server.pem; ./server.crt; 证书的同事说后缀什么都行。
ssl_certificate ./server.pem;
ssl_certificate_key ./server.key;
ssl_session_timeout 30m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!RC4:!MD5:!aNULL:!DHE;
ssl_prefer_server_ciphers on;
location /
proxy_pass https://127.0.0.1:17002;
proxy_set_header Cookie $http_cookie;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cookie_path / "/; httponly; secure; SameSite=None";
expires -1;
error_page500 502 503 504/50x.html;
location = /50x.html
roothtml;
这些rpm的资源包下载:关注公众号发送“nginx”获取百度网盘下载地址。
pcre-7.8-2.18
gcc-4.3-62.198
pcre-devel-8.32-12.el7
nginx 1.13.7
推荐阅读
- java版gRPC实战之五(双向流)
- Android 12 已来,你的 App 崩溃了吗()
- #yyds干货盘点#mysql二进制安装
- Flutter 专题49 图解 Flutter 与 Android 原生交互 #yyds干货盘点#
- SHELL学习二(for语法)
- 一文汇总数据库基础知识点!(建议收藏)
- 常用系统工作命令#yyds干货盘点#
- Linux通过命令行将英文改成中文#私藏项目实操分享#
- #私藏项目实操分享#微信小程序开发(集成腾讯地图的步骤)