admin 发布的文章

迅雷路由挖水晶假死解决办法

出现假死,是因为迅雷路由上的系统时间和水晶服务器的时间不同步

使用putty连接迅雷路由

然后输入


ntpclient -h time.nist.gov


然后关闭挖矿服务,重新打开即可解决。

df命令查询分区剩余空间的奇怪结果

这几天手贱又去买了几个VPS,注意是几个,不是一个……

其中有个VPS,当我用


df -l

查询分区剩余空间的时候,发现 Size > Used + Avail


这怪了,按道理,总空间应该是已使用空间和可用空间之和,那么少掉的那部分去哪里了呢?

网上搜索了一下,找到了答案,

原来Linux下面有保留空间这种东西,其目的是防止分区爆满导致系统无法启动或者用户无法登陆,所以保留空间的设定还是很有用的。

如果实在不想要保留空间,可以用下面的命令关闭:

tune2fs -m 0 /dev/vda1

那个vda1是指定的分区,我的可能和大家的不一样,所以请根据自己的情况修改成你的实际分区。

将PHP从5.3.28升级到5.3.29时Nginx出现502错误

今天将PHP从5.3.28升级到5.3.29,发现网站打不开了,提示"502 bad gateway",访问静态资源可以,但访问任何PHP文件都会502。

其实之前也发现这个问题,只是一直没找到解决办法,所以我一直将PHP保持在5.3.28版本。

按照我以前的脾气,我什么软件都得要最新的稳定版,但PHP之类的软件是例外,因为版本高了,会导致很多程序不兼容,相对来说5.3兼容性算是最好的版本之一,当然5.2也可以。

强迫症实在受不了,官方说5.3.29是5.3的最后一个版本,最后一个版本出现这种问题又一直没解决让我很难受。

网上搜索了一下,没人出现我这种问题,所有的编译过程,配置过程,都是照旧,之前从5.3.25一直到5.3.28都是用的我写的同一个升级脚本,按道理同一个子版本系列,一样的编译和配置过程,不应该出现问题的。

为何5.3.25一直到5.3.28都没问题,到了5.3.29就没问题了呢?

今天终于把问题的根源找到了,我也是醉了……

由于我不想占用额外的端口,所以Nginx和PHP-FPM之间一直使用的Unix socket,而且据说这种方式效率也高一些。

PHP升级到5.3.29以后,出现502错误,而且是一打开网页就报错了,不像是由于PHP执行超时导致的Nginx提示502,更像是PHP-FPM异常终止了,或者是Ngxin根本没有连接上fastcgi。

使用PHP-FPM的日志也是郁闷,我明明开启了日志,还设置了日志路径,但还是没有生成日志。

好吧,根据前面的思路推测出来的原因找问题:

1.PHP-FPM一开始工作就异常终止了;

2.Ngxin根本没有连接上fastcgi。

第一种可能直接就排除了,因为出现502错误的时候,后台的PHP-FPM进程并没有退出,还存活得好好的。

那么很可能是第二种可能了,我把Nginx和PHP-FPM的配置文件修改了一下,改成了传统的“地址:端口”的形式

PHP-FPM配置文件中:

listen = 127.0.0.1:1234

Nginx配置文件中:

fastcgi_pass 127.0.0.1:1234


重启服务,网站竟然顺利打开了。

看来就是Nginx没有连接上PHP-FPM了,那么问题出在哪里呢?难道5.3.29去掉了Unix socket的连接方式?我觉得不大可能,查阅更新日志,也没有看到有关的项目啊。

我将Nginx和PHP-FPM的配置文件改回去。


PHP-FPM配置文件


listen = /tmp/php-cgi.sock

Nginx配置文件中:

fastcgi_pass unix:/tmp/php-cgi.sock;

重启服务,立马又502了。

首先想到了检查权限,反正是测试,所以我二话不说直接把那个PHP-FPM的sock文件权限改为777。


chmod 777 /tmp/php-cgi.sock

直接打开网页,能打开!

好吧,就是权限问题了,重启服务,查看php-cgi.sock 的权限


-rwx------. 1 root  root   663 9月  18 00:16 php-cgi.sock

这。。。原因已经很明了了,怪不得Nginx连不上PHP-FPM,php-cgi.sock的权限竟然是700,


