nginx--FastCGI

CGI

概念

nginx通过与第三方基于协议实现,即通过某种特定协议将客户端请求转发给第三方服务处理,第三方服务器会新建新的进程处理用户的请求,处理完成后返回数据给Nginx并回收进程(下次处理有需要新建),最后nginx在返回给客户端,那这个约定就是通用网关口(common gateway interface,简称CGI),CGI(协议) 是web服务器和外部应用程序之间的接口标准,是cgi程序和web服务器之间传递信息的标准化接⼝口。

通信方式

FastCGI

概念

CGI每收到一个请求都会创建一个CGI进程,初始化环境,请求结束的时候再关闭进程,效率非常的低,FastCGI每次处理完请求之后不会关闭掉进程,而是保留这个进程,使这个进程可以处理多个请求。大大提升了处理效率。

通信方式

PHP-FPM

PHP-FPM(FastCGI Process Manager:FastCGI进程管理器)是一个实现了Fastcgi的管理程序,并且提供进程管理的功能,进程包括master进程和worker进程,master进程只有一个,负责监听端⼝口,接受来自web server的请求。worker进程一般会有多个,每个进程中会嵌⼊入一个PHP解析器器,进行PHP代码的处理。

基本参数配置

Module ngx_http_fastcgi_module

proxy_pass http://

fastcgi_pass 192.168.33.180:9000;转发请求到后端服务器,address为后端的fastcgi server的地址,可用位置:location

fastcgi_index name; fastcgi默认的主⻚页资源,示例:fastcgi_index index.php;

fastcgi_param parameter value [if_not_empty];

设置传递给FastCGI服务器的参数值,可以是文本,变量或组合,可用于将Nginx的内置变量量赋值给自定义key

fastcgi_param REMOTE_ADDR $remote_addr; 客户端源IP

fastcgi_param REMOTE_PORT $remote_port; 客户端源端口

fastcgi_param SERVER_ADDR $server_addr; 请求的服务器IP地址

fastcgi_param SERVER_PORT $server_port; 请求的服务器端⼝口

fastcgi_param SERVER_NAME $server_name; 请求的server name
Nginx默认配置示例:

location ~ \.php$ {

root html;

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; 默认脚本路径

include fastcgi_params;

}

缓存参数配置

定义

fastcgi_cache_path path [levels=levels] [use_temp_path=on|off]

keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number]

[manager_sleep=time] [manager_threshold=time] [loader_files=number]

[loader_sleep=time] [loader_threshold=time] [purger=on|off]

[purger_files=number] [purger_sleep=time] [purger_threshold=time];

定义fastcgi的缓存;

path 缓存位置为磁盘上的文件系统路径

max_size=size 磁盘path路中用于缓存数据的缓存空间上限

levels=levels:十六进制的缓存目录的层级数量,以及每一级的目录数量,

levels=ONE:TWO:THREE,示例:leves=1:2:2

keys_zone=name:size 设置缓存名称及k/v映射的内存空间的名称及大小

inactive=time 缓存有效时间,默认10分钟,需要在指定时间满足fastcgi_cache_min_uses 次

数被视为活动缓存。

调用

fastcgi_cache zone | off; 调用指定的缓存空间来缓存数据,可用位置:http, server, location

fastcgi_cache_key string;定义用作缓存项的key的字符串,

示例:fastcgi_cache_key $request_uri;

fastcgi_cache_methods GET | HEAD | POST ...;为哪些请求方法使用缓存

fastcgi_cache_min_uses number;缓存空间中的缓存项在inactive定义的非活动时间内至少要被访问到此处所指定的次数方可被认作活动项

fastcgi_keep_conn on | off;收到后端服务器响应后,fastcgi服务器是否关闭连接,建议启⽤用长连接

fastcgi_cache_valid [code ...] time;不同的响应码各自的缓存时长

fastcgi_hide_header field; 隐藏响应头指定信息

fastcgi_pass_header field; 返回响应头指定信息,默认不会将Status、X-Accel-...返回

示例

Nginx与php-fpm在同一服务器

安装php-fpm

yum install php-fpm php-mysql -y

systemctl enable --now php-fpm

ps -ef | grep php-fpm

php配置优化
vim /etc/php-fpm.conf
include=/etc/php-fpm.d/*.conf
pid = /run/php-fpm/php-fpm.pid
error_log = /var/log/php-fpm/error.log
daemonize = yes 是否后台启动

vim /etc/php-fpm.d/www.conf
listen = 127.0.0.1:9000 监听地址及IP
listen.allowed_clients = 127.0.0.1 允许客户端从哪个源IP地址访问,要允许所有行⾸加;注释即可
user = nginx php-fpm启动的用户和组,会涉及到后期⽂件的权限问题
group = nginx
pm = dynamic 动态模式进程管理
pm.max_children = 500 静态方式下开启的php-fpm进程数量,在动态方式下他限定php-fpm的最大进程数
pm.start_servers = 100 #动态模式下初始进程数,必须⼤于等于pm.min_spare_servers和小于等于pm.max_children的值。
pm.min_spare_servers = 100 #最小空闲进程数
pm.max_spare_servers = 200 #最大空闲进程数
pm.max_requests = 500000 #进程累计请求回收值,会回收并重新⽣成新的⼦进程
pm.status_path = /pm_status #状态访问URL
ping.path = /ping #ping访问动地址
ping.response = ping-pong #ping返回值
slowlog = /var/log/php-fpm/www-slow.log #慢日志路径
php_admin_value[error_log] = /var/log/php-fpm/www-error.log #错误日志
php_admin_flag[log_errors] = on
php_value[session.save_handler] = files #phpsession保存⽅式及路径
php_value[session.save_path] = /var/lib/php/session #当时使⽤file保存session的文件路径
nginx配置
[root@localhost ~]# cat /apps/nginx/conf/conf.d/pc.conf
location ~ \.php$ {
    root /etc/nginx/php;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
 }
访问
相关推荐
勤奋的凯尔森同学1 小时前
webmin配置终端显示样式,模仿UbuntuDesktop终端
linux·运维·服务器·ubuntu·webmin
技术小齐5 小时前
网络运维学习笔记 016网工初级(HCIA-Datacom与CCNA-EI)PPP点对点协议和PPPoE以太网上的点对点协议(此处只讲华为)
运维·网络·学习
ITPUB-微风5 小时前
Service Mesh在爱奇艺的落地实践:架构、运维与扩展
运维·架构·service_mesh
落幕5 小时前
C语言-进程
linux·运维·服务器
chenbin5206 小时前
Jenkins 自动构建Job
运维·jenkins
java 凯6 小时前
Jenkins插件管理切换国内源地址
运维·jenkins
AI服务老曹6 小时前
运用先进的智能算法和优化模型,进行科学合理调度的智慧园区开源了
运维·人工智能·安全·开源·音视频
sszdzq7 小时前
Docker
运维·docker·容器
book01217 小时前
MySql数据库运维学习笔记
运维·数据库·mysql
bugtraq20218 小时前
XiaoMi Mi5(gemini) 刷入Ubuntu Touch 16.04——安卓手机刷入Linux
linux·运维·ubuntu