nginx 与 php-fpm 运作介绍与设定

nginx + php-fpm 是现在常常用来与代替以前的 php apache 伺服器,其最大的优点是使用的系统资源较少,并且 nginx 对于静态档案的处理速度非常快,本篇将讲解 nginx 与 php-fpm 之间是如何运作的。

nginx 是什麼 ?

首先来了解一下 nginx 是什麽,nginx 是一个 web server,其主要功能是反向代理、负载平衡器和 HTTP 快取,nginx 本身就能够做一个静态档案伺服器,现在最常主要负责:

处理静态档案
依据规则转发 request
资料压缩 (gzip)
传输的资料加密 (https)
其没有一定要用于 php,可以依据情况将 request 丢给其他程式语言处理,或是将 request 丢给不同的 php 版本处理。

php-fpm 是什麼 ?


fpm 是 FastCGI Process Manager 的缩写,其功能非常的单纯,专门接收特定 request 并且运行 php 脚本产生结果。

fpm-fpm 可以启动多个 child process 来运行 php 脚本,有效的使用多核心 cpu 的效能

而每个 process 并不是 request 执行完就关闭,而是会先閒置,等待处理下一个 request,如果閒置太久,且已经太多 process 都閒置状态才会关闭,所以不会有反覆启动 processs 导致资源浪费。

​例如下面得設定

pm.start_servers = 4
pm.max_children = 10
pm.min_spare_servers = 2
pm.max_spare_servers = 6
pm.max_requests = 500

其效果为:

伺服器启动时就开启 4 个 process
最多 10 个 children process
最小閒置 process 数量
最大閒置 process 数量
一个 process 处理 500 个 request 后会重启

nginx 與 php-fpm 運作說明

 这边以常见的 php-fpm 设定来说明

server {
    gzip on;
  
    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
    }
}

这设定有几项规则:

启用压缩 (gzip)
url path 是以 .php 结尾的丢给 php-fpm 处理
其他 request 检查该路径是否是档案或资料夹,如果是传回档案,否则回应 404 not found
而静态档案与 PHP 的 request 实际运作经过是不同的,下面图片解说

檔案 request 的運作

1.客户端发送 request
2.nginx 寻找到对应的档案并读取
3.返回档案的资料给使用者

PHP request (.php 結尾的 request) 的運作

1.客户端发送 request
2.将 request 丢给 php-fpm 来处理
3.php-fpm 找到对应的 php 脚本档案并且执行
4.讲脚本执行的结果丢回给 nginx
5.nginx 将结果返回给使用者

常見問題

網頁出現 504 Gateway timeout 原因與解決方法?

 

以上面这张图解说,nginx 转发 request 给 php-fpm 后会开始等 output,而 nginx 会设定一个等待回应 timeout 的设定值,假如 php-fpm 超过这个时间都没有回应 (php执行太久) 那就会显示 504 Gateway timeout

※ 预设 php-fpm 是没有设定执行时间上限

解决方法有两种:

        1.调高 nginx 的等待时间

调整 nginx.conf 设定 fastcgi_read_timeout:

location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
        fastcgi_read_timeout 300;
    }

        2.降低 php-fpm 的可执行时间上限

调整 php-fpm 的 php.ini 设定 max_execution_time:

max_execution_time = 30

参考:conson

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值