【原创】php-fpm + Nginx 配置方法
概要
1、简介
在处理使用 php 编写的 web 程序的时候,需要一个 php-fpm 服务在后台来处理 php 的代码运行。
而一般 php-fpm 都会与 web 服务器结合来使用,web 服务器专门用于接收用户的 FastCGI 请求,而 php-fpm 则专门用于处理 php 相关的业务逻辑。
web server -> php-fpm/file service/email service .
本文总结使用 nginx 作为 web 服务器与 php-fpm 配合时需要的配置
2、环境信息
-
Ubuntu 18.04
-
nginx 1.14.0
-
php-fpm 7.2
正文
1、php-fpm 的 listen 配置
php-fpm 配置文件位于 /etc/php/7.2/fpm/pool.d/www.conf,php-fpm.sock 是 php-fpm 默认使用的 listen 方式,如下所示:
; The address on which to accept FastCGI requests.
; Valid syntaxes are:
; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific IPv4 address on
; a specific port;
; '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
; a specific port;
; 'port' - to listen on a TCP socket to all addresses
; (IPv6 and IPv4-mapped) on a specific port;
; '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = /run/php/php7.2-fpm.sock
可以看到文件中写到的有四种设置方法。ipv4:port,ipv6:port,port,/path/to/unix/socket。
(1) 通过 php-fpm.sock
php-fpm 配置是使用监听 unix socket 的方式来服务 php 处理程序,/etc/php/7.2/fpm/pool.d/www.conf 中的配置如下:
listen = /run/php/php7.2-fpm.sock
与此对应的 nginx 配置如下
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
注:使用 socket 配置方式,php-fpm 的 listen.owner 和 nginx 的 user 必须相同。默认情况下相同的
/etc/php/7.2/fpm/pool.d/www.conf 中的 listen.owner 设置如下:
; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server. Many
; BSD-derived systems allow connections regardless of permissions.
; Default Values: user and group are set as the running user
; mode is set to 0660
listen.owner = www-data
listen.group = www-data
;listen.mode = 0660
/etc/nginx/nginx.conf 中的 user 配置如下:
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
默认情况下 php-fpm 与 nginx 的用户都是 www-data,所以可以不用改。另外,网站的资源目录比如 /data/www/website website 的目录不必是 www-data
(2) 通过 ipv4:port
php-fpm 程序可以在后台监听一个端口,其他程序可以访问该端口处理 FastCGI 请求。
listen = 127.0.0.1:9000
与此对应的 nginx 配置如下
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
推荐使用这种方法 进行配置。另外两种不常使用,不作介绍。
近期评论