nginx-php-fpm

nginx + php-fpm 配置 #

nginx 相关 #

方案一:

text
server {
    root /var/www/html;
    index index.php;
    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;
    }
}
  • 访问路径,如:/index.php, /login.php

方案二:

text
server {
    root /var/www/html;
    rewrite ^/$ /home redirect;
    location / {
        if (!-e $request_filename) {
            rewrite ^(.*)$ /index.php/$1 last;
        }
    }
    location ~ ^(.+\.php)(.*)$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}
  • 访问路径,如:/login, /index.php/login

fastcgi_param SCRIPT_FILENAME may be:

  • $document_root$fastcgi_script_name; # Default root of php scripts
  • /php-scripts$fastcgi_script_name; # Change root of php scripts

Include defaults may be:

  • include fastcgi_params; # Centos
  • include snippets/fastcgi-php.conf; # Ubuntu

fastcgi_param 配置参考:

nginx
fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REQUEST_SCHEME     $scheme;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

php-fpm 相关 #

www.conf #

text
;user = www-data
;group = www-data
user = root
group = root

File path may be:

  • /etc/php-fpm.d/www.conf # Centos
  • /etc/php/7.2/fpm/pool.d/www.conf # Ubuntu
  • /usr/local/etc/php-fpm.d/www.conf # Docker php:7-fpm

Original user and group may be:

  • apache # Centos
  • www-data # Ubuntu

command options #

  • -D, --daemonize
  • -F, --nodaemonize
  • -R, --allow-to-run-as-root

配置示例 #

目录结构 #

  • /root/docker-sample/
    • Dockerfile
    • docker-compose.yml
    • php-fpm-www.conf: 用于覆盖默认的 php-fpm.d/www.conf 配置。
    • work/: php脚本所在目录

Dockerfile #

dockerfile
FROM php:7-fpm
EXPOSE 9000
RUN docker-php-ext-install pdo pdo_mysql
ADD ./php-fpm-www.conf /usr/local/etc/php-fpm.d/www.conf

docker-compose.yml #

yaml
version: "3.4"
services:
    taohua:
        build: .
        image: "my-php:7-fpm"
        command: ["php-fpm", "--nodaemonize", "--allow-to-run-as-root"]
        environment:
            - "TZ=Asia/Shanghai"
        ports:
            - "127.0.0.1:9000:9000"
        volumes:
            - "/root/docker-sample/work:/work"

nginx conf #

text
server {
    root /root/docker-sample/work;
    rewrite ^/$ /home redirect;
    location / {
        if (!-e $request_filename) {
            rewrite ^(.*)$ /index.php/$1 last;
        }
    }
    location ~ ^(.+\.php)(.*)$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME /work/$fastcgi_script_name;
        include fastcgi_params;
    }
    location ~ /\.ht {
        deny all;
    }
}
2024年1月3日