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;}

访问

Nginx与php-fpm不在同一服务器

安装php-fpm

wget https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/remi-release-7.rpm

yum install -y remi-release-7.rpm

yum install php72-php-fpm php72-php-mysql -y

rpm -ql php72-php-fpm

 准备配置文件

cp /opt/remi/php72/root/usr/share/doc/php72-php-common-7.2.34/php.ini-production /opt/remi/php72/root/usr/etc/php.ini

cp cp /opt/remi/php72/root/usr/share/doc/php72-php-fpm-7.2.34/php-fpm.conf.default /opt/remi/php72/root/usr/etc//php-fpm.conf

 修改配置文件
vim /etc/opt/remi/php72/php-fpm.d/www.conf 
user = nginx
group = nginx
listen = 192.168.33.171:9000  指定监听IP
;listen.allowed_clients = 127.0.0.1 注释运⾏行的客户端
 创建用户

创建用户并保持与nginx的uid保持一致

useradd nginx -u 1000 

配置nginx

server {listen 80;listen 443;ssl_certificate  /apps/nginx/certs/xxx.fxq.com.crt;ssl_certificate_key /apps/nginx/certs/xxx.fxq.com.key;ssl_session_cache shared:sslcache:20m;ssl_session_timeout 10m;server_name xxx.fxq.com;location / {root /data/nginx;index index.html;
}location ~ \.php$ {root /data/nginx/php;fastcgi_pass 192.168.33.171:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME /data/nginx/php$fastcgi_script_name;include fastcgi_params;
}}
 访问

 

负载均衡器实现php

安装haproxy

yum install -y haproxy

 配置文件

listen php-9000bind 192.168.33.171:9000mode tcpserver php2 192.168.33.162:9000 check inter 3 fall 3 rise 3

nginx配置

server {listen 80;listen 443;ssl_certificate  /apps/nginx/certs/xxx.fxq.com.crt;ssl_certificate_key /apps/nginx/certs/xxx.fxq.com.key;ssl_session_cache shared:sslcache:20m;ssl_session_timeout 10m;server_name xxx.fxq.com;location / {root /data/nginx;index index.html;
}location ~ \.php$ {root /data/nginx/php; fastcgi_pass 192.168.33.162:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME /data/nginx/php$fastcgi_script_name;include fastcgi_params;
}}

访问

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/835330.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jenkins流水线部署Maven项目

使用Jenkins的流水线功能,构建部署Java Maven项目,步骤很简单但是不少细节需要注意。 一、安装 Jenkins的安装步骤和流程就不具体描述,这里主要介绍一下安装时要注意的几个问题。 1、Jenkins尽量安装最新的几个版本,否则安装完成…

elixir V2测试网验证器一键部署脚本

实际收益 1、服务器环境 服务器系统:centos 7或者ubuntu 20.04(以上) CPU:2核 内存:4G 硬盘:30G ssd 网络:可靠的 100Mbit 互联网 2、部署脚本 #!/bin/bash set -eif [ "$#" -ne 3 ]; thenecho "Usage:

(已解决)org.springframework.amqp.rabbit.support.ListenerExecutionFailedException

报错截图 解决方案 1、登录rabbitMQ网址,删除所有队列 2、重启rabbitMQ 亲测有效!!!亲测有效!!!亲测有效!!!

uni-appH5Android混合开发二 || 使用Android Studio打包应用APK

前言: 在上一章节我们已经讲了如何uni-app离线打包Android平台教程,这一章就该来讲讲如何使用Android Studio打包应用APK提供给Android手机安装使用了。 uni-app跨平台框架介绍和快速入门 uni-app跨平台框架介绍和快速入门 第一步、首先打开已经编译好的…

javac编译web项目中的src

对于单个文件的且不引用其他类文件的java源码用javac编译大家都很熟悉即 javac hello.java, 服务器未安装idea,现在在服务器里面直接编译src目录 1 idea项目结构如下 2 web目录为最终部署的代码 WEB-INF下面没有 classes 目录 3 使用javac 编译src javac -encod…

图:广度优先遍历(BFS)和深度优先遍历(DFS)

