php-fpm配置

vim  /usr/local/php/etc/php-fpm.conf
原有的listen = /tmp/php-cgi.sock
修改php-fpm的配置文件  vim /usr/local/php/etc/php-fpm.conf   里面的 listen = /tmp/php-fcgi.sock  改为  listen = 127.0.0.1:9000

修改nginx的配置文件   vim /usr/local/nginx/conf/nginx.conf     里面的 fastcgi_pass unix:/tmp/php-cgi.sock; 改为 fastcgi_pass 127.0.0.1:9000;
user  www;  
worker_processes auto;  
error_log /usr/local/nginx/logs/nginx_error.log;  
pid /usr/local/nginx/logs/nginx.pid; 
include /usr/share/nginx/modules/*.conf; 
worker_rlimit_nofile 10240;  
events  
{      
    worker_connections  2048;  
}  
http  
  
{  
      log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /usr/local/nginx/logs/access.log  main;


    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    #limit_conn_zone设置用于保存各种key(比如当前连接数)的共享内存的参数。5m就是5兆字节,这个值应该被设置的足够大以存储(32K5)32byte状态或者(16K5)64byte状态。
    limit_conn_zone $binary_remote_addr zone=addr:5m;
    limit_conn addr 100;
    # cache informations about file descriptors, frequently accessed files
    # can boost performance, but you need to test those values
    open_file_cache max=100000 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
    open_file_cache_errors on;

    include             mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    #gzip  on;
    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_comp_level 2;
    gzip_types text/plain application/x-javascript application/javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
    gzip_vary off;
    gzip_disable "MSIE [1-6]\.";
  
server  
{  
    fastcgi_connect_timeout 500;
        fastcgi_send_timeout 500;
        fastcgi_read_timeout 500;
    listen 80;  
    server_name qingtianvip.com;  
    root /home/work/qingtianvip; 
    location / {
            index  index.php index.html;
    }
    location ~ \.php$ {  
        include fastcgi_params; 
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;  
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;  
    }
     if (!-e $request_filename) {
            rewrite ^/(.*)  /index.php?$1 last;
        }  
}

server    
{  
    listen 80;
    server_name tp.qingtianvip.com;
    root /home/work/sifan;
    location / {
     index index.php index.html;
    }
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass  127.0.0.1:9000; 
        fastcgi_index index.php;  
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }   
     if (!-e $request_filename) {
            rewrite ^/(.*)  /index.php?$1 last;
        }   
} 
  
}  


<think>好的,我现在需要帮助用户解决PHP文件被下载而不是解析的问题。用户之前已经得到了关于Nginx配置的详细步骤,现在他们想检查PHP-FPM配置。我需要结合用户提供的引用和之前的回答来给出合适的解决方案。 首先,用户的问题明确指向PHP-FPM配置。根据引用[1],PHP-FPM在5.3.3之后已经集成到PHP核心,所以在安装时需要使用--enable-fpm参数。这可能意味着用户需要确认PHP-FPM是否正确安装和运行。不过用户现在的问题不是安装,而是配置,所以可能需要检查PHP-FPM配置是否正确。 接下来,引用[2]提到了Web服务器和PHP-FPM的协作流程。当请求PHP文件时,Nginx应该通过FastCGI将请求转发给PHP-FPM处理。如果PHP-FPM没有正确配置,可能导致Nginx无法正确传递请求,从而让浏览器下载文件。所以需要检查PHP-FPM的监听方式(socket还是端口)、权限设置以及进程管理。 引用[3]提到了ThinkPHP配置,其中需要指定public目录作为运行目录。这可能涉及到Nginx的root和location配置,但用户现在关注的是PHP-FPM,所以可能需要确认PHP-FPM配置是否允许处理这些请求。 用户之前的问题中已经提到了检查PHP-FPM的运行状态、安全限制和日志文件。现在需要更详细地指导用户如何配置PHP-FPM,可能包括确认进程池配置、监听socket的权限、安全参数如security.limit_extensions,以及日志的查看。 可能的步骤包括: 1. 确认PHP-FPM的安装和运行状态。 2. 检查PHP-FPM配置文件(如www.conf)中的监听设置是否正确,是否与Nginx中的fastcgi_pass一致。 3. 确保security.limit_extensions包含.php,防止其他文件被错误解析。 4. 检查文件权限,确保PHP-FPM进程有权限读取PHP文件。 5. 查看PHP-FPM和Nginx的错误日志,寻找可能的错误信息。 6. 测试配置更改后重启服务。 需要注意的是,用户的服务器环境可能不同,比如PHP版本、文件路径等,所以需要给出通用的步骤,同时提醒用户根据实际情况调整。此外,用户可能对某些配置项不熟悉,需要解释关键参数的作用,比如security.limit_extensions和listen.owner等。 另外,用户可能之前已经按照步骤配置了Nginx,但问题依然存在,所以需要强调PHP-FPM与Nginx协作的关键点,比如socket文件的权限和所有权是否正确,确保两者之间的通信正常。例如,Nginx的运行用户(如www-data)需要有权限访问PHP-FPM的socket文件,否则会导致连接失败,进而无法解析PHP文件。 还需要考虑是否PHP-FPM的进程池配置限制了某些目录或文件,导致无法正确执行PHP脚本。此外,检查PHP-FPM是否在处理请求时遇到错误,比如脚本超时或内存不足,但这类问题通常会导致500错误而非下载,所以可能性较低。 最后,总结需要用户逐步检查PHP-FPM的关键配置点,验证与Nginx的连接,确保所有设置一致且正确,然后通过重启服务和测试来确认问题是否解决。</think>### 分步排查与配置 PHP-FPM 以解析 PHP 文件 --- #### **1. 确认 PHP-FPM 基础配置** **核心目标**:确保 PHP-FPM 与 Nginx 通过正确的通信方式(Unix Socket 或 TCP)建立连接,并具备执行 PHP 脚本的权限。 --- ##### **(1)检查 PHP-FPM 进程状态** ```bash sudo systemctl status php-fpm # 通用命令(根据实际版本调整,如 php8.1-fpm) ``` - **预期输出**:`Active: active (running)` - **若未运行**: ```bash sudo systemctl start php-fpm # 启动服务 sudo systemctl enable php-fpm # 设置开机自启 ``` --- ##### **(2)验证 PHP-FPM 监听方式** 编辑 PHP-FPM 进程池配置文件(默认路径:`/etc/php/<version>/fpm/pool.d/www.conf`): ```ini ; 关键配置项: listen = /run/php/php8.1-fpm.sock # 使用 Unix Socket(推荐) ; listen = 127.0.0.1:9000 # 使用 TCP 端口 ; 确保权限允许 Nginx 访问: listen.owner = www-data # 与 Nginx 用户(通常为 www-data)一致 listen.group = www-data listen.mode = 0660 ``` - **关键点**: - `listen` 的值必须与 Nginx 配置中的 `fastcgi_pass` 匹配(如 `unix:/run/php/php8.1-fpm.sock`)[^1]。 - 若使用 TCP 端口,需开放防火墙(如 `ufw allow 9000`)。 --- ##### **(3)安全限制检查** 在同一配置文件中,确认 PHP-FPM 仅解析合法扩展名: ```ini security.limit_extensions = .php .php7 .phar # 必须包含 .php ``` - **若为空**:PHP-FPM 会尝试解析所有文件(如 .html 也被当作 PHP 执行,存在安全风险)[^2]。 --- #### **2. 权限与文件归属配置** ##### **(1)PHP 文件权限** 确保 PHP 脚本可被 Nginx 和 PHP-FPM 读取: ```bash sudo chmod -R 755 /var/www/html # 目录权限 sudo chown -R www-data:www-data /var/www/html # 文件归属(用户:组需与 PHP-FPM/Nginx 一致) ``` ##### **(2)Socket 文件权限** 若使用 Unix Socket,检查 Socket 文件归属: ```bash ls -l /run/php/php8.1-fpm.sock ``` - **预期归属**:`www-data:www-data`,权限 `rw-rw----`(即 0660)。 --- #### **3. 日志排查(定位深层问题)** ##### **(1)PHP-FPM 错误日志** 查看日志路径(通常在 `/var/log/php<version>-fpm.log`): ```bash sudo tail -f /var/log/php8.1-fpm.log ``` - **常见错误**: - `Primary script unknown`:Nginx 未正确传递 `SCRIPT_FILENAME`(需检查 Nginx 配置中的 `fastcgi_param`)。 - `Permission denied`:PHP 文件或 Socket 权限不足。 ##### **(2)Nginx 错误日志** ```bash sudo tail -f /var/log/nginx/error.log ``` - **关键线索**:`connect() failed`(通信失败)或 `access forbidden`(权限问题)。 --- #### **4. 配置关联性验证** ##### **(1)Nginx 与 PHP-FPM 的通信测试** 手动发送 FastCGI 请求验证连通性(需安装 `cgi-fcgi` 工具): ```bash SCRIPT_NAME=/test.php SCRIPT_FILENAME=/var/www/html/test.php REQUEST_METHOD=GET cgi-fcgi -bind -connect unix:/run/php/php8.1-fpm.sock ``` - **预期输出**:返回 PHP 脚本的执行结果(如 `<?php echo "OK"; ?>` 应输出 `OK`)。 ##### **(2)ThinkPHP 特殊配置** 若使用框架(如 ThinkPHP),需确保 Nginx 的 `root` 指向 `public` 目录[^3]: ```nginx root /var/www/html/public; # 示例路径 location / { try_files $uri $uri/ /index.php?$query_string; } ``` --- #### **5. 重载配置并测试** ```bash sudo systemctl reload php-fpm nginx # 平滑重载配置 curl -I http://localhost/test.php # 检查 Content-Type 是否为 text/html ``` - **成功标志**:浏览器访问 PHP 文件时显示页面内容,而非下载。 --- ### 关键配置总结表 | **配置项** | **正确值示例** | **错误后果** | |--------------------------|-----------------------------|---------------------------| | `listen` (PHP-FPM) | `/run/php/php8.1-fpm.sock` | Nginx 无法转发请求 | | `security.limit_extensions` | `.php` | 非 PHP 文件被错误解析 | | `listen.owner` (PHP-FPM) | `www-data` | Socket 通信权限被拒绝 | | `fastcgi_pass` (Nginx) | `unix:/run/php/php8.1-fpm.sock` | PHP 文件直接下载 | --- ### 相关问题 1. 如何为不同的网站配置独立的 PHP-FPM 进程池? 2. 如何调整 PHP-FPM 子进程数量以优化性能? 3. Nginx 返回 `502 Bad Gateway` 时如何排查 PHP-FPM 问题?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值