金沙澳门官网网址_金沙国际登陆

欢迎加入金沙澳门官网网址体验更多不一样的精彩.,金沙国际登陆提供最丰厚回馈!,因为金沙澳门官网网址这里的游戏是多种多样的,为大家打造一个最专业的化的超级五星酒店。

金沙澳门官网网址 > 服务器运维 > 十三起惨痛宕机案例,Nginx常见场景代理转发配置

原标题:十三起惨痛宕机案例,Nginx常见场景代理转发配置

浏览次数:54 时间:2019-10-08

多么痛的领悟:十三起惨痛宕机案例,领悟十三起案例

社区有很多兄弟分享惨痛宕机案例,提醒大家需警惕,以下介绍几起,满满都是血的教训……

(以下案例来自社区多位会员分享,主要由社区专家孙伟光、崔增顺编辑整理)

**

01

AIX 下 NTP 设置不当导致的多个集群宕机

事情发生在一段时间之前,接到朋友电话,用户有三套 oracle rac 集群运行在 aix 小机上,本地两套,同城机房两套,做完设备搬迁后的一天晚上,其中本地和同城的两套 rac 突然就整个重启了,而且发生在同一时间点。

网络、小机、存储、数据库分属不同的维保厂商,这就开始了扯皮。各家就开始从自己的方向自证无过错。我去之前内心也比较倾向于 oracle 的网络心跳出了问题,crs 抢 vote disk 的时候触发了重启。但由于是小机方的代表,仅从 aix 层面做了排查,未发现明显原因。对各主机宕机的时间做了一个梳理,去和 oracle 的事件日志去比对。暂时没查到什么东西。

宕机产生的 dump 发到了 IBM 原厂,IBM 后来出了个报告,根据 dump 内容定位触发宕机的进程为 cssd。oracle dba 重点看了那个进程的日志,发现宕机时间前后,时间突然变更,提前了40多秒。dba 确认,时间变更过多,cssd 进程会导致系统重启,怀疑和时间同步有关。

经检查,3套 aix 的 rac 集群使用了同一个 ntp server,但有一套没发生问题。对比检查差异,发现没问题的那套主机集群使用 xntpd 方式配置了时间同步。出问题的主机则直接使用了 ntpdate 命令做时间更新,并写入了 crontab 定期执行。检查 /var/adm/cron/log 日志,发现定时任务的执行时间和 cssd 故障时间一致。检查时间服务器,发现搬迁后,时间服务器的时间产生了较大偏差,xntpd 方式的时间同步在时间偏差大时不会去强制同步,ntpdate 命令的方式没有这个限制,会直接进行同步。最终导致了 cssd 进程检测到过大时间偏差后触发了宕机。

**经验分享:配置时间同步时,建议使用 xntpd 服务的方式,**不用直接在定时任务里写 ntpdate,因为 ntpdate 比较粗暴,发生故障时较大的时间偏差会导致应用出现问题,触发无法预知的后果。

由社区会员王巧雷分享

02

采用爱数备份一体机导致宕机

去年我们刚刚入手了一台爱数备份一体机,在测试阶段遇到了一个小例子和大家分享一下:

当时测试各种数据的备份和功能,就在一台系统上安装了爱数备份的代理客户端,客户端安装选项中有一项安装 CDP 驱动。 当时并没有留意,后来升级客户端版本,另外做了一些其他测试,就把代理客户端卸载了,但是并没有先去卸载 CDP 驱动,重启后系统就直接起不来了,和爱数的技术支持沟通后了解,需要先卸载CDP驱动,再卸载客户端,否则 CDP 驱动存在的时候,就会导致系统启动失败。

由社区会员“pysx0503”分享

03

经典双机双存储,某晚主存储异常故障,业务立刻中断

用户经典的双机双存储高可用应用方案。IBM 2*P570 PowerHA6.1 两台中端存储通过 lvm mirror 实现的数据镜像,上面跑着用户信贷系统,报表系统,存储压力较为繁忙。用户每年都会完成一次 HA 切换演练保证业务高可用。某晚一次存储电源故障,电源还没来得急更换,另外一个电源也坏了。这样主存储宕机了。恰巧这个时候业务也立刻停止了,用户电话里说刚做完的 Powerha 的演练,很顺利。可今天发生的这事却百思不得其解。

后来经过大量的日志和与用户交流得知,用户之前的一个操作给这次的业务中断埋下了一个大大的”地雷”。

究竟用户自己做的什么操作导致的此次事件呢?

用户业务系统有一个文件系统存储空间不够了,需要扩容,但是目前共享 vg 里的空间无法满了,需要重新加新的磁盘到 vg 里,存储管理员分配新的磁盘给两台主机,然后用户通过 Powerha cspoc 去加盘,扩容 FS。就是这么一个操作导致的问题发生。