1.工具类:队列和字典 export class DictionNary {// 字典的封装constructor() {this.items {}}set(key, value) {// 添加键this.items[key] value}has(key){// 判断键是否存在return this.items.hasOwnProperty(key)}get(key){// 获取键的valuereturn this.has(k…

六级仔细阅读

画两到三个词,精准定位 要原文和同义都满足才选 先看题目,在看原文,不要先看选项 做不出答案就继续往下读,读出来了就不用继续读了 分清楚是问为什么还是是什么,是什么看前面,为什么看后面 不知道就优先…

力扣HOT100 - 215. 数组中第K个最大元素

解题思路: 快速选择,目标是找出数组中第 k 小(或第 k 大)的元素,而不是对整个数组进行排序。 (需要和快排进行区分,快排的目的是排序) 注意: i l - 1, j r 1; 为什…

Spring Boot集成zookeeper快速入门Demo

1.什么是zookeeper? Zookeeper 是一个开源的分布式协调服务,目前由 Apache 进行维护。Zookeeper 可以用于实现分布式系统中常见的发布/订阅、负载均衡、命令服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。它具有以下特性…

学习Java的日子 Day45 HTML常用的标签

Day45 HTML 1.掌握常用的标签 1.1 标题标签 h1-h6 <h1>一级标签</h1> <h2>二级标签</h2> <h3>三级标签</h3> <h4>四级标签</h4> <h5>五级标签</h5> <h6>六级标签</h6> 显示特点&#xff1a; * 文字…

MemoryModule - exp - test

文章目录 MemoryModule - exp - test概述笔记测试环境GetModuleFileName不能正常执行GetModuleFileNameWntdll_LdrGetDllFullName猜测原因用LoadLibrary载入的DLL中功能是正常的 gLog可以正常使用内存载入DLL无法支持的功能的折中方法COM操作正常调用方代码接口代码 接口入参测…

基于springboot实现毕业设计系统项目【项目源码+论文说明】

基于springboot实现毕业设计系统演示 摘要 在如今社会上&#xff0c;关于信息上面的处理&#xff0c;没有任何一个企业或者个人会忽视&#xff0c;如何让信息急速传递&#xff0c;并且归档储存查询&#xff0c;采用之前的纸张记录模式已经不符合当前使用要求了。所以&#xff…

绝地求生:盘点宝箱中能开出来的极品皮肤!

最近杜卡迪联名大伙儿不都开箱子出了一堆皮肤吗&#xff1f;很多人搞不清哪些皮肤要留&#xff0c;哪些皮肤可以分。 OK这篇文章稍微推荐几个我认为的高质量可兑换的皮肤&#xff0c;当然个人整理难免有疏漏&#xff0c;欢迎评论区补充。 余波学院黑丝袜 目前游戏里唯一一条显…

pgbackrest 备份工具使用 postgresql

为啥我会使用pgbackrest进行备份&#xff1f;因为postgresql没有自带的差异备份工具。。。而我们在生产环境上&#xff0c;一般都需要用到差异备份或者增量备份。我们的备份策略基本是&#xff0c;1天1次完整备份&#xff0c;1个小时1次差异备份。如果只需要完整备份&#xff0…

知识库文档系统源码部署/搭建/上线/运营/售后/更新

一款基于ThinkPHPFastAdmin开发的知识库文档系统&#xff0c;可用于企业工作流程的文档管理&#xff0c;结构化记录沉淀高价值信息&#xff0c;形成完整的知识体系&#xff0c;能够轻松提升知识的流转和传播效率&#xff0c;更好地成就组织和个人。为部门、团队或项目搭建知识库…

SVN 合并到 Git 时有文件大于 100 M 被限制 Push

如果有文件大小大于 100M&#xff0c;GitHub 是会被限制推送到仓库中的&#xff0c;大概率情况会显示下面的错误&#xff1a; remote: Resolving deltas: 100% (3601/3601), done. remote: error: Trace: aea1f450da6f2ef7bfce457c715d0fbb9b0f6d428fdca80233aff34b601ff59b re…

LeetCode 513.找树左下角的值

LeetCode 513.找树左下角的值 1、题目 题目链接&#xff1a;513. 找树左下角的值 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1示例 2: 输入: [1,2,3,4,null…

用字符串初始化的指针

一. 简介 前一篇文章简单学习了数组与指针的区别&#xff0c;文章如下&#xff1a; C语言中数组与指针的区别-CSDN博客 本文学习一下 初始化为 字符串的 指针。防止使用过程中出现问题。 二. 初始化指针来指向字符串 初始化指针来指向字符串&#xff0c;例如如下代码就是…

SpringBoot 具体是做什么的?

Spring Boot是一个用于构建独立的、生产级别的、基于Spring框架的应用程序的开源框架。它的目标是简化Spring应用程序的开发和部署过程&#xff0c;通过提供一种快速、便捷的方式来创建Spring应用程序&#xff0c;同时保持Spring的灵活性和强大特性。 1. 简化Spring应用程序开…

信安标委发布16项网络安全国家标准:8项为旧标准替代,8项标准为新发布

1. 背景 根据2024年4月25日国家市场监督管理总局、国家标准化管理委员会发布的中华人民共和国国家标准公告&#xff08;2024年第6号&#xff09;&#xff0c;全国网络安全标准化技术委员会归口的16项国家标准正式发布。 2. 标准清单 本次国家标准涵盖了信息技术安全评估准则、…