centos 7中nginx、php环境连接KingbaseES V8配置

概要:
简要介绍nginx、php环境中加载KingbaseES V8 php驱动连接金仓数据库的配置方法

测试环境:

CPU: X86_64
OS: CentOS 7
nginx: nginx/1.18.0
php-fpm : 7.2.33
db: KingbaseES V8R3
浏览器:Google Chrome 86.0.4240.111

nginx+php简介

Nginx(“engine x”)是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。在高连接并发的情况下,Nginx是Apache服务器不错的替代品。
nginx+php是常见的webserver架构模式之一。

nginx实现php动态解析原理

nginx 是一个高性能的http服务器和反向代理服务器,但nginx本身并不会对php文件进行解析。对PHP页面的请求将会被nginx交给FastCGI进程监听的IP地址及端口,由php-fpm(第三方的fastcgi进程管理器)作为动态解析服务器处理,最后将处理结果再返回给nginx。即nginx通过反向代理功能将动态请求转向后端php-fpm,从而实现对PHP的解析支持,这就是Nginx实现PHP动态解析的基本原理。

基本概念nginx + php-fpm +fastcgi:

  • Nginx: nginx的worker进程直接管理每一个请求到nginx的网络请求。
  • fastCGI :为了解决不同的语言解释器(如php、python解释器)与webserver的通信,于是出现了cgi协议。只要你按照cgi协议去编写程序,就能实现语言解释器与webwerver的通信。如php-cgi程序。但是webserver每收到一个请求,都会去fork一个cgi进程,请求结束再kill掉这个进程。这样有10000个请求,就需要fork、kill php-cgi进程10000次。 fastcgi是cgi的改良版本。fast-cgi每次处理完请求后,不会kill掉这个进程,而是保留这个进程,使这个进程可以一次处理多个请求。大大提高了效率。
  • PHP-FPM: 对于php而言,由于在整个网络请求的过程中php是一个cgi程序的角色,所以采用名为php-fpm的进程管理程序来对这些被请求的php程序进行管理。php-fpm程序也如同nginx一样,需要监听端口,并且有master和worker进程。worker进程直接管理每一个php进程。

nginx安装及配置

1、安装yum-utils

yum install yum-utils

2、设置yum源,创建文件/etc/yum.repos.d/nginx.repo,

[root@node3 yum.repos.d]# pwd
/etc/yum.repos.d
[root@node3 yum.repos.d]# cat nginx.repo 
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[root@node3 yum.repos.d]# 

3、安装nginx

yum install nginx

4、启动nginx服务: service nginx start

[root@node3 yum.repos.d]# service nginx start
Redirecting to /bin/systemctl start nginx.service
[root@node3 yum.repos.d]# service nginx status
Redirecting to /bin/systemctl status nginx.service
● nginx.service - nginx - high performance web server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2020-11-03 00:04:56 CST; 3s ago
     Docs: http://nginx.org/en/docs/
  Process: 68205 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
 Main PID: 68207 (nginx)
    Tasks: 2
   CGroup: /system.slice/nginx.service
           ├─68207 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
           └─68208 nginx: worker process

Nov 03 00:04:56 node3 systemd[1]: Starting nginx - high performance web server...
Nov 03 00:04:56 node3 systemd[1]: Can't open PID file /var/run/nginx.pid (yet?) after start: No such file or directory
Nov 03 00:04:56 node3 systemd[1]: Started nginx - high performance web server.
[root@node3 yum.repos.d]#

5、测试nginx
nginx默认访问端口:80(注意关闭防火墙,或开放nginx主机的80端口)
打开浏览器,输入nginx主机ip,出现以下Welcome to nginx界面,则nginx运行正常
centos 7中nginx、php环境连接KingbaseES V8配置_第1张图片

php安装与配置

