文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Nginx 之 fastcgi 常用参数详解

2023-09-01 13:04

关注

目录

fastcgi 是什么

这个在上篇文章已经提到过了一个 PHP 请求的执行过程,这里在讲一次

早期的 webserver 只处理 html 等静态文件,但是随着技术的发展,出现了像 php 等动态语言。为了解决不同的语言解释器(如 php、python 解释器)与 webserver 的通信,于是出现了 cgi协议。只要你按照 cgi协议去编写程序,就能实现语言解释器与 webwerver 的通信。

但是,webserver每收到一个请求,都会去 fork 一个 cgi 进程,请求结束再kill掉这个进程。这样有10000个请求,就需要fork、kill php-cgi进程10000次。这样的话很浪费资源,于是,出现了 cgi 的改良版本,fast-cgifast-cgi 每次处理完请求后,不会 kill 掉这个进程,而是保留这个进程,使这个进程可以一次处理多个请求。这样每次就不用重新 fork 一个进程了,大大提高了效率。

fastcgi 常用参数

具体参数详情可参考官网:Module ngx_http_fastcgi_module

以下参数都在nginx的配置文件中配置,配置范围:http, server, location。

1、fastcgi_pass

这个命令是指定将http代理到哪个fastcgi服务端接口。fastcgi_pass后面是填写fastcgi服务端地址的,这个地址可以是域地址,也可以是Uninx-域套接字。

fastcgi_pass unix:/tmp/php-cgi.sock;fastcgi_pass 127.0.0.1:9000;

2、fastcgi_param

这个命令是设置 fastcgi 请求中的参数,具体设置的东西可以在 PHP 的 $_SERVER 中获取到。参考最后的店fastcgi_param参数配置。

3、fastcgi_index

fastcgi默认的主页资源,示例:fastcgi_index index.php;这个功能和index index.html功能一样。当SCRIPT_FILENAME没有命中脚本的时候,使用的就是fastcgi_index设置的脚本。

  fastcgi_index  index.php;

4、fastcgi_connect_timeout

nginx与后端fastcgi server连接超时时间。

  fastcgi_connect_timeout 60s;

5、fastcgi_send_timeout

指定nginx向后端传送请求超时时间(指已完成两次握手后向fastcgi传送请求超时时间)。

 fastcgi_send_timeout 60s;

6、fastcgi_read_timeout

指定nginx接受后端fastcgi响应请求超时时间 (指已完成两次握手后nginx接受fastcgi响应请求超时时间)。

 fastcgi_send_timeout 60s;

7、fastcgi_buffer_size

指定nginx读取fastcgi响应第一部分需要用多大的缓冲区,这个值表示将使用一个64kb的缓冲区响应第一部分应答(应答头)可以设置为fastcgi_buffers缓存区大小。

fastcgi_buffer_size 4k; # 单位为k,一般为4的整数倍

8、fastcgi_buffers

指nginx需要用多大的缓冲区缓冲fastcgi的应答请求(整个应答),如果一个php脚本所产生的页面大小为256kb,那么会分配4个64kb缓冲区来缓存,如果页面大于256kb,那么大于256kb的部分会缓存到fastcgi_temp指定的路径中,但是因为内存中数据处理远快于磁盘, 所以这个值应该为站点中php所产生的页面大小的中间值, 如果站点大部分php脚本产生的页面为:256kb, 那么可以设置成成"8 16k 4 64k"。

fastcgi_buffers 8 4k;  # 单位为k,一般为4的整数倍

9、fastcgi_busy_buffers_size

整个数据请求需要多大的缓存区,建议设置为fastcgi_buffers值的两倍。

fastcgi_busy_buffers 8k; # 单位为K,一般为fastcgi_buffers值的2倍

10、fastcgi_temp_file_write_size

写入缓存文件使用多大的数据块,默认值是fastcgi_buffer值的2倍。

fastcgi_temp_file_write_size 8k; # 单位为K,一般为fastcgi_buffers值的2倍

11、fastcgi_cache_path

定义fastcgi缓存的路径及其他设置。

fastcgi_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];

12、fastcgi_cache

开启fastcgi_cache并为其定义一个名称,可以防止nginx 502错误,降低cpu负载,不过也会引起其他问题,根据需求来选择。

fastcgi_cache off;

13、fastcgi_cache_valid

为指定的应答代码指定缓存时间。

fastcgi_cache_valid 200 302 1h; # 对于状态码为200 302的网页缓存1小时fastcgi_cache_valid any 1m; # 其他页面缓存1分钟

14、fastcgi_cache_key

以某个值为key,Nginx会取这个key的md5作为缓存文件 如果设置了缓存哈希目录,Nginx会从后往前取相应的位数做为目录。

fastcgi_cache_key "requestmethod://requestmethod://host$request_uri";

15、fastcgi_cache_min_uses

URL至少经过多少次请求将被缓存。

fastcgi_cache_min_uses 1;

16、fastcgi_cache_use_stale

对一些错误提示code,nginx会使用到fast_cache缓存。

fastcgi_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_503 |http_403 | http_404 | off ...;

fastcgi_param参数配置

一般在nginx.conf文件同级有一个 fastcgi.conf 配置文件如下:

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;# 脚本文件请求的路径fastcgi_param  QUERY_STRING       $query_string; # 请求参数 fastcgi_param  REQUEST_METHOD     $request_method;# 请求方法fastcgi_param  CONTENT_TYPE       $content_type; # 请求时正文的格式,对应Content-Type字段fastcgi_param  CONTENT_LENGTH     $content_length; # 请求头正文长度,对应Content-length字段fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;# 脚本名称fastcgi_param  REQUEST_URI        $request_uri; # 请求地址不带参数  fastcgi_param  DOCUMENT_URI       $document_uri; # 与$uri相同fastcgi_param  DOCUMENT_ROOT      $document_root;# 网站的根目录。配置文件中root值fastcgi_param  SERVER_PROTOCOL    $server_protocol;# 请求使用的协议,如:HTTP/1.1   fastcgi_param  REQUEST_SCHEME     $scheme; # 获取http协议fastcgi_param  HTTPS              $https if_not_empty; # value非空才进行设置fastcgi_param  GATEWAY_INTERFACE  CGI/1.1; # cgi 版本  fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version; # nginx 版本号,可修改、隐藏 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配置中指定的server_name  # PHP only, required if PHP was built with --enable-force-cgi-redirectfastcgi_param  REDIRECT_STATUS    200;#fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/";fastcgi_param PHP_ADMIN_VALUE "open_basedir=/home/wwwroot/:/tmp/:/proc/";

来源地址:https://blog.csdn.net/weixin_43844718/article/details/127027017

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