Home >Backend Development >PHP Problem >Setting up concurrency (php-fpm) and Nginx optimization practices
随着互联网的发展,高并发的问题也越来越突出。在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!