Home  >  Article  >  Operation and Maintenance  >  How to achieve high concurrency between nginx and php

How to achieve high concurrency between nginx and php

(*-*)浩
(*-*)浩Original
2019-06-10 15:46:244574browse

高性能服务器通过配置nginx和php-fpm,代替docker容器技术,实现请求服务高并发处理。

How to achieve high concurrency between nginx and php

主要说明配置主要参数。

nginx主要配置

通过nginx实现php-fpm服务器负载,用户访问服务时,将请求分配给不同的php-fpm服务器。

# nginx启动worker进程数
worker_processes auto;

#Changes the limit on the maximum number of open files (RLIMIT_NOFILE) for worker processes.定义进程可以打开的最大文件数,与linux内核相同即可
worker_rlimit_nofile 65535;
# 定义worker进程的优先级,数字越小优先级越高 [-20,19]
worker_priority -20;

events{
    # The maximum number of connections that each worker process can handle simultaneously.每个进程同时处理的连接数
    worker_connections 10240;
    # If multi_accept is disabled, a worker process will accept one new connection at a time. Otherwise, a worker process will accept all new connections at a time.
    multi_accept on;
}

http{
    access_log /var/log/nginx/access.log main buffer=32k;
    
    # Nginx将使用sendfile内核来调用处理文件传递。
    sendfile on;
    
    # 根据权重分配请求到不同服务器,以下配置,当有6个请求时,5个发送到9000端口服务器,1个发送到9001端口服务器
    upstream phpload{
        server 127.0.0.1:9000 weight=6;
        server 127.0.0.1:9001 weight=1;
    }
    
    server{
        listen 443;
        
        root /data/www/webserver;
        index index.php;
        
        location / {
            if (!-e $request_filename) {
                rewrite  ^(.*)$  /index.php?s=$1  last;
                break;
            }
        }
        
        location ~ .php($|/){
            set $script $uri;
            set $path_info "";

            if ($uri ~ "^(.+.php)(/.+)") {
                set $script $1;
                set $path_info $2;
            }

            fastcgi_param SCRIPT_FILENAME $document_root$script;
            fastcgi_param SCRIPT_NAME $script;
            fastcgi_param PATH_INFO $path_info;

            try_files $uri =404;
            
            # 使用负载,分发请求到上游php服务器
            fastcgi_pass  myfastcgi;
            fastcgi_index index.php;
            include       fastcgi_params;
        }
    }
}

php-FPM是一个PHP FastCGI的管理器,它实际上就是PHP源代码的补丁,旨在将FastCGI进程管理引进到PHP软件包中,我们必须将其patch到PHP源代码中,然后再行编译才能使用。而现在我们可以在PHP 5.3.2及更新版本中直接开启并使用即可,因为PHP从该版本已经将其收入到软件包中,所以其不再是补丁包的存在了。

php-fpm主要配置

pm为dynamic配置时,php-fpm最大启动100子线程时,根据测试结果性能最好。max_requests 设置获取请求数量尽可能大

; php服务器监听端口号
listen = 127.0.0.1:9001

pm = dynamic
pm.max_children = 100
pm.start_servers = 2
pm.min_spare_servers = 2
pm.max_spare_servers = 40
; php-fpm工作进程处理完多少请求后自动重启
pm.max_requests = 10240

php-fpm实例启动

php-fpm启动实例,设置不同的配置文件,每个配置文件监听不同端口号

php-fpm -y /etc/php-fpm.d/9001.conf

php-fpm -h 查看帮助,获取更多命令使用方式

php-fpm操作命令

PID为php-fpm实例master进程号

重新加载实例配置

kill -USR2 [PID]

从容停止php-fpm

kill -QUIT [PID]

更多Nginx相关技术文章,请访问Nginx使用教程栏目进行学习! 

The above is the detailed content of How to achieve high concurrency between nginx and php. 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
Previous article:What nginx_lua can doNext article:What nginx_lua can do