现有两个容器:nginx 和 php-fpm,我们通常的连接方式是采用 tcp 形式,配置 127.0.0.1:9000 将 php 相关请求转发给 php-fpm,而使用 socket 的连接方式,将获得更好的性能。

具体配置示例如下:

  1. 配置 docker-compose.yml

    version: '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
    
  2. 修改 php-fpm 配置文件

    [global]
    
    daemonize = no
    
    [www]
    ;listen = 127.0.0.1:9000
    listen = /sock/php70-fpm.sock
    listen.mode = 0666
    
    .....
    
    
  3. 修改对应项目的 nginx 配置文件

    server {
    	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 文件的错误,请检查确认用户权限或相关设置是否正确。

转载于:https://my.oschina.net/antsky/blog/2964124

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