经验分享:lvm mirror 双存储的情况下,我们扩 fs 需要注意先扩 LV,再扩 fs,这样能保证数据正确分布在2个存储上,如果在用户这种场景新加磁盘后直接扩fs,那就会造成数据拷贝是2份,但是不能准确地保证分布在两个存储上,有可能存储A分布90% 存储B分布110%。这样一台存储故障,就会直接导致数据的不完整。

由社区会员孙伟光分享

04

HACMP NODE ID 一致导致故障宕机

故障描述:

前些天在论坛闲逛,发现一兄弟的帖子“Power HA 其中一台异常宕机”(发布者:yangming27),点进去一看,发现故障描述和报错信息和我之前遇到的完全一样,基于提醒和血的教训,特将该问题编写成案例,希望大家引以为戒!

我们生产环境有 PowerVM 虚拟化后的 AIX 虚拟机2台,灾备环境有 PowerVM 虚拟化后 AIX 虚拟机1台,三台虚拟机通过 PowerHA XD(基于 SVC PPRC 远程复制)搭建了跨中心高可用环境,操作系统版本为7.1.2.3,HA 版本为7.1.2.6,搭建该环境之前,生产环境的两台 AIX 是通过 HAMCP 搭建了本地的高可用环境,为了灾备建设需求,将本地的1台主机通过 alt_disk_copy 的方式复制了一份 rootvg 至外置存储,并将该外置存储通过 SVC PPRC 复制至灾备存储卷当中,灾备的虚拟机再挂载该卷,并通过该卷启动操作系统。这样三台 AIX 虚拟机再重新搭建了PowerHA XD,实现跨中心 HA 热备。

通过这种方式,我们搭建了三套系统,均通过了 HA 切换测试,但是运行了一段时间后,其中一套系统的主机故障宕机(关机),资源组切向了备机,发现问题后,第一时间查看 errpt 日志,如下(这里借用 yangming27帖子中的日志截图)

故障分析:

由于操作系统没有开 always allow dump,所以并没有产生 dump 文件,当时分析了很久日志,很是疑惑不解,最终只能提交给 IBM 后台进行分析,后台也是许多天都没有答复。过了一个星期后,第二套系统也出现了一样的现象,一样的故障,造成主备 HA 切换,我开始怀疑是 HACMP XD 实施问题,立马翻阅了一下实施文档,发现在做 alt_disk_copy 时只用了 alt_disk_copy -d hdiskx,后面并没有用-O -B -C参数,这些参数主要是用来复制rootvg时,删除原操作系统的配置信息和 ODM 库的一些信息,这样一来可能就会造成生产主机和灾备备机的操作系统某些信息一致。基于这种怀疑,我复看了 errpt 报错记录,宕机的主要原因应该是以下几个点:

IBM.StorageRM daemon has been stopped

Group Services daemon stopped

Group Services detected a failure

QUORUM LOST,VOLUME GROUP GROUP CLOSING

猜想是否是 QUORUM 中保留的两个主备节点信息一致,导致 QUORUM 关闭。

接着在生产主机运行命令

odmget -q "attribute='node_uuid'" CuAt

输出:CuAt: name = "cluster0" attribute = "node_uuid" value = "673018b0-7a70-11e5-91fa-f9fe9b9bc3c6" type = "R" generic = "DU" rep = "s" nls_index = 3

在灾备主机运行命令 odmget -q "attribute='node_uuid'" CuAt

输出:CuAt: name = "cluster0" attribute = "node_uuid" value = "67301842-7a70-11e5-91fa-f9fe9b9bc3c6" type = "R" generic = "DU" rep = "s" nls_index = 3

生产主机运行命令

/usr/sbin/rsct/bin/lsnodeid

灾备主机运行命令

/usr/sbin/rsct/bin/lsnodeid

以上发现两个节点的 RSCT NODE ID 完全一致

这就是造成信息冲突的点,造成了主服务停止和 QUORUM 仲裁关闭的元凶。

故障解决:

1.将 PowerHA XD 的 HA 服务全部关闭,禁止 HA 组服务的保护,并运行命令

/usr/sbin/rsct/bin/hags_stopdms -s cthags

/usr/sbin/rsct/bin/hags_disable_client_kill -s cthags

2.停止 HA 的 ConfigRM 服务和 cthags 服务

stopsrc -s IBM.ConfigRM stopsrc -s cthags

3.重新配置 RSCT 节点

/usr/sbin/rsct/install/bin/recfgct

4.重启所有3台操作系统

shutdown -Fr

5.启动 HACMP 服务和资源组,并检查 RSCT NODE ID

经验分享:通过以上方法,彻底解决了三套系统的 HACMP 主机宕机问题,建议以后做类似 alt_disk_copy 时,一定要带上-B -C -O参数,保持新操作系统的洁净,以防碰到类似的莫名其妙的问题。

由社区会员“jxnxsdengyu”分享

05

Power 570/595 宕机

事情起因:

