nginx+ipv6+https升级踩坑记
Posted 活在云端
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx+ipv6+https升级踩坑记相关的知识,希望对你有一定的参考价值。
上周接到甲方需求,要求把官网升级并支持IPV6。于是申请机器,申请开通网络配置,这些都是兄弟部门完成。由于官网程序本身是部署好的,我们就在新的机器上安装了weblogic应用,nginx应用程序直接复制到新的机器上,一切以为准备就绪时噩梦才开始。步步踩坑记录如下:
首先说明一下我们服务器和nginx的版本介绍,
服务器:SUSE
Nginx:1.13.7
首先是启动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如下:
user root;
worker_processes 2;
events
worker_connections 1024;
http
include mime.types;
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;
server_tokens off;
#keepalive_timeout 0;
keepalive_timeout 65;
client_max_body_size 30M;
client_header_buffer_size 128k;
client_body_buffer_size 128k;
#gzip on;
server
listen 80;
listen [::]:80 ipv6only=on;
server_name 172.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_page 500 502 503 504 /50x.html;
location = /50x.html
root html;
Https如下:
user root;
worker_processes 2;
events
worker_connections 1024;
http
include mime.types;
default_type application/octet-stream;
log_format tongji $remote_addr--[$time_local]--"$request"
--$status--"$uid"--"$http_cookie"--"$http_user_agent"
--referer:"$httP_referer"
sendfile on;
#tcp_nopush on;
server_tokens off;
#keepalive_timeout 0;
keepalive_timeout 65;
client_max_body_size 30M;
server
listen 443;
listen [::]:443 ssl ipv6only=on;
server_name xxx.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_page 500 502 503 504 /50x.html;
location = /50x.html
root html;
这些rpm的资源包下载:关注公众号发送“nginx”获取百度网盘下载地址。
pcre-7.8-2.18
gcc-4.3-62.198
pcre-devel-8.32-12.el7
nginx 1.13.7
以上是关于nginx+ipv6+https升级踩坑记的主要内容,如果未能解决你的问题,请参考以下文章