WEB应用

解决Nginx配置http2不生效,谷歌浏览器仍然采用http1.1协议问题

昨天一个网友通过QQ联系我,说按照我博客之前分享的http2配置教程不能生效,想请我帮忙看看。 经过测试,使用谷歌浏览器访问他的测试站点,确实没有开启http2,但他的配置和编译参数都正确的,这有点奇怪了。 不过昨天太忙就没有继续帮他分析,他只好将服务器账号和密码都留言给了我。今天中午我抽空在他服务器重新编译测试了一把,才发现原来是这么一个梗! 他在编译Nginx之前,使用的是yum安装的openssl,可能是他的yum源太陈旧,或者没配置EPEL导致yum安装的openssl版本过低!而他在编译Nginx的时候并没有使用--with-openssl=DIR的选项来静态编译,所以他编出来的Nginx用的系统低版本的openssl,导致谷歌访问时并不会开启http2! 找了段专业解释如下: Chrome 在最近的更新中放弃了对 NPN 的支持,如果想要继续在 Chrome 上支持 HTTP/2 ,则需要安装最新 1.0.2 版的 OpenSSL,并且用 1.0.2 的 OpenSSL 重新编译 Nginx。 参考资料: 新版Chrome下滚回HTTP/1.1 Supporting HTTP/2 for Google Chrome Users 所以,解决方法就非常简单了,从openssl官网下载最新源码包,然后新增如下参数重新编译即可: --with-openssl=源码包解压目录 比如: 当然,我们也可以先更新yum源,比如改用EPEL源,使用 yum update openssl 升级后重新编译。这里我个人建议使用源码静态编译。 重新编译安装后,再利用谷歌浏览器访问如下网址: 测试他的网站已经成功开启http2了: 事后突然想起,其实自己之前折腾网站的时候其实遇到过同样的问题,就因为没有记录导致重复造轮子。所以这次记录分享一下,权当是备忘吧!
阅读全文
操作系统

Linux系统LVM逻辑卷创建过程以及自动化脚本

最近在上海新建机房的时候,给了我2台M2机型服务器,在做初始化的时候发现有一堆磁盘: 其中挂载的只有 /dev/sda,其他都在那闲着。运管那边告诉我这个机型不能做raid。而根据我这边的业务需求,我并不能一次用到这么多分区,所以必须使用LVM合并使用。 关于LVM的创建,目前网络上一堆详细教程,用起来也非常简单,这里就只贴一下我的过程。 ①、用fdisk给每一个磁盘创建一个8e分区: 这样就完成了一块磁盘,接着我们依次将其他 sdc到sdl的磁盘也操作一把。 ②、全部完成后,使用 pvcreate 将所有分区转化成物理卷,即添加LVM属性信息并划分PE存储单元: 创建完PV之后,就可以使用 pvdisplay 或 pvs 查看详细信息了,篇幅有限,这里我就不贴了。 ③、下面我们需要创建一个VG,然后PV都加入到这个卷组当中,卷名可自定义,比如 vg: 同样,在创建好VG以后,我们也可以使用 vgdisplay 或者 vgs 命来来查看VG的信息(略) ④、接着,使用 lvcreate 命令基于VG创建逻辑卷,vg 和 lvm 我们自定义的名称: 同样我们可以使用 lvdisplay 或者 lvs 命令来查看创建好的逻辑卷的信息(略) ⑤、格式化创建的逻辑卷: ⑥、挂载分区: 这样,我们就完成了LVM的手工创建过程了,我还有一台M2要弄,而且听运管说以后会继续交付这类机型,我可不想这么苦逼的操作了,光那个创建8e格式分区就已经很坑了。 所以,就将上面的操作串成脚本,一键完成: 哦了,就写这么多,以备后用。
阅读全文
WEB应用

修改Apache的超时设置,解决长连接请求超时问题

某日,组内后台开发找到我,问我们的WEB服务器超时设置是多少。他反馈的问题是,有一个VLAN切换任务cgi接口经常返回504网关超时错误,要我分析解决下。 我问了一下,得知这个请求遇到网络设备对象较多的时候,需要小半个小时才能完成,也就是要用到长连接才行。 老规矩,从开发那拿到接口地址,得到接入层服务器IP,是一台Haproxy代理,看了一下Haproxy的超时设置: 各种1小时超时,所以排除Haproxy的影响,继续往下看。 Haproxy 代理的是2台Apache,也就是部署了cgi接口的服务器。第一时间查看了 httpd.conf 和 httpd-vhost.conf 中的配置,居然没找到超时设置。 于是,搜索了下相关教程,发现原来藏在了 httpd-default.conf 当中: 看了下,这些是Apache的默认配置,Apache也没有include到httpd.conf当中。因此,编辑 httpd.conf,找到如下参数: 去掉注释,保存文件。然后再编辑 /usr/local/apache2/conf/extra/httpd-default.conf 文件,将Timeout的值修改为符合生产环境要求的1800秒,最后执行Apache平滑重启命令即可: Ps:我之前一直以为只有Nginx有一个平滑reload命令,后面才知道Apache、Haproxy都支持平滑重启名称,这个非常棒! 重载之后,就不会出现504网关超时设置了。
阅读全文
操作系统