由于机器宕机是在周六,是客户的核心应用,但周六客户没有人上班,当周一上班的时候发现所有的办公,邮件系统等一半的核心应用不能访问,经过现场机房管理人员的临时排查,发现小机 Power595 后面所有的 I/O 柜掉电,Power570 黄灯亮起,绿灯慢闪。

工程师到达现场,按照与客户沟通好结果,我们开始干活,大概折腾了6个小时,Power595 还是没有启动起来,但 power570 可以正常访问了。为了赶紧让客户生产数据,我们临时决定,用 power570 临时做个 lpar 让存储链接过来,先拉起应用,再又折腾了3个多小时之后,所有应用都可以正常访问。我们继续排查Power595,我们更换了 CEC DCA 内存板,CPU 都没有解决问题,最后更换了 pubook 问题解决了,花费时间3天。

问题原因:

电工改造线路,造成了机房断电,UPS 临时接管,由于电池放了太久,机器功率太大,造成低电压运行,造成设备不能正常工作,更为关键的是电工出现问题之后没有及时检查电路,根据师傅的陈述大概过了1分钟又把交流电送出去,这个电压冲击是很厉害的,经排查此电工无证施工,客户已经提起诉讼。

由社区会员“shizhe1030”分享

06

ERP 备份导致的一起宕机案例

现象回顾:

某日凌晨,其中一台 ERP 数据库主机宕机。AIX.5.3 HACMP RAC 数据库环境。

故障分析:

宕机时间点是在备份期间。通过分析数据库日志、系统日志、发现导致数据库停库的主要原因是由于 HACMP 的一个守护进程 haemd 发生自动重启,由于 oracle 数据库和 haemd 进程之间有关联,因此数据库在发现 haemd 重新启动后也自动停止。

经 IBM 工程师及实验室分析,Haemd 自动重新启动的原因是由于在一定期间内(参数为2分钟)没有给 HACMP 系统响应,其原因之一是由于系统过于繁忙,没有响应 Haemd。

随后分析结果发现在备份期间,从存储看系统不是很繁忙;但 ERP 数据库服务器主机性能异常:有时会出现阶段性的不响应现象,同时系统 I/O 高。停止备份后,这种现象消失。

经 IBM 实验室协助,初步经过分析:

1)AIX 系统内存分为计算类和非计算类内存。非计算类内存主要用于文件操作CACHE,以便提高文件再次读写的性能。目前 ERP 生产数据库占用了近20G内存作为文件系统 CACHE。

2)当文件系统 CACHE 有空间时,写文件操作将不会产生阻塞,当文件系统 CACHE 无空间时,系统将会根据内部策略,挤出部分 CACHE。当无法找到空闲的 CACHE 时,会等待系统调整出空闲的 CACHE。当出现大量等待时,系统可能出现无响应的状态。

解决方案:

考虑到将来数据量的增加,如果无法解决较大 I/O 对系统的影响过大的问题,这个隐患将一直存在。

调整该备份文件系统的属性,在该文件系统的 I/O 请求到达一定值的情况下,阻塞对该文件系统的读写 I/O,从而保证预留足够的资源给系统。具体参数为 Maxpout、Minpout。

经验分享:Maxpout、Minpout 参数的选择,是和具体环境相关的,没有一个统一的建议值。若该参数设置不合理,可能会影响到文件系统的读写操作。而合适的参数需要经过设置、观察来确定。

由社区会员孙伟光分享

07

weblogic 宕机问题排查

问题现象:

系统持续运行2-3天,中间件出现宕机

系统运行期间只要访问 weblogic 控制台,操作几次后中间件宕机

报错日志:

分析:

通过报错日志分析,为内存溢出,且为非堆内存溢出,这种情况一般需要调整:PermSize 的大小。

解决过程:

调整 weblogic 配置参数:setDomainEnv.sh 设置 setDomainEnv.sh 为512。

调整后重启系统,发现问题依旧,并没有解决宕机问题。

确认修改参数是否生效:生成 javacore 来分析(kill -3 进程ID)截图如下:

我们发现参数并没有生效。继续分析参数为什么没有生效。

Weblogic 中的 commEnv.sh ,发现 JAVA_VENDOR 为 N/A

而 setDomainEnv.sh 中 PermSize 的设置为:

此处的参数并没有 设置我们需要的 Open JDK的 JAVA_VENDOR 的 N/A 的赋值,所以非堆内存的设置并未生效。

注意:正常 open jdk 的 JAVA_VENDOR 为 Oracle 的,但是配置文件却为:N/A,可能是 weblogic 的兼容性问题,或者人为改动导致,找到原因了,这个问题就没有细究。

解决方案:

修改 commEnv.sh , JAVA_VENDOR 为 Oracle、HP、IBM、Apple 中的任何一个

在 startWeblogic 中,单独定义:MEM_ARGS="-Xms2048m -Xmx2048m -XX:PermSize=1024m"

验证方案:

采取第二种方案:

1)在原始默认环境,进行12个小时的循环操作,并持续访问 weblogic 控制台。

