在nginx里集成php模块

nginx是一个高性能的web服务器,它可以处理静态文件和反向代理的请求,但是它不知道如何运行php脚本。为了让nginx能够支持php,我们需要使用一个php模块,比如php-fpm(FastCGI Process Manager),它可以在nginx外部创建自己的进程,然后通过FastCGI协议与nginx通信。这样,当用户请求一个php页面时,nginx就会把请求转发给php-fpm,然后把php-fpm返回的结果发送给用户。这种方式比传统的CGI或者mod_php更快更节省资源,也更方便管理和配置。

要在nginx里集成php模块,需要完成以下几个步骤:

第一步:安装php-fpm

我们假设已经安装了最新版本的php(>= 7.3),那么可以使用apt-get命令来安装php-fpm:

sudo apt-get install php7.3-fpm

安装完成后,php-fpm服务会自动启动,可以使用systemctl命令来查看它的状态:

systemctl status php7.3-fpm

应该看到类似这样的输出:

php7.3-fpm.service - The PHP 7.3 FastCGI Process Manager
   Loaded: loaded (/lib/systemd/system/php7.3-fpm.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2019-02-17 06:29:31 UTC; 30s ago
     Docs: man:php-fpm7.3(8)
 Main PID: 32210 (php-fpm7.3)
   Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
    Tasks: 3 (limit: 1152)
   CGroup: /system.slice/php7.3-fpm.service
           ├─32210 php-fpm: master process (/etc/php/7.3/fpm/php-fpm.conf)
           ├─32235 php-fpm: pool www
           └─32236 php-fpm: pool www

第二步:配置php-fpm池

php-fpm服务会创建一个默认的池,它的配置文件(www.conf)可以在/etc/php/7.3/fpm/pool.d目录下找到。可以根据的需求来修改默认的池,或者创建新的池。一般来说,建议为每个网站或者应用创建单独的池,这样可以更好地控制每个php-fpm进程的资源分配和权限。

在这里,我们假设只有一个网站或者应用,那么可以使用默认的池。需要注意以下几个重要的参数:

  • user和group:指定运行php-fpm进程的用户和组,默认是www-data,可以根据的实际情况进行修改。
  • listen:指定监听请求的方式,可以是tcp端口(例如127.0.0.1:9000)或者unix套接字(例如/var/run/php/php7.3-fpm.sock)。一般来说,使用unix套接字会更快更安全。
  • pm:指定进程管理器的模式,可以是static(固定数量)、dynamic(动态调整)或者ondemand(按需启动)。一般来说,dynamic模式比较适合大多数场景。
  • pm.max_children:指定最大允许的子进程数量,这个值取决于的服务器性能和负载情况。
  • pm.start_servers:指定启动时创建的子进程数量,在dynamic模式下有效。
  • pm.min_spare_servers:指定最小空闲子进程数量,在dynamic模式下有效。
  • pm.max_spare_servers:指定最大空闲子进程数量,在dynamic模式下有效。
  • pm.max_requests:指定每个子进程处理的最大请求数,在达到该值后会重启子进程,防止内存泄漏。

可以根据的实际情况进行调整,或者使用默认的值。修改完配置文件后,需要重启php-fpm服务:

sudo systemctl restart php7.3-fpm

第三步:配置nginx

要让nginx能够与php-fpm通信,需要在nginx的配置文件中添加一些指令。可以在/etc/nginx/sites-available目录下创建一个新的配置文件,或者修改默认的配置文件(default)。在这里,我们假设创建了一个名为example.com的配置文件,它的内容如下:

server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/example.com;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include fastcgi.conf;
        fastcgi_pass unix:/run/php/php7.3-fpm.sock;
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
    }
}

这个配置文件的含义如下:

  • listen 80:指定监听80端口。
  • server_name example.com www.example.com:指定处理example.com和www.example.com域名的请求。
  • root /var/www/example.com:指定网站的根目录。
  • index index.php:指定默认的索引文件。
  • location /:匹配所有的请求,使用try_files指令来检查请求的文件是否存在,如果不存在,则重写到index.php文件。
  • location ~ .php$:匹配所有以.php结尾的请求,使用include指令来引入fastcgi.conf文件,它包含了一些通用的FastCGI参数。然后使用fastcgi_pass指令来指定php-fpm监听的unix套接字。最后使用fastcgi_buffers和fastcgi_buffer_size指令来调整缓冲区的大小。

修改完配置文件后,需要创建一个软链接到/etc/nginx/sites-enabled目录,以便nginx能够读取它:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

然后需要测试nginx的配置是否正确:

sudo nginx -t

如果没有错误,应该看到类似这样的输出:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

最后,需要重启nginx服务:

sudo systemctl restart nginx

第四步:测试nginx和php-fpm

要测试nginx和php-fpm是否正常工作,可以在网站根目录下创建一个名为info.php的文件,它的内容如下:

然后可以通过浏览器访问example.com/info.php,应该看到类似这样的页面:

这个页面显示了php的一些信息,证明了nginx和php-fpm已经成功集成了。

你可能感兴趣的:(nginxphp)