发现使用curl访问此https的连接有问题,
网站支付需要和财付通进行一个对接,财付通给了一个https的接口连接
将此连接放入到PHP的页面中调用curl获取此链接的返回信息,
然后随便找了一个http的连接试了试是正常的
看来是curl访问https类型的连接有问题
应该是openssl有猫腻,
然后重新编译安装了一下openssl
下载地址:http://www.openssl.org/source/
openssl 编译 ./config --prefix=/usr/local/openssl
然后把PHP重新编译一下,加入参数:--with-openssl=/usr/local/openssl
编译安装之后发现问题解决了
如果问题没有解决,建议再看看libmcrypt、mhash、mcrypt有没有问题
值得注意的是https走的端口是443端口,所以也有必要看看防火墙的规则!
nrpe出现获取状态未知(UNKNOWN)
监控报警有两个服务监控状态是UNKNOWN
提示无法获取/var/tmp/下的数据文件,
到监控服务器的/var/tmp下查看一下发现
文件的权限和所属都被改动,估计是因为手动执行脚本造成的
把此文件删除掉,等待nagios自动生成,恢复正常状态!
nginx中打开php是空白页
公司内网的GM系统php网站打开显示空白页。
查看日志,正常返回200,应该不是nginx的问题,可能php有问题,
打开同台机器的其他php网站都显示正常,看来应该是server里面location的配置有误;
对比了一下正常的server配置,发现有一条语句不对
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
修改完发现nginx中打开原来的php页面显示正常,问题解决。
查了网上资料,发现nginx配置fastcgi模式时,至少需要两个参数,一个是fastcgi_pass,另一个是fastcgi_param SCRIPT_FILENAME。第一个负责将php脚本传递给php-
fpm,而第二个是帮助php-fpm找出具体的脚本路径。如果第二个错了,那么可能会出现nginx中打开php是空白页的情况。
Nginx访问css和js的时候返回403错误或者返回
看到403应该是权限的问题,将目录权限修改最大照样不行
试着随便创建一个文件,在里面随便写了一串代码,访问还是403
检查Nginx主机的配置,也没问你
重新将配置文件写了一边,重启Nginx,发现问题解决了,奇怪的是对比之前的代码,内容完全一样啊
估计属于Nginx的小Bug吧
XenServer里的虚拟机挂起状态,无法关闭、重启
一个虚拟机为挂起状态,无法连接
使用xe vm-shutdown uuid=xxxx无法关闭
使用xe vm-reboot uuid=xxxx也无法重启
一直卡在那里没有反映
最后使用 list_domains 找出该uuid对应的域ID
然后 /opt/xensource/debug/destroy_domain -domid XX 来断开外联设备
xe vm-reboot uuid=XXXX --force 终于关闭
然后启动一切正常
Nginx支持PHP的patn_info配置,加载css和js模块失败(返回403)
cp线上支持path_info的配置,做测试环境,
结果发现测试页面http://www.xxx.com/index.php/Admin/Public/login里面加载css和js的模块失败,返回403错误
检查配置文件发现 location ~ .*\.(php|php5)?$
修改成 location ~ .*\.(php|php5)
问题解决!
PHP的$_SERVER['PATH_INFO']返回空值,cgi.fix_pathinfo的设置
之前站点没有使用pathinfo,为了环境安全,将cgi.fix_pathinfo的值改为0进行关闭(默认是1,开启的)
nginx默认是不会设置PATH_INFO环境变量的的值,需要php使用cgi.fix_pathinfo=1来完成路径信息的获取,但同时会带来安全隐患,需要把cgi.fix_pathinfo=0设置为0,这样php就获取不到PATH_INFO信息,那些依赖PATH_INFO进行URL美化的程序就失效了。
现在需要path_info的支持,将cgi.fix_pathinfo修改为1,$_SERVER['PATH_INFO']的赋值才正常
不过cgi.fix_pathinfo=1有一定危险
比如访问下面这个 URL:
http://php.com/a.jpg/b.php
那么根据上面给出的配置,nginx 传递给 FastCGI 的 SCRIPT_FILENAME 的值为:
/home/verdana/public_html/unsafe/a.jpg/b.php
也就是 $_SERVER['ORIG_SCRIPT_FILENAME']。
当 php.ini 中 cgi.fix_pathinfo = 1 时,PHP CGI 以 / 为分隔符号从后向前依次检查如下路径:
/home/verdana/public_html/unsafe/a.jpg/b.php
/home/verdana/public_html/unsafe/a.jpg
直到找个某个存在的文件,如果a.jpg里面是一些危险的PHP代码,那么就杯具了
修改php-fpm的配置,启动错误:
pm.min_spare_servers(50) and pm.max_spare_servers(3000) cannot be greater than pm.max_children(1500)
由于压力测试,将PHP调整为动态进行测试,开启dynamic直接重启就报错了
查看了dynamic生效的配置,发现问题
错误原因,按照这个原则去配置
min_spare_servers ≤ start_servers ≤ max_spare_servers ≤ max_children
Nginx部分页面显示502错误
测试GM系统时,点击“游戏”就会返回502错误,其他页面都正常显示!
测试系统无压力,谈不上进程不够和超时时间的问题,查看了一下Nginx错误日志发现
2014/04/21 16:35:41 [error] 10355#0: *1005 upstream sent too big header while reading response header from upstream, client: 10.150.1.106, server: jlgm......
意思是:nginx缓冲区有一个bug造成的,我们网站的页面消耗占用缓冲区可能过大
那是试着调整fastcgi的缓存区
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
重新加载后问题解决!
Nginx连接无反映,日志返回499错误
所有配置和前端都没做修改,就突然连接就没了反映,看日志多是499的返回
引起499错误的有一下原因,客户端主动断开,缓存区不够用,php进程不够用,php执行时间太长
客户端断开可以排除,缓存区前天才调大的,那有可能是PHP的问题了
默认PHP的进程是5个,肯定是不够用了
调整PHP的进程数和超时时间,问题解决!
启动Mysql报错Another MySQL daemon already running with the same unix socket.
一台测试服务器长时间没用,后在虚拟机上进行迁移
启动mysql时候报错:Another MySQL daemon already running with the same unix socket.原因是多个mysql进程使用一个socket,可能是迁移的时候造成的
解决办法:重启服务器或者将socket改名即可(mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock.bak)
cacti登陆没反映的问题
今天登陆cacti发现登陆没反映,一直停留在登陆页面
刷新cacti查看日志没报错,
apache的日志发现报错:
PHP Warning: session_start(): open(/var/lib/php/session/sess_trt4pen2apj1sab2k7290ri161, O_RDWR) failed: Permission denied (13) in /var/www/html/include/global.php on line 154
看到Permission denied就想到权限,二话不说先修改session目录权限试试
加权之后问题解决!
cacti登陆没反映的问题2
时隔一个月登陆cacti发现登陆又没反映,一直停留在登陆页面
查看日志发现日志不动,最后一条记录是前一个小时的错误记录,关于sql的1017错误
由于日志文件已经超过2G,排查打开比较慢,所以就打包生成新的日志文件
奇迹出现了,打包完产生新文件,问题就解决了
登录正常了
mysql初始化之后创建表报错!
把以前的数据库初始化,删除数据来使用,删除datadir下的所有文件,然后初始化数据库
启动之后在数据库里创建表报错,
原因是数据库引擎是innodb的,初始化删除datadir下的文件还不够,需要把innodbdata目录下的ibdata1文件一并删除,或者干脆把上级目录删除重新创建授权
问题解决!
PHP获取时间差8小时问题
游戏官网(PHP)获取用户角色信息时间有问题,新服刚开服用户激活发现数据库里面记录的激活时间为凌晨,但是当时游戏还没开服,而且正好差8小时,应该是时区问题
服务器date查看时间是正确的,时区也没问题,拿应该是PHP的问题
php.ini配置文件里面date.timezone 字段是注释的,所以默认获取的是格林威治时间
只需要date.timezone = Asia/Shanghai 问题解决!
mysqld_safe启动mysql多实例指定配置文件报错
/home/mysql/bin/mysqld_safe --user=mysql --defaults-file=/home/cactimysql/my.cnf &
使用上面命令启动mysql,结果报错:unknown variable 'defaults-file=/home/cactimysql/my.cnf'
查了一下mysql的手册,原来指定配置文件启动需要把--defaults-file参数放在第一位,命令如下
/home/mysql/bin/mysqld_safe --defaults-file=/home/cactimysql/my.cnf --user=mysql &
问题解决
mysql启动报警warning: World-writable config file /home/mysql/my.cnf is ignored
原因:my.cnf的读取权限进行了设置,不允许World-writable(字面意思是全世界都可读写)
解决方法:
sudo chmod 644 /home/mysql/my.cnf
rsync ERROR: setgroups failed 错误
这个问题通过谷歌得知是由于版本问题,具体详细没时间了解
更换到3.1.0一下版本解决(测试3.0.8和3.0.6没有问题)
aapt: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
aapt: error while loading shared libraries: libz.so.1: wrong ELF class: ELFCLASS64
上面是两个报错,刚开始执行python的一个程序是报找不到库文件,find一下然后软连过去,就报下面的错,是32位系统和64为系统库文件不兼容导致的,python程序使用的是32为环境编写的,而运行在64为的linux系统下所以报错
解决办法:
安装libstdc++和libstdc++.i686
/lib/libz.so.1: no version information available
在使用aapt时,出现了/lib/libz.so.1: no version information available 警告信息,但命令还是可以执行的
之前zlib是用yum安装的,版本为1.2.3,网上查了一下,是版本的原因,安装新的版本就好了
从http://zlib.net/下载最新版本wget http://zlib.net/zlib-1.2.7.tar.gz
tar zxvf zlib-1.2.7.tar.gz
cd zlib-1.2.7.tar.gz
./configure
make
make install
#覆盖原版本,可以先备份一下原版本
cp /usr/local/lib/libz.so.1 /lib/