但问题来了,为什么同样的编译和配置过程,5.3.28之前的版本就没问题呢?我查看另一台没有升级5.3.29的服务器:


srw-rw-rw- 1 root  root     0  9月 16 21:11 php-cgi.sock


发现其权限是666,这……无法理解了……为什么5.3.28的默认权限配置是666,到了5.3.29就变成700了呢?

查阅PHP文档,找到解决办法

将PHP-FPM里的配置文件加入,前两项是指定php-cgi.sock的拥有者和用户组,后一项是指定文件权限。


listen.owner = www
listen.group = www
listen.mode = 0666

重启服务,问题解决。



被移动奇葩的网络坑后的小记

我在学校用的校园网,出口是教育网/移动切换。
访问电信、联通、教育网走的是教育网出口
访问移动、小运营商、国外是走的移动出口


大家可能知道libiconv-1.14的一个BUG,就是那个'gets' undeclared here,编译PHP之前必须先编译libiconv
于是我把源码fix以后重新打包了一个libiconv-1.14.tar.gz放在我的国外网站上。

我在宿舍给一台以前的电脑安装CentOS 7,安装CentOS 7以后我开始安装AMH(这个AMH安装脚本是我自己DIY过的,能支持CentOS 7)
结果竟然出现了那个'gets' undeclared here错误,我查看下载下来的源码,发现竟然没有fix?然后我重新检查了服务器上的压缩包,里面确确实实修复了BUG的啊,为什么下载下来的文件和服务器上的文件不一样?

然后我重新从我的服务器上wget了一下我那个修改过的libiconv-1.14.tar.gz

发现问题了:


20140918015041


怎么突然来了个302跳转?我服务器上没设置这个跳转规则啊!


开始我没留意这串地址的问题,我使用站长之家的HTTP状态查询工具查询我那个URL地址,返回的是正常的200状态码,于是我开始怀疑是wget自带的校验,因为这个libiconv-1.14.tar.gz是被我修改过的,所以可能wget发现有问题就自动跳转到ftp.qnu.org上去下载官方版本了,但不管我URL地址的后半部分怎么填,即便是一个不存在的URL地址,只要最后的文件名是libiconv-1.14.tar.gz ,他都会302跳转到下面那一串地址。

折腾了十多分钟,才想起仔细观察这个302后的地址,查了一下那个211.136.8.30的IP地址,卧槽,北京移动!!!!!!我瞬间知道原因了——移动大缓存服务器!!

关于“移动大缓存服务器”我不想多讲,简单来说就是,移动的网络就是很多NAT+很多缓存服务器构成的,使用移动宽带(包括我们学校的移动出口)的时候,我们发出去的HTTP请求很多都被移动重定向到了它的缓存服务器上了,这样移动公司就可以节省很多网间结算的费用,因为如果直接访问国外服务器或者国内的电信、联通服务器,移动公司是要给国外的网络运营商或者电信公司、联通公司付钱的,所以它用了一大堆缓存服务器来缓存其它运营商的内容,这样就能省下很多钱!!!

移动这个大奇葩网络,处处都是访问缓存,它重定向之前检查一下文件内容或者对比一下文件的修改时间也好啊,只要文件名一致就直接匹配到他的缓存上面去了!我在自己的网站上放了一个空白记事本,改名为libiconv-1.14.tar.gz,然后访问这个空白文件,它照样302跳转!!这尼玛。。。

U盘安装Centos 7要注意的问题

今天,我把同学的笔记本拿过来安装CentosOS ,想到最近CentosOS 7出来了,想看看CentosOS 7是什么样子,于是从网上下载镜像准备用U盘装。

按照平常的方法,使用UltralISO来制作CentOS7的安装盘,然后U盘引导启动。

U盘启动一切顺利,然后看到了以下的界面

QQ截图20140918012544

这个时候不能直接选择那个Install CentOS 7

而是按Tab键

vmlinuz initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rd.live.check quiet

改为

vmlinuz initrd=initrd.img inst.stage2=hd:/dev/sdb4 quiet

然后回车,才能顺利安装。
原因是:
这个菜单默认是以卷标为 Centos x86_64 的驱动器启动,而U盘不属于驱动器,所以就会启动安装失败,这个时候就应该把那个卷标匹配改为U盘的绝对路径。