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

現有兩個容器: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 文件的錯誤,請檢查確認用戶權限或相關設置是否正確。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章