2)在修改后的环境,持续访问 weblogic 控制台,生成 javacore 文件看参数是否生效。并进行50人高强度的并发测试20个小时,看是否会重现宕机问题。

在方案的第一步,系统运行2小时,访问控制台,中间件宕机,系统无法访问。

在方案的第二步,系统在50人高强度的并发测试20小时的情况下,响应正常。频繁访问控制台并未发现任何异常。通过生成 javacore 发现非堆内存正常生效。

由社区会员“gu y 011”分享

08

P550/P570 宕机案例

某周末,客户致电,说核心业务无法访问。工程师到达现场,发现客户环境(P550/P570--HACMP)P550 两台小机均关机。发现客户现场有部分服务器也已处于关机掉电状态。此时客户才发现,市电周五晚上断电过,但是客户机房配备有2台 UPS,机房设备一半一半分别接到2台 UPS上。排查发现其中一台 UPS无法供电。而两台小机均有一路电源接到该 UPS,导致市电断电后,直接宕机。

后将小机通电开机,发现P550无法开机,CPU VRM 稳压模块报错,由于客户业务较为重要,将 P570 已经拉起来,准备将 HA 集群在 IBM P570 单节点运行。却发现 HA 无法将 Oracle 数据库拉起。由于时间紧迫,手动在 P570 网卡上添加 IP 别名后,手动挂载 VG,恢复业务。

后续,将 P550 稳压模块进行更换后,发现仍然无法开机,又出现新的报错:11002630,再次更换 CPU 板后,P550 小机正常开机。安排停机窗口进行排查恢复。在处理过程中,集群出现意外,在 HA 拉起来后,经业务测试,发现/orafile丢失一部分数据,此时备份数据最新的为前一天晚上23点,单天的数据未做备份,只能采取数据恢复,最后成功将数据恢复回来。重新配置 HA,模拟故障切换,测试业务,验证数据完整性,业务恢复正常!

由社区会员“ACDante”分享

09

AIX6100-06-06系统 bug 引起 down 机

某机器操作系统版本6100-06-06,系统 down 机,生成 dump 文件。

Problem:

System crash with following stack

CRASH INFORMATION:

CPU 3 CSA F00000002FF47600 at time of crash, error code

for

LEDs: 30000000

pvthread+02BD00 STACK:

[00009500].simple_lock+000000 ()

[00450E24]netinfo_unixdomnlist+000824 (??, ??, ??, ??,

??, ??)

[0451214C]netinfo+00006C (??, ??, ??, ??, ??, ??)

[004504DC]netinfo+0000FC (??, ??, ??, ??)

[00003850]ovlya_addr_sc_flih_main+000130 ()

[kdb_get_virtual_memory] no real storage @

FFFFFFFFFFFEF20

[100002640]0000000100002640 ()

[kdb_read_mem] no real storage @ FFFFFFFFFFF5E30

bug原因:

File lock is taken before checking whether the file type is socket.

该故障因 netstat -f unix 命令引起系统 crash, 是 IBM bug 引起

建议单独提升 bos.mp64包补丁包或者整体升级到6100-06-12-1339(SP12)

官网解释:

IV09793: SYSTEM CRASH IN NETINFO_UNIXDOMNLIST APPLIES TO AIX 6100-06

File lock is taken before checking whether the file type is socket.

由社区会员“qb306”分享

10

P570 宕机案例

IBM 570 意外宕机,处理过程如下:

1、首先查看 asmi 日志,电源和风扇故障,更换了2个电源和1个风扇后,可以启动到 standby 模式。但是非常多的 firmware 报错。

2、升级微码到 sf240-417后,微码报错消失。

3、激活分区失败,hmc 终端会出现几秒的”ide inited failed“提示,然后消失。接着卡死,报找不到硬盘。

4、观察外观,发现后端的光纤卡灯特别弱,有时会不亮。

5、查了下570的红皮书结构图,发现 ide controller(红线圈住部分)同时处理 pci 设备和硬盘背板设备过来的 io,根据现有故障现象,判定 ide controller 有故障。

6、通过 ibm system information center,定位到 ide controller 的 location code 为p1-15,不是一个可替换的 FRU,必须随同 IO backbone(就是主板)一起更换。

7、更换 io backbone 后,系统正常启动,进入系统微调后,一切正常。

由社区会员王巧雷分享

11

某企业 HACMP 软件,在网络交换机变更时引起 down 机

某企业 HA cluster log, IP switch down 时引起双节点 halt,系统版本7100-03-03,HA 版本6.1sp13

Error description

In HACMP 6 with rsct.core.utils 3.1.4.9 or higher, if all

IP networks are lost and at least one non-IP network is

functioning, the Group Services subsystem will core dump when

trying to send packets to be routed through Topology Services

(across the non-IP connection). This will cause a node halt.

Customers with PowerHA 7, or HACMP 6 customers with no non-IP

networks (such as rs232 or disk) are not in danger. Also this

will not happen if only one node is still running, since there