Linux系统 df 命令显示异常、分区丢失问题解决

本文记录2种因 /etc/mtab 文件异常导致 df 命令显示异常、分区丢失问题的解决过程,以备后用。 一、根目录丢失 前些日子,同事在RTX群里问大家,有台服务器执行 df -h 看不到根目录,该如何解决? 于是我帮忙解决了一把,看了下 /etc/fstab 内容,根目录挂载信息是正常的: 接着,看了下 /etc/mtab 文件内容,发现根目录缺失: 执行 grep -v rootfs /proc/mounts 命令进行修复: 可以看到,根目录已经出现了,再执行 df -h 就正常了: 二、df命令报错 帮同事解决问题后,不巧自己负责的服务器也出现类似问题,执行 df 命令报如下错误: df: cannot read table of mounted file systems: No such file or directory 想着应该可以上述问题原因一样,所以直接执行修复命令,发现报错: 看来是空间不足,找了下发现是 maildrop 目录把根目录撑爆了: 直接清空,在执行 grep -v rootfs /proc/mounts >/etc/mtab 命令进行修复: 已经正常了,maildrop 爆满的问题一般是 crontab 未屏蔽错误造成的,于是顺手将crontab 里面的条目都带上了 2>&1 屏蔽了,下次应该不会出现因为目录爆满导致 mtab 异常的情况了。 三、区别与联系 继续记录一下/etc/fstab和/etc/mtab的区别和联系。 /etc/fstab 文件记录了服务器上硬盘分区信息,启动 Linux 的时候,检查分区的 fsck 命令和挂载分区的 mount 命令都需要 fstab 中的信息,来检查和挂载分区。 /etc/mtab 文件记载的是现在系统已经装载的文件系统,包括操作系统建立的虚拟文件等,每当 mount 挂载分区、umount 卸载分区,都会动态更新 mtab,mtab总是保持着当前系统中已挂载的分区信息,fdisk、df 这类程序,必须要读取 mtab 文件,才能获得当前系统中的分区挂载情况。 当然我们自己还可以通过读取/proc/mount也可以来获取当前挂载信息(即使用文章中用到的修复命令 grep -v rootfs /proc/mounts)。 当 /etc/mtab 因为磁盘满或文件系统异常,导致该文件内缺失常或直接为空,就会出现上文记录的问题了。
阅读全文
数据库

MySQL主从、字典死锁、连接数的Python监控脚本

最近,公司的系统在天津增加了不少异地容灾,其中就有异地双主MySQL。由于容灾环境一般只会在出现较大的网络故障或故障演习的时候用到,所以,容灾系统的可用性就只能靠监控了。 对于互联网这种赶鸭式的发展模式,很多公司都没有完善的自动化运维系统。所以,很多时候还得靠自己写脚本。 脚本越写越多,就容易出现混乱、分散难管理的窘状。所以,这次就写了一个MySQL的集中监控脚本,后续有新的监控加入也可以非常方便的拓展。 Python 脚本: 用法很简单,只要在脚本同目录新增一个文本文件hosts.list,一行一个IP,然后需要在IP对应的MySQL身上新增一个 db_monitor账号,用于监控机远程登录MySQL(见脚本注释部分语句): 其他特性: ①、脚本支持 5.0 和 5.5+ MySQL版本的 Second behid master 监控,因为新老版本这个参数的位置不一样(鹅厂很多开源软件是非常陈旧的。。。); ②、支持MySQL连接失败的监控; ③、支持MySQL主从复制的延迟和错误监控 ④、支持MySQL的连接数和字典锁数监控 ⑤、更多监控可以参考继续添加..... 好了,就这么多了,算是给自己一个备忘。
阅读全文
数据库

MySQL错误修复记录:Table xx is marked as crashed and should be repaired

昨晚入睡后,收到松哥的QQ消息,说松松商城打开报错,于是手机QQ上打开了首页地址,发现有如下报错: 关键报错信息: Table 'ecs_users' is marked as crashed and should be repaired 提示这张表损坏了,必须修复,登陆服务器之后,开始修复,以下记录备忘。 1、尝试使用myisamchk命令对所有表索引文件进行修复: myisamchk --safe-recover /path/to/*.MYI 2、刷新首页依然报错,于是登陆MySQL,执行 REPAIR TABLE ecs_users; 3、提示无法修改拥有着属性,应该是上一步使用myisamchk命令时文件所属变成了root了,于是用chown更该拥有者: 4、然后继续登陆MySQL执行 REPAIR TABLE ecs_users;  成功: 在刷新网站,已经正常:   事后总结:一般这个报错都是因为数据库表索引文件损坏导致的,发现这类错误可以尝试使用phpMyAdmin的Repair自动修复功能。如果不行,先将数据库文件做好备份,然后按照本文的步骤尝试修复吧。
阅读全文