基於 Docker 的 php-fpm 如何使用 socket 方式進行鏈接

現有兩個容器:nginx 和 php-fpm,咱們一般的鏈接方式是採用 tcp 形式,配置 127.0.0.1:9000 將 php 相關請求轉發給 php-fpm,而使用 socket 的鏈接方式,將得到更好的性能。php

具體配置示例以下:html

  1. 配置 docker-compose.ymlnginx

    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 配置文件docker

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

    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 啓動服務。socket

提示:若是出現 502 或 找不到 xx.sock 文件的錯誤,請檢查確認用戶權限或相關設置是否正確。tcp

相關文章
相關標籤/搜索