openresty入门12 openresty php 整合

利用 openresty 的 drizzle-nginx-module模块 读取数据 传递到 php后端

利用到 openresty 的并发,无阻塞,mysql连接池,memcache|redis连接池特性

php 原生读取mysql数据 或者 存储在memcache|redis 的数据

有建立连接开销,没有连接池,php进程也是阻塞,也无法多个数据源并发读取

激进的方案是 用 ngx_lua 替代 php

考虑到实际 php做为模板系统 数据读取 修改 由 openresty 接管 加上 通用缓存模块 memcache 模块 redis 模块

性能还是可以有很多提升

nginx.conf

server 块同级

upstream mysql

{

drizzle_server 127.0.0.1:3306 dbname=wsonline password=123456 user=root protocol=mysql;

drizzle_keepalive max=200 overflow=reject;

}

location /api

{

drizzle_query "select * from twuj_ask order by id desc limit 3";

drizzle_pass mysql;

rds_json on;

}

location ~ \.php

{

fastcgi_index index.php;

fastcgi_pass unix:/tmp/php.sock;

set $script $uri;

set $data '';

rewrite_by_lua '

local res = ngx.location.capture("/api")

if res.status == 200 then

ngx.var.data= res.body

end

';

fastcgi_param DATA $data;

include fcgi.conf;

}

php处理得到的数据

<?php

$data = json_decode(getenv('DATA'),true);

print_r($data);

ngx_lua 文档

此方案有性能问题 nginx交互时有大量数据传输