will be no other cluster members to send messages to.

日志如下:

原因是补丁 IV55293: HAGSD CORE DUMP WHEN IP NETWORKS LOST, 需要升级 rsct 文件集。

官网解释:

由社区会员“qb306”分享

12

巡检不仔细 Power595 宕机

事件起因,本来巡检已经发现其中的一个 I/O 柜电源故障,在线更换走脚步的时候,脚步执行到一半引起该 I/O 柜突然掉电,重启了该 I/O 柜。

原因:一线工程师巡检时候不够仔细,因为该同一个 I/O 其实坏了2个电源,只不过另外一个没有报出来具体的位置,但已经报出来该 I/O 的部件号,但也说明了 IBM 小机没有完全报错具体槽位,只报错了大概的位置。

解决方法:设备下电,更换两个 I/O DCA,然后设备开机,问题解决。

由社区会员“shizhe1030”分享

13

X86 史上最离谱的宕机事件

硬件: IBM的X3650 操作系统: suse 9

linux 系统无法远程登陆,用 KVM 登录上去看发现定在操作系统页面不能动。

重启操作系统后,在操作系统 message 日志里面查看到如下错误:

经过咨询 novell 和 IBM 工程师,结论是 IBM 这类服务器在装 linux 系统的时候,如果光驱有问题确实是会导致宕机。

经硬件工程师检查,是光驱坏了……坏了……

编者按:宕机原因千万种,这个宕机有点冤

由社区会员“hp_hp”分享

本文转载自公众号: talkwithtrend

更多相关文章阅读

一个运维如何从底层走上人生巅峰

运行无间:阿里巴巴运维保障体系的一种最佳实践

芳华永在!一个老运维的20年奋斗史

饿了么异地双活数据库实战

Python 编程中常用的12种基础知识总结

青铜到王者,快速提升你 MySQL 数据库的段位!

有赞数据库自动化运维实践之路

运维版《成都》,听哭了多少人...

同样会 Python,他的工资比你高一倍

阿里万亿交易量级下的秒级监控

IT 运维的救赎——顺丰运维的理想践行

学好 Python、拿高薪、竟是如此简单

快加入高维学院直通车成为认证运维开发工程师

只需要5天!

在5天内集中向你传授面向 DevOps 的运维开发工程师所需要掌握的所有精华。

更有含金量的是,学习结束你还将拥有一张【运维开发工程师认证证书】

这份含金量超高的证书:

如能被推荐进入上述大厂,您的培训费将被退回一半!!

更多企业直通车,正在路上。

也欢迎企业和我们联系:

刘琳,微信/电话:13910952502

参与认证运维开发工程师课程报名、详情请点击阅读原文链接

2017年最精彩的自动化运维、智能运维文章都在这了,2017年

2017年,我们不断的探索运维自动化,努力将运维从苦海中解救出来。

关于“运维自动化”的热门文章都在这了:

  • 有赞数据库自动化运维实践之路

  • 顺丰全栈资源下的自动化运维灵魂

  • 六个人如何运维一万台服务器?

  • 从ITIL到SRE | 唯品会运维自动化实践

  • 去哪儿网的硬件自动化运维体系建设之路

  • 不会 Python 的运维都将失业?(内含福利)

  • 8亿人晒军装:背后的运维技术大揭密!

  • 自动化运维之架构设计六要点 | 腾讯大梁专栏

  • 老司机带你飞|怎样构建基于SDN网络的自动化运维系统?

  • 魅族容器云平台基于k8s的自动化运维实践

  • 中国人寿自动化运维自主研发之路

  • 中小企业如何优雅的管理多机房服务器账号

  • 链家网的第三种运维

  • 就是干!移动的运维实践之路

  • 腾讯上万节点大规模集群的跨城自动迁移

  • 阿里大规模计算平台的自动化、精细化运维之路

  • 携程网基于应用的自动化容量管理与评估

  • 360网络运维自动化演进之路

  • 盛大游戏万台服务器自动化运维

  • 【重磅】显微镜下的运维自动化

  • 从“救火队长”到“自动运维”,值得收藏的运维知识深度普及贴!

  • 实战:基于Python构建运维自动化平台

  • 如烹小虾: 运维自动化闭环,腾讯是这样做的

  • 全自动部署KVM虚拟机的设计与实现

  • 运维自动化之殇

  • 浅谈自动化运维设计思想

  • 运维自动化与标准规范化:解析、设计及实现

  • 中小企业运维自动化部署实战

这时,AIOps的到来,让运维自动化指日可待

裴丹

清华大学副教授 ,青年千人

清华裴丹:AIOps 落地路线图

清华裴丹:我在智能运维科研领域的一些思考

赵建春

腾讯SNG 助理总经理,GOPS 金牌讲师

腾讯赵建春:AI浪潮下的高效运维思考及实践

张博

搜狗运维保障部总监

揭秘人工智能下的搜狗智能运维实践

吴树生

