Home  >  Article  >  Backend Development  >  Setting up concurrency (php-fpm) and Nginx optimization practices

Setting up concurrency (php-fpm) and Nginx optimization practices

PHPz
PHPzOriginal
2023-04-21 09:09:29946browse

随着互联网的发展,高并发的问题也越来越突出。在Web应用的开发过程中,如何优化并发请求处理,提高服务器的响应速度,是非常重要的一环。本文将介绍如何通过设置PHP-FPM并发及Nginx优化实践,提高Web应用的性能和并发处理能力。

一、PHP-FPM允许的并发处理

PHP-FPM 是 PHP 的一种 FastCGI 实现方式,是提高Web应用性能的常用方式。PHP-FPM 可以通过修改设置允许并发处理最大数量,从而提高同时处理请求数的能力。

1、找出当前 FPM 映射的用户:

    ps aux|grep "php-fpm" | grep -v root | awk -F " " '{print $1}' | sort | uniq

2、编辑php.ini文件,配置php-fpm.max_children参数,如下:

; The number of child processes created on startup.
; Note: Used only when pm is set to 'dynamic'
; Default Value: 5
;php_fpm_pm.start_servers =

; The desired minimum number of idle server processes.
; Note: Used only when pm is set to 'dynamic'
; Note: Mandatory when pm is set to 'dynamic'
; Default Value: 0
;php_fpm_pm.min_spare_servers =

; The desired maximum number of idle server processes.
; Note: Used only when pm is set to 'dynamic'
; Note: Mandatory when pm is set to 'dynamic'
; Default Value: 0
;php_fpm_pm.max_spare_servers =

; The number of child processes to be created when pm is set to 'static' and the maximum
; number of child processes has been reached.
; This value sets the limit on the number of simultaneous requests that will be served
; Either explicitly with the fastcgi_max_children option, or implicitly through other
; settings referencing the maximum number of children.
; Default Value: 0
;php_fpm_pm.max_children = 50

; The number of requests each child process should execute before respawning.
; This can be useful to work around memory leaks in 3rd party libraries. For endless
; request processing specify '0'. Equivalent to PHP_FCGI_MAX_REQUESTS.
; Default Value: 0
;php_fpm_pm.max_requests = 500

3、编辑php-fpm.conf文件,配置pm.max_children参数如下:

pm.max_children = 200

其中 pm.max_children 参数表示 PHP-FPM 所允许的最大子进程数。可以根据服务器的CPU核数进行适当调整。在实践中,可以根据实际情况对比测试结果来确定最佳值。

二、Nginx优化

1、配置文件优化

Nginx 配置文件可以通过一些参数的优化来提高性能,例如:

    #设置工作进程数
    worker_processes auto;
 
    #进程事件处理的最大连接数
    events {
        worker_connections  1024;
    }
 
    #Http请求的默认设定
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;

        # HTTP 压缩
        gzip on;
        gzip_min_length  1k;
        gzip_buffers     4 16k;
        gzip_slience on;
        gzip_types       text/plain application/xml text/css text/javascript application/x-javascript application/xml+rss text/javascript+ktm text/javascript+js imag/svg+xml image/gif image/jpeg image/png;

        #处理访问日志
        access_log  logs/access.log  main;

        #处理错误日志
        error_log  logs/error.log  error;
    }

2、gzip压缩

gzip 压缩是一种常用的HTTP优化技术,可以显著减少传输数据量,从而加快页面的加载速度。Nginx 通过 gzip 模块来支持 gzip 压缩,可以在配置文件中启用它:

gzip on;
gzip_min_length  1k;
gzip_buffers     4 16k;
gzip_slience on;
gzip_types       text/plain application/xml text/css text/javascript application/x-javascript application/xml+rss text/javascript+ktm text/javascript+js imag/svg+xml image/gif image/jpeg image/png;

其中,gzip_min_length 表示启用压缩的最小文件大小,gzip_buffers 表示 gzip 缓存区的数量和大小,gzip_types 表示要进行压缩的文件类型。

3、文件缓存

文件缓存可以有效减少服务器的访问压力,Nginx 提供了 open_file_cache 模块来实现文件缓存。可以在配置文件的 http 段中添加以下设置:

open_file_cache valid=60s;
open_file_cache_min_uses 1;
open_file_cache_errors on;

其中,open_file_cache valid=60s 表示缓存有效时间为 60 秒,open_file_cache_min_uses 表示打开文件最少 1 次才进行缓存,open_file_cache_errors 表示缓存出错是否重新打开文件。

4、启用缓存和keep-alive

启用缓存和 keep-alive 可以有效降低服务器响应时间。可以在配置文件中添加以下设置:

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
proxy_cache_key "$scheme$request_method$host$request_uri$is_args$args";
proxy_cache_valid any 1h;
proxy_cache_bypass $http_pragma;
proxy_cache_revalidate on;
proxy_cache_min_uses 1;
gzip on;
gzip_min_length  1k;
gzip_buffers     4 16k;
gzip_slience on;
gzip_types       text/plain application/xml text/css text/javascript application/x-javascript application/xml+rss text/javascript+ktm text/javascript+js imag/svg+xml image/gif image/jpeg image/png;

#keep-alive
keepalive_timeout 65;
keepalive_requests 100;

其中,proxy_cache_path 表示缓存文件存放在 /var/cache/nginx 目录下,keys_zone 表示缓存名为 my_cache,inactive 表示缓存失效时间为 60 分钟。proxy_cache_key 表示根据请求和参数生成缓存名,proxy_cache_valid 表示缓存时间为 1 小时,proxy_cache_bypass 表示如果请求头包含 Pragma 字段,表示不使用缓存。keepalive_timeout 表示 keep-alive 连接的超时时间为 65 秒,keepalive_requests 表示一个连接最多处理 100 个请求。

三、总结

本文介绍了如何通过设置PHP-FPM并发及Nginx优化实践,提高Web应用的性能和并发处理能力。PHP-FPM 的并发处理能力可以通过修改配置文件中的参数来提高,Nginx 的优化则需要通过一些常用的模块和参数的设置来实现。在实际应用中,通过测试对比可以确定最佳的配置参数,从而实现高性能的 Web 服务器。

The above is the detailed content of Setting up concurrency (php-fpm) and Nginx optimization practices. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn