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;
 }
访问
相关推荐
蝶恋舞者24 分钟前
怎样设置软件开机自启动(用的最多,最简单)
linux·运维·服务器
段一凡-华北理工大学1 小时前
AI Agent 从入门到封神:24 讲打造你的超级智能体~系列文章23:从Demo到上线:Agent应用的架构设计、性能优化与成本控制实战
运维·网络·人工智能·性能优化·高炉炼铁·工业智能体
L1624761 小时前
Zabbix 7.0 LTS 完整部署与运维手册(AlmaLinux 9 + MySQL 8.0 + Nginx)
运维·mysql·zabbix
happymade1 小时前
MSRM3 区域层级嵌套功能深度解析与实操教程
运维·网络拓扑·网络管理·网络运维·msrm3
网络小白不怕黑2 小时前
14.VSFTP服务相关配置
linux·运维·服务器
爱喝水的鱼丶2 小时前
SAP-ABAP:ALV字段布局定制全攻略——快速适配业务端个性化展示需求
运维·性能优化·sap·abap·经验交流·alv报表
qetfw2 小时前
CentOS 7 配置 firewalld 防火墙
linux·运维·centos
留不住的何止是时间2 小时前
关于docker构建镜像build指令的注意事项
运维·docker·容器
Dovis(誓平步青云)3 小时前
《Linux CPU频率为何忽高忽低:cpufreq、idle状态与性能抖动教程》
linux·运维·服务器·spring boot·后端·生成对抗网络
小此方3 小时前
Re:Linux系统篇(四十三)信号篇·一:谁在敲进程的门?一篇带你了解信号概念与产生机制
linux·运维·驱动开发