统信UOS服务安装PHP环境读取瀚高数据库后报502错误

统信UOS服务器+Nginx+PHP7+瀚高数据
已经安装pdo_pgsql 和 pgsql拓展
只要数据库的ip和端口填写正确就报502错误,看起来像是Nginx无法处理php链接数据库后返回的结果,个人感觉是php的拓展问题,也可能是不兼容统信服务器。
数据库没有问题,用工具和命令都可以正常链接
有没有人遇到过类似问题,可以告诉我解决思路或者方法,如果能远程操作更好

img

img

img

你把这个去掉再试一下

img

或者又可能是 php-fpm的问题,需要从配置文件下手看看

[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
log_level = notice
[www]
listen = /tmp/php-cgi.sock
user = www
group = www
pm = dynamic
pm.max_children = 20
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 6
request_terminate_timeout = 100
看一下listen这个配置 /tmp/php-cgi.sock 文件,看一下文件权限,另外你的nginx和php-fpm进程是以什么用户权限运行的?

需要通过 ps -aux|grep php 看下 php-fpm进程的属主。

如果是这个问题就需要查php-fpm的配置,需要看下 listen.ower listen.group 设置。
看是否有必要加下这两个配置:
listen.owner = “和你的user一样”
listen.group = “和你的user一样”

先抓取一下报错信息看看

try{

  $db = new PDO('mysql:host=localhost;dbname=test', $user, $pass);

  echo 'Connected';

}catch(PDOException $e){

  print $e->getMessage();

  echo "No Connection";

}

有个重要的细节,你要访问的数据的数据量多大,我看你的代码是想一下把数据全部读取出来。

有以下几个你特别需要关注一下,因为不知道你访问的数据量有多大
1、调高进程数

使用 netstat -napo |grep "php-fpm" | wc -l 查看一下当前 fastcgi 进程个数,如果个数接近 conf 里配置的上限,就需要调高进程数。

但也不能无休止调高,可以根据服务器内存情况,可以把 php-fpm 子进程数调到 100 或以上,在 4G 内存的服务器上 200 就可以。

2、调高 linux 内核打开文件数量

可以使用这些命令 ( 必须是 root 帐号 )echo 'ulimit -HSn 65536'>> /etc/profile

echo 'ulimit -HSn 65536'>> /etc/rc.local

source /etc/profile

3、调整脚本执行时间

如果脚本因为某种原因长时间等待不返回 ,导致新来的请求不能得到处理,可以适当调小如下配置。

nginx.conf 里面主要是如下:fastcgi_connect_timeout 300;

fastcgi_send_timeout 300;

fastcgi_read_timeout 300;

php-fpm.conf 里如要是如下request_terminate_timeout =10s

4、增加缓存

修改或增加配置到 nginx.confproxy_buffer_size 64k;

proxy_buffers 512k;

proxy_busy_buffers_size 128k;

  1. php.ini 的memory_limit 过小(如果有个别php程序进程需要占用极大内存时这个必须注意)

  2. php-fpm.conf 中max_children或者max_requests 设置不合理(设置过小会因为没有足够的cgi进程处理请求,设置过大会出现一会儿有响应正常,一会儿等很久才有响应的情况,一般情况下children 按 照内存计算,比如说1G设置64,2G128。这个根据实际情况自行调整。

另外查看当前的PHP FastCGI进程数是否够用的命令为:netstat -anpo |grep “php-cgi” | wc -l 如果实际使用的“FastCGI进程数”接近预设的“FastCGI进程 数”,那么,说明“FastCGI进程数”不够用,需要增大。)

  1. 查看nginx错误日志,发现 pstream sent too big header while reading response headerfrom upstream ,则检查client head buffer,fastcgi buffer size是否过小,可设置为32K。

  2. php 程序执行时间过长而超时,检查nginx和fastcgi中各种timeout设置。

(nginx 中的 fastcgi_connect_timeout 300;fastcgi_send_timeout 300 :fastcgi_read_timeout300; keepalive_timeout ; php-fpm中的request_terminate_timeout,php.ini中的max_execution_time)

  1. php-fpm 有一个参数 max_requests ,该参数指明了每个children最多处理多少个请求后便会被关闭。在大量处理请求下,如果该值设置过小会导致 children频繁的自杀和建立而浪费 大量时间,若所有的children差不多都在这个时候自杀,则重建前将没有children响应请求,于是出现502 。可以将该值设置大一些或者是0[无限]。

看一下是不是配置的问题
https://blog.csdn.net/ucmir183/article/details/80240112

配置的问题,之前遇到过类似问题