nginx+ipv6+https升级踩坑记

冲天香阵透长安,满城尽带黄金甲。这篇文章主要讲述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





    推荐阅读