1、下载安装包
本人测试环境CentOS 7自带yum源的php版本为5.4, 比较老;本测试采用源码方式安装较新的php 7.2.33版本, 首先下载php 7.2.33源码包(https://www.php.net/downloads.php)

[root@node3 opt]# ls -l php-7.2.33.tar.bz2 
-rw-r--r-- 1 root root 15233897 Sep 21 09:01 php-7.2.33.tar.bz2
[root@node3 opt]#

2、安装linux依赖包:
yum install gcc
yum install libxml2*
yum install libssl*
3、解压、编译、安装
tar -xvzf php-7.2.33.tar.bz2
cd php-7.2.33/
./configure –prefix=/opt/php --enable-fpm 注意:需要启用php-fpm
make & make install

配置nginx代理把php页面请求转发至php-fpm

1、nginx 1.18配置文件主要有两个:/etc/nginx/nginx.conf、/etc/nginx/conf.d/default.conf,此处需要修改default.conf
在location / {}段后新添加一个外理php页面的Location段,如下:

[root@node3 conf.d]# cat default.conf
server {
     
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
     
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
# 处理php页面请求  add by qin
    location ~ \.php$ {
           # 匹配php后缀的请求   
        root /data/www;      # php页面映射本地路径/data/www
        fastcgi_pass  localhost:9000;   # php-fpm本地端口为9000
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

2、在/data/www路径下,新建文本文件info.php,内容如下

[root@node3 conf.d]# cd /data/www
[root@node3 www]# ls
info.php  test.php
[root@node3 www]# cat info.php 
<?php
phpinfo();
?>

3、启动php-fpm服务
centos 7中nginx、php环境连接KingbaseES V8配置_第2张图片
4、重启nginx
centos 7中nginx、php环境连接KingbaseES V8配置_第3张图片
5、访问info.php页面,测试php页面转发配置,出现以下页面则正常
centos 7中nginx、php环境连接KingbaseES V8配置_第4张图片

配置php-fpm加载kingbase的php驱动

1、上Kingbase官网下载kingbase的php 7.2版本x86_64+linux环境驱动
****注意官网目前提供的大部分都是关闭php的Thread Safety选项的,如果测试环境开启了线程安全会加载不了驱动
下载地址:https://www.kingbase.com.cn/index/download/c_id/401.html
centos 7中nginx、php环境连接KingbaseES V8配置_第5张图片
选择linux-x64环境的驱动包:
pdo_kdb_for_php-7.2.22.tar.gz
解压后得到文件:pdo_kdb.so

[root@node3 kdblib]# ls -l pdo_kdb.so 
-rwxr-xr-x 1 1011 1011 189456 Apr 24  2020 pdo_kdb.so
[root@node3 kdblib]#

2、新建目录/opt/kdblib目录,并把kingbase的php驱动放在该路径

[root@node3 kdblib]# pwd
/opt/kdblib
[root@node3 kdblib]# ls -l pdo_kdb.so 
-rwxr-xr-x 1 1011 1011 189456 Apr 24  2020 pdo_kdb.so
[root@node3 kdblib]#

3、kingbase的php驱动也依赖libkci库文件(安装Kingbase数据库后,libkci库文件在安装目录Server/lib子路径下),把libkci库文件拷贝至/opt/kdblib
在这里插入图片描述
4、把/opt/kdblib加入LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/opt/kdblib:$LD_LIBRARY_PATH

5、查看php配置文件路径

[root@node3 etc]# php -i|grep php.ini
Configuration File (php.ini) Path => /opt/php/lib
Loaded Configuration File => /opt/php/lib/php.ini
[root@node3 etc]#

6、编辑/opt/php/lib/php.ini, 把pdo_kdb.so所在路径加入extension_dir

; Directory in which the loadable extensions (modules) reside.
; http://php.net/extension-dir
; extension_dir = "./"
; On windows:
extension_dir = "/opt/kdblib"
extension=/opt/kdblib/pdo_kdb.so

7、重新访问info.php页面,查看Kingbase驱动是否加载成功
页面上有以下内容则加载成功
centos 7中nginx、php环境连接KingbaseES V8配置_第6张图片
8、启动kingbase服务,新建连接kingbase数据库测试页面test.php

[root@node3 www]# cat test.php 
<?php
$dsn = 'kdb:dbname=TEST;host=192.168.184.136;port=54321';
$user = 'SYSTEM';
$password = '******';
;try {
     
     $dbh = new PDO($dsn, $user, $password);

;} catch (PDOException $e) {
     
;      echo '数据库连接失败: ' . $e->getMessage();
;}
   if(!$dbh){
     
      echo "Error : Unable to open database\n";
   } else {
     
      echo "Opened database successfully\n";
   }
?>
[root@node3 www]# 

9、浏览器访问test.php页面
出现以下内容则连接Kingbase数据库成功
在这里插入图片描述

参考文献:

1、http://nginx.org/en/linux_packages.html#RHEL-CentOS
2、https://www.kingbase.com.cn/index/download/c_id/401.html
3、https://www.php.net/downloads.php

你可能感兴趣的:(KingbaseES,人大金仓,php)