基于 Docker 的 php-fpm 如何使用 socket 方式进行连接
现有两个容器:nginx
和 php-fpm
,我们通常的连接方式是采用 tcp 形式,配置 127.0.0.1:9000
将 php 相关请求转发给 php-fpm,而使用 socket 的连接方式,将获得更好的性能。
具体配置示例如下:
配置 docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32version: '3'
services:
# Nginx
nginx:
build:
context: ./build/nginx
args:
VERSION: 1.14
image: lnmp/nginx:1.14
...
volumes:
.....
- ./conf/php_fpm/sock:/sock
links:
- php_fpm
# PHP with fpm
php_fpm:
build:
context: ./build/php70_fpm
args:
- VERSION=7.0
image: lnmp/php_fpm:7.0
.....
volumes:
.....
# php-fpm 的配置
- ./conf/php_fpm/zz-docker.conf:/usr/local/etc/php-fpm.d/zz-docker.conf
# 挂载宿主机 socket 目录,因为 nginx 服务也需要访问
- ./conf/php_fpm/sock:/sock修改 php-fpm 配置文件
1
2
3
4
5
6
7
8
9
10
11[global]
daemonize = no
[www]
;listen = 127.0.0.1:9000
listen = /sock/php70-fpm.sock
listen.mode = 0666
.....修改对应项目的 nginx 配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21server {
listen 80;
server_name test.local;
index index.html index.htm index.php;
root /usr/share/nginx/html/testProject;
.....
# 处理 php 文件
location ~ \.php {
# fastcgi_pass php_fpm:9000;
fastcgi_pass unix:/sock/php70-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html/testProject/$fastcgi_script_name;
include fastcgi_params;
}
.....
}
以上操作完成后,重新使用 docker-compose up
启动服务。
提示:如果出现 502 或 找不到 xx.sock 文件的错误,请检查确认用户权限或相关设置是否正确。