腾讯高级工程师,负责SNG大数据监控平台建设

如何实现多维智能监控?--AI运维的实践探索

2018年,在哪里还能 get 到关于自动化运维、智能运维

最用心、可落地的分享?

在哪里可以学习到没有套路,没有广告,只有最前沿的,深入浅出的干货?

2018年,GOPS 全球运维大会第一站:深圳站

—— AIOps 风向标

GOPS全球运维大会由高效运维社区(GreatOPS)和开放运维联盟(OOPSA)联合主办,指导单位为工信部信通院数据中心联盟(DCA)。全球运维大会是国内第一个运维行业大会,面向互联网及传统行业、广大运维技术人员,传播先进技术思想和理念,分享业内最佳实践。

2016年GOPS四次大会参会嘉宾累计突破1.2万人次,分别为:深圳站、上海站、美国站和北京站,国内三站均为本地区最大规模的高端运维盛会,满意度和推荐度高达95%以上。

2017年GOPS大会分别为北京站,深圳站,上海站,参会人数超过万人以上,涉及互联网,教育,医疗,军工,地产,金融,银行,证券,保险,物流,中小企业,电信,移动,游戏,制造业等等行业,参会人员以运维经理运维总监为主,以及系统架构师,网络工程师,CIO  CTO  CEO等。

目前已经确认参会分享的大咖们:

欢迎在运维领域颇有建树的您成为GOPS讲师

有意向的老师请联系:[email protected]

全球运维大会共设 19个专场,无论你想学习哪一个方向,都有你要的。

全球运维大会重量级议题:

推荐演讲

《衡量 – DevOps 架构下的人工智能思维》

衡量不是一种工具或是产品,而是一种工作方式。人 + AI= 正如钢铁人与他的人工智能 JARVIS 之间的运作方式,由AI来提供参考数据辅助人类进行决策,其实它就是一种衡量。虽然未来是无法预测的,但却是可以衡量的,只是我们没有去做罢了,而人工智能正可以扶助我们做到更好的衡量,但对人类而言重点还是在观念,一种对或然率的正确观念。本演讲将说明如何将衡量的观念运用在DevOps的开发框架三步工作法中。

讲师介绍:李智桦,台湾著名精益布道师、敏捷顾问。《精实开发与看板方法》、《Windows Azure云端开发》、《WF工作流程引擎程序设计》等书的作者。1981 毕业于台湾淡江大学物理系。专业的软件工程顾问、Scrum及看板课程教学的讲师。担任过四家信息公司的研发部经理。擅长新创公司的项目开发工作,拥有超过30年以上的程序撰写经验。曾任多家著名企业的敏捷顾问。爱好撰写程序,包括汇编语言、C#、VB数种语言。是 OpenSource 的拥护者,开放自己所有的程序代码。

《千亿交易背后的0故障发布》

天下武功,唯快不破,互联网产品尤其这样,迭代速度成为了产品能取胜的关键点,快速稳定的发布成为了帮助产品或者用户更快的实现业务目标的重要竞争力。随着运维工具(发布系统)的逐步完善,发布已经越来越容易、越来越高效,从传统的几个月发布一次已经能够做到一天发布多次,但单日均几万的发布量,涉及几千的产品,如何在快速迭代中保障发布不出问题,却是摆在各个研发同学面前一个头痛的事情。阿里的发布系统(诺曼底)一直致力于发布稳定性的保障,尽量减少发布过程引起故障,为此,我们引入了一套智能化的解决方案--无人值守发布,来提前发现和终止发布带来的问题。

讲师介绍:少荃,阿里巴巴运维技术专家。在阿里多年,从事过业务系统的开发,也负责过核心系统,这几年投入到运维领域的系统研发,主要负责阿里的发布系统,致力于提升发布的效率和稳定性,研发过大规模文件分发利器-蜻蜓等,近期主要在做研究智能化在发布稳定性保障这方面的实践。

《负重前行---顺丰数据库运维的求变之路》

从技术和管理2条线,历数顺丰数据库架构,从传统Oracle全面转向大型分布式Mysql集群的关键节点,一场高速运行的列车上换轮子的历程;并介绍为了适应这种变化,顺丰DBAs打造的智能运维利器:Thinkdb-运维管理平台。

讲师介绍:刘力,顺丰科技 应用数据支持部负责人。2013年加入顺丰科技,数据库团队负责人,主导了顺丰科技数据库架构从非标到标准,从传统到开源,从集中到分布式的技术演进;带领DBAs,从被动到主动,从不变到求变,从人工到智能的运维模式转变。十余年大型数据库架构设计和管理经验;曾任职平安科技,负责银行业务线数据库架构设计和管理。

更多演讲内容介绍请前往大会官网:

⬆️ GOPS 2018 深圳站

GOPS2018深圳站大会出品人:

按字母顺序排列

欢迎在运维领域颇有建树的您成为GOPS出品人

有意向的老师请联系:[email protected]

