概要:
簡要介紹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運行正常

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服務

4、重啟nginx

5、訪問info.php頁面,測驗php頁面轉發配置,出現以下頁面則正常

配置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

選擇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驅動是否加載成功
頁面上有以下內容則加載成功

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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/202903.html
標籤:其他
上一篇:NVIDIA Jetson Xavier NX從板磚到邊緣計算機——Jetpack4.4適配大疆OSDK4.0.1
下一篇:Linux 網路設定(ifconfig、route、traceroute、netstat、ss、nslookup、dig)
