随机
Enter 搜索 ↑↓ 切换 Esc 清空

nginx_fastcgi_pass

命令

nginx FastCGI 代理配置指令

nginx_fastcgi_pass

nginx FastCGI 代理配置指令

补充说明

fastcgi_pass 指令用于将请求转发给 FastCGI 服务器(如 PHP-FPM、Python uwsgi 等)。配置时需要配合 fastcgi_paramfastcgi_index 等指令一起使用。

语法

fastcgi_pass host:port;           # TCP 连接
fastcgi_pass unix:path;           # Unix Socket 连接
fastcgi_pass $variable;           # 动态地址(需使用 map)

PHP-FPM 配置示例

# TCP 连接
server {
    listen 80;
    server_name example.com;
    root /var/www/html;
    index index.php index.html;
    
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        
        # 传递 SCRIPT_FILENAME
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        
        # 常用 FastCGI 参数
        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;
        
        # 包含默认参数
        include fastcgi_params;
        
        # 超时设置
        fastcgi_connect_timeout 60;
        fastcgi_send_timeout 60;
        fastcgi_read_timeout 60;
    }
}

# Unix Socket 连接
location ~ \.php$ {
    fastcgi_pass unix:/var/run/php/php-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

FastCGI 参数详解

# 常用 fastcgi_param
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;
fastcgi_param  REDIRECT_STATUS   200;

fastcgi_split_path_info

# 路径拆分(用于 Laravel、ThinkPHP 等框架)
location ~ ^/api/(.+)$ {
    fastcgi_split_path_info ^/api/(.+)$;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_pass unix:/var/run/php/php-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root/api.php;
    include fastcgi_params;
}

# ThinkPHP 5+ 路由
location / {
    if (!-e $request_filename) {
        rewrite ^/(.*)$ /index.php/$1 last;
    }
}

location ~ \.php {
    fastcgi_split_path_info ^/index.php/(.+)$;
    fastcgi_param SCRIPT_FILENAME $document_root/index.php;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_pass unix:/var/run/php/php-fpm.sock;
    include fastcgi_params;
}

超时和缓冲配置

location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    
    # 连接超时
    fastcgi_connect_timeout 60s;
    
    # 发送超时
    fastcgi_send_timeout 60s;
    
    # 读取超时
    fastcgi_read_timeout 60s;
    
    # 缓冲
    fastcgi_buffering on;
    fastcgi_buffer_size 4k;
    fastcgi_buffers 8 4k;
    fastcgi_busy_buffers_size 8k;
    
    # 请求缓冲区
    fastcgi_request_buffering on;
}

安全配置

# 禁止访问敏感文件
location ~ \.php$ {
    # 只允许访问特定文件
    location ~ ^/index\.php {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
    
    # 其他 PHP 文件拒绝访问
    location ~ ^/.*\.php$ {
        return 404;
    }
}

# 隐藏 PHP 版本
fastcgi_hide_header X-Powered-By;
fastcgi_pass_header X-Generator;

常用路径

# Debian/Ubuntu
/etc/php/8.1/fpm/pool.d/www.conf
unix:/run/php/php-fpm.sock

# CentOS/RHEL
/etc/php-fpm.d/www.conf
unix:/var/run/php-fpm/www.sock

# macOS (Homebrew)
/usr/local/opt/php@8.1/var/run/php-fpm.pid
unix:/usr/local/var/run/php-fpm.sock