引领着中国运维行业发展的 GOPS 已经走到了第九届,在新的一年中,GOPS作为 AIOps 的风向标,继续带领广大运维朋友探索运维行业的发展方向与最佳实践。

⬇️ 都有谁参加过GOPS

⬇️ 参会者职位

⬇️ 参会者行业

⬇️ 工作年限

⬇️ 公司服务器规模

报名方法

长按二维码,进入官网报名,大会早鸟价倒计时1个月。

3人以上团购优惠请联系刘静:130 2108 2989

⬆️ 官网报名

⬆️ 限时早鸟价6折票

商务合作请联系刘欣:158 0111 5386

送礼物啦

在你的头脑中,AIOps 是什么?

分享给我们吧,24h留言Top5将获得《 DevOps 三十六计-运维珍藏版》一本哦,兑奖请联系:刘静:130 2108 2989

点击阅读原文,参与2018年运维人的开年聚会吧!

Nginx常见场景代理转发配置,nginx场景转发

注意:本文出自 “阿飞”的博客 ,如果要转载本文章,请与作者联系! 并注明来源: 

在这里分享的不是nginx的配置文件说明,而是nginx常用的转发代理配置(比如线上多域名配置,后端各种转发代理配置以及较为复杂的代理转发配置),另外还会对常用的转发代理参数配置进行说明。

nginx配置文件说明请参考:

1)

2)

一、代理转发

nginx的代理转发主要是在server部分进行配置。如果转向到制定域名或子域名,则需要在godaddy、阿里云等域名解析中预先配置(子)域名并指定IP。本文中主要描述通配符域名的配置,这样更具有通用性。

server部分配置为:

server {
        listen       80;
        server_name  *.yourdomain.com;
......

如果是https则修改listen部分即可:

listen       443 ssl;

* https配置还需要单独配置ssl部分的内容,证书不一样,配置方式也有差异,这里不做介绍。

一般情况下,我们会有如下常见的几种需求

1)指向到公司官网或其他产品网(一级域名)
每个域名单独配置一个server即可,如HTTPS的配置如下:

    server {
        listen          443 ssl;
        server_name     www.yourdomain.com; #修改为需要的一级域名即可

        access_log      logs/ssl.access.log;
        error_log       logs/ssl.error.log crit;

        include ssl_params;

        location / {
                index  index.html index.htm index.php;
                index  proxy_set_header Host $host;
                index  proxy_set_header X-Real-IP $remote_addr;
                index  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_pass http://server_cluster; #后端服务器,具体配置upstream部分即可
        }

    }

2)指向到公司内部管理系统等等(二级域名)

同1)部分的配置,只需要修改server_name部分即可:

server_name     二级域名.yourdomain.com; #修改为需要的二级域名即可

3)二级域名下多个服务转发

比如:

...

而后端服务可能会部署在不同的server容器中,比如tomcat、php-fpm/fastcgi、第三方服务...

server部分需要先配置第2)点部分内容,然后再配置该server下的location转发,常见location配置场景如下:

a)转发到后端Tomcat

      location /location名称/ {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://127.0.0.1:8080/服务名/;
      }

tomcat的转发是很简单的了,这里不需要多说。

b)转发到php-fpm

将所有php页面的请求转给php-fpm处理:

      location ~ .php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+.php)(/.+)$;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
      }

fastcgi_params配置:

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
#fastcgi_param  SERVER_SOFTWARE    nginx;
fastcgi_param  SERVER_SOFTWARE    nginx;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

注意!

配置不具备通用性,需要根据自己服务器及实际业务需要进行配置和调整。

这里的配置仅提供参考。

d)转发到第三方域名(第三方接口服务)

比如做支付时,内部系统需要通过代理转发到银联支付接口:

location /unionpay/ {
         proxy_set_header Host gateway.银联.com;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_pass https://gateway.银联.com/;
}

这里的proxy_set_header Host必须配置。

4)强制http转https访问

80端口部分server配置:

server {
        listen  80;
        server_name     api.yourdomain.com;
        location / {
                rewrite ^/(.*) https://api.yourdomain.com/$1 permanent ;
                break;
        }
        error_page 497 https://$host:$server_port$request_uri;
    }

当用户通过HTTP 80访问时,nginx将强制转换为HTTPS 443访问。

443端口部分server配置:

server {
        listen       443 ssl;
        server_name  api.yourdomain.com;

        access_log logs/ssl.api_access.log;
        error_log  logs/ssl.api_error.log crit;

        include ssl_params;

        location / {
                proxy_pass http://tomcat_servers/$2;
                proxy_set_header Host $host:443;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        location /v1.0/ {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://tomcat_servers/v1.0/;
            proxy_cookie_path /v1.0/ /;
            proxy_redirect off;
        }

}

5)后缀名定向

比如,有URL:www.abc.com/register/user.do,需要将URL定向为uuu.abc.com/register/user.do。则可以在WWW.ABC.COM节点中这样配置:

location / {
        rewrite ^(/register)/user(.*)..*$  break;

        index  index.html index.htm;
        proxy_set_header Host $host:443;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_pass ;
}

6)在location中通过if-else分支,根据请求参数使用不同的proxy_pass进行转发。如:

例如url为:

因此,Nginx中可以对location进行if判断,解决方案如下:

location /test/ {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        if ($arg_n ~* "web01") {
                  proxy_pass ;
                  break;
        }

        if ($arg_n ~* "web02") {
                  proxy_pass ;
                  break;
        }

        .......

}

其中,$arg_n表示url中的n参数,$arg_p表示url中的p参数。

最后,尤其要注意的是!proxy_pass 后的url不能有与请求的url后的路径,如proxy_pass

7)Nginx支持websocket的配置

只需要加上红色字体部分配置即可:

location /drsws/ {
    proxy_set_header Host $host;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    ........

}

二、参数说明

1)proxy_set_header    X-real-ip $remote_addr;

在web服务器端获得用户的真实ip。

但是,实际上要获得用户的真实ip,不是只有这一个方法,下面我们继续看。

 

2)proxy_set_header           X-Forwarded-For $proxy_add_x_forwarded_for;

我们先看看这里有个X-Forwarded-For变量,这是一个squid开发的,用于识别通过HTTP代理或负载平衡器原始IP一个连接到Web服务器的客户机地址的非rfc标准,如果有做X-Forwarded-For设置的话,每次经过proxy转发都会有记录,格式就是client1, proxy1, proxy2,以逗号隔开各个地址,由于他是非rfc标准,所以默认是没有的,需要强制添加,在默认情况下经过proxy转发的请求,在后端看来远程地址都是proxy端的ip 。也就是说在默认情况下我们使用request.getAttribute("X-Forwarded-For")获取不到用户的ip,如果我们想要通过这个变量获得用户的ip,我们需要自己在nginx添加如下配置:

proxy_set_header            X-Forwarded-For$proxy_add_x_forwarded_for;

意思是增加一个$proxy_add_x_forwarded_for到X-Forwarded-For里去,注意是增加,而不是覆盖,当然由于默认的X-Forwarded-For值是空的,所以我们总感觉X-Forwarded-For的值就等于$proxy_add_x_forwarded_for的值,实际上当你搭建两台nginx在不同的ip上,并且都使用了这段配置,那你会发现在web服务器端通过request.getAttribute("X-Forwarded-For")获得的将会是客户端ip和第一台nginx的ip。

那么$proxy_add_x_forwarded_for又是什么?

$proxy_add_x_forwarded_for变量包含客户端请求头中的"X-Forwarded-For",与$remote_addr两部分,他们之间用逗号分开。

举个例子,有一个web应用,在它之前通过了两个nginx转发,www.linuxidc.com 即用户访问该web通过两台nginx。

在第一台nginx中,使用

proxy_set_header            X-Forwarded-For$proxy_add_x_forwarded_for;

现在的$proxy_add_x_forwarded_for变量的"X-Forwarded-For"部分是空的,所以只有$remote_addr,而$remote_addr的值是用户的ip,于是赋值以后,X-Forwarded-For变量的值就是用户的真实的ip地址了。

到了第二台nginx,使用

proxy_set_header            X-Forwarded-For$proxy_add_x_forwarded_for;

现在的$proxy_add_x_forwarded_for变量,X-Forwarded-For部分包含的是用户的真实ip,$remote_addr部分的值是上一台nginx的ip地址,于是通过这个赋值以后现在的X-Forwarded-For的值就变成了“用户的真实ip,第一台nginx的ip”,这样就清楚了吧。

 

最后我们看到还有一个$http_x_forwarded_for变量,这个变量就是X-Forwarded-For,由于之前我们说了,默认的这个X-Forwarded-For是为空的,所以当我们直接使用proxy_set_header            X-Forwarded-For$http_x_forwarded_for时会发现,web服务器端使用request.getAttribute("X-Forwarded-For")获得的值是null。如果想要通过request.getAttribute("X-Forwarded-For")获得用户ip,就必须先使用proxy_set_header            X-Forwarded-For$proxy_add_x_forwarded_for;这样就可以获得用户真实ip。

此部分内容来自:

三、小结

1)通过本文,应该比较清楚的描述了一级、二级域名的配置;

2)通过各种场景,应该描述清楚了location各种情况的转发配置;

3)引用其他文章,讲解了部分参数的含义

4)各种复杂的情况,还需要根据具体的业务及需求进行配置,这里的例子相对都比较简单。


0


0

查看评论

注意:本文出自 “阿飞”的博客 ,如果要转载本文章,请与作者联系! 并注明来源: ...

本文由金沙澳门官网网址发布于服务器运维,转载请注明出处:十三起惨痛宕机案例,Nginx常见场景代理转发配置

关键词:

上一篇:【金沙国际登陆】Nextcloud搭建过程,Window之间文

下一篇:没有了