nginx dns缓存导致后端不通
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx dns缓存导致后端不通相关的知识,希望对你有一定的参考价值。
参考技术A 1.问题现象我们使用nginx的时候,用到了nginx的反向代理功能。为了方便管理。后端站点或者服务一般都用的域名来表示。后端用的是aws的slb.
有一天后端业务突然不通了,走 Nginx 怎么也访问不了后端,而在 Nginx 机器上直接 curl 后端是没有问题的。
原因:
当时正好需要新增加个nginx配置,然后需要reload下,不经意的把上面的问题解决了。
经过询问aws相关人员,aws 切换过slb的ip。而nginx是有dns缓存的。所以在aws更换ip后nginx 代理不到后端。
解决:
1.在aws更新ip后,立刻重载nginx刷新缓存。太费事
2.使用nginx的resolver
在原来的 Nginx 配置里指定 DNS IP,并设置缓存 60 秒。缓存到期后会再次到dns服务器获取
Nginx平滑升级到最新版本
(一)简述:
早上收到nginx最新漏洞的通知,Nginx官方发布最新的安全公告,在Nginx范围过滤器中发现了一个安全问题(CVE-2017-7529),通过精心构造的恶意请求可能会导致整数溢出并且不正确处理范围,从而导致敏感信息泄漏。
当使用Nginx标准模块时,如果文件头从缓存返回响应,允许攻击者获取缓存文件头。在某些配置中,缓存文件头可能包含后端服务器IP地址或其他敏感信息。此外,如果使用第三方模块有潜在的可能导致拒绝服务。
影响版本
Nginx 0.5.6-1.13.2
漏洞等级
中危
Nginx 在官方公告中称发现了一个范围过滤器中的安全问题。通过精心构造的恶意请
求能造成整数溢出,对范围的不当处理会导致敏感信息泄漏。
No. 漏洞名称 漏洞危害
CVE-2017-7529 Nginx range 过滤器整形溢出漏洞 高危
针对 CVE–2017–7529 修复建议
针对 Nginx range 过滤器整形溢出漏洞的修复建议
1) 下面的配置可以作为暂时的解决办法:
max_ranges 1;
2) 建议受影响用户尽快升级至 1.13.3, 1.12.1
3) 及时安装官方补丁。
虽然临时可以解决,不过还是建议升级到最新的版本,官方建议升级到1.12.1。
(二)具体的升级步骤:
(1)升级和安装nginx第三方模块一样,需要查看原来安装nginx的版本以及编译的参数:
[[email protected] opt]# /usr/local/nginx2/sbin/nginx -V nginx version: nginx/1.10.3 built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC) built with OpenSSL 1.1.0e 16 Feb 2017 TLS SNI support enabled configure arguments: --prefix=/usr/local/nginx2 --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --with-http_gzip_static_module --with-http_stub_status_module --with-http_stub_status_module --with-http_v2_module --with-openssl=/tmp/install/openssl-1.1.0e --with-http_v2_module
(2)下载要升级的nginx版本
[[email protected] soft]# wget http://nginx.org/download/nginx-1.12.1.tar.gz --2017-07-17 15:41:24-- http://nginx.org/download/nginx-1.12.1.tar.gz 正在解析主机 nginx.org... 206.251.255.63, 95.211.80.227, 2001:1af8:4060:a004:21::e3, ... 正在连接 nginx.org|206.251.255.63|:80... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度:981093 (958K) [application/octet-stream] 正在保存至: “nginx-1.12.1.tar.gz” 90% [=================================================> ] 892,302 265K/s eta(英国中部时100%[======================================================>] 981,093 291K/s in 3.3s 2017-07-17 15:41:28 (291 KB/s) - 已保存 “nginx-1.12.1.tar.gz” [981093/981093])
(3)解压ningx下载的压缩包编译make,切记不要make install。
[[email protected] soft]# tar xf nginx-1.12.1.tar.gz [[email protected] soft]# cd nginx-1.12.1 [[email protected] nginx-1.12.1]# ls auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src [[email protected] nginx-1.12.1]# ./configure --prefix=/usr/local/nginx2 --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --with-http_gzip_static_module --with-http_stub_status_module --with-http_stub_status_module --with-http_v2_module --with-openssl=/tmp/install/openssl-1.1.0e --with-http_v2_module checking for OS + Linux 2.6.32-358.el6.x86_64 x86_64 checking for C compiler ... found + using GNU C compiler + gcc version: 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC) checking for gcc -pipe switch ... found checking for -Wl,-E switch ... found checking for gcc builtin atomic operations ... found checking for C99 variadic macros ... found checking for gcc variadic macros ... found checking for gcc builtin 64 bit byteswap ... found checking for unistd.h ... found checking for inttypes.h ... found checking for limits.h ... found checking for sys/filio.h ... not found checking for sys/param.h ... found checking for openat(), fstatat() ... found checking for getaddrinfo() ... found checking for PCRE library ... found checking for PCRE JIT support ... found checking for zlib library ... found creating objs/Makefile Configuration summary + using system PCRE library + using OpenSSL library: /tmp/install/openssl-1.1.0e + using system zlib library nginx path prefix: "/usr/local/nginx2" nginx binary file: "/usr/local/nginx2/sbin/nginx" nginx modules path: "/usr/local/nginx2/modules" nginx configuration prefix: "/usr/local/nginx2/conf" nginx configuration file: "/usr/local/nginx2/conf/nginx.conf" nginx pid file: "/usr/local/nginx2/logs/nginx.pid" nginx error log file: "/usr/local/nginx2/logs/error.log" nginx http access log file: "/usr/local/nginx2/logs/access.log" nginx http client request body temporary files: "client_body_temp" nginx http proxy temporary files: "proxy_temp" nginx http fastcgi temporary files: "fastcgi_temp" nginx http uwsgi temporary files: "uwsgi_temp" nginx http scgi temporary files: "scgi_temp" [[email protected] nginx-1.12.1]# make
由于make的时间比较长,需要稍等下。
(4)make编译完后会在安装目录下生成一个objs目录且在该目录下有一个nginx执行文件。
[[email protected] nginx-1.12.1]# ls auto CHANGES.ru configure html Makefile objs src CHANGES conf contrib LICENSE man README [[email protected] nginx-1.12.1]# ll objs/ 总用量 7124 -rw-r--r-- 1 root root 17459 7月 17 15:48 autoconf.err -rw-r--r-- 1 root root 43530 7月 17 15:48 Makefile -rwxr-xr-x 1 root root 7152312 7月 17 15:51 nginx -rw-r--r-- 1 root root 5345 7月 17 15:51 nginx.8 -rw-r--r-- 1 root root 7066 7月 17 15:48 ngx_auto_config.h -rw-r--r-- 1 root root 657 7月 17 15:48 ngx_auto_headers.h -rw-r--r-- 1 root root 6242 7月 17 15:48 ngx_modules.c -rw-r--r-- 1 root root 38232 7月 17 15:51 ngx_modules.o drwxr-xr-x 9 root root 4096 7月 17 15:48 src
(5)备份原来老的nginx文件
[[email protected] nginx-1.12.1]# mv /usr/local/nginx2/sbin/nginx /usr/local/nginx2/sbin/nginx.bak [[email protected] nginx-1.12.1]# cp objs/nginx nginx nginx.8 [[email protected] nginx-1.12.1]# cp objs/nginx /usr/local/nginx2/sbin/ [[email protected] nginx-1.12.1]# /usr/local/nginx2/sbin/nginx -t nginx: the configuration file /usr/local/nginx2/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx2/conf/nginx.conf test is successful
(6)使用make upgrade替换老的nginx进程
[[email protected] nginx-1.12.1]# make upgrade
/usr/local/nginx2/sbin/nginx -t
nginx: the configuration file /usr/local/nginx2/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx2/conf/nginx.conf test is successful
kill -USR2 `cat /usr/local/nginx2/logs/nginx.pid`
sleep 1
test -f /usr/local/nginx2/logs/nginx.pid.oldbin
kill -QUIT `cat /usr/local/nginx2/logs/nginx.pid.oldbin`
(7)执行/usr/local/nginx2/sbin/nginx -V查看nginx最新的版本及编译的参数
[[email protected] nginx-1.12.1]# /usr/local/nginx2/sbin/nginx -V nginx version: nginx/1.12.1 built by gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC) built with OpenSSL 1.1.0e 16 Feb 2017 TLS SNI support enabled configure arguments: --prefix=/usr/local/nginx2 --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --with-http_gzip_static_module --with-http_stub_status_module --with-http_stub_status_module --with-http_v2_module --with-openssl=/tmp/install/openssl-1.1.0e --with-http_v2_module
至此升级完成。
以上是关于nginx dns缓存导致后端不通的主要内容,如果未能解决你的问题,请参考以下文章