首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

Linux 從零手動編譯安裝 Nginx + PHP (FastCGI) 完整指南

     編輯:PHP 綜合知識

軟體版本(示例)

  • Nginx 1.24.0
  • PHP 8.2.10
  • PCRE 10.42, zlib 1.3, OpenSSL 3.0.10

一、安裝依賴庫

yum install -y gcc gcc-c++ make automake autoconf libtool \
    pcre-devel zlib-devel openssl-devel \
    libxml2-devel bzip2-devel libcurl-devel \
    libjpeg-devel libpng-devel freetype-devel \
    libmcrypt-devel mhash-devel libxslt-devel

二、編譯安裝 Nginx

wget https://nginx.org/download/nginx-1.24.0.tar.gz
tar zxf nginx-1.24.0.tar.gz
cd nginx-1.24.0
./configure --prefix=/usr/local/nginx \
    --with-http_ssl_module --with-http_v2_module \
    --with-http_gzip_static_module --with-pcre --with-zlib
make && make install
# 執行文件:/usr/local/nginx/sbin/nginx
# 配置文件:/usr/local/nginx/conf/nginx.conf

三、編譯安裝 PHP(啟用 FPM)

wget https://www.php.net/distributions/php-8.2.10.tar.gz
tar zxf php-8.2.10.tar.gz
cd php-8.2.10
./configure --prefix=/usr/local/php \
    --with-config-file-path=/usr/local/php/etc \
    --enable-fpm --with-fpm-user=www --with-fpm-group=www \
    --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd \
    --with-iconv --with-freetype --with-jpeg --with-zlib \
    --with-gd --enable-gd-jis-conv --enable-mbstring \
    --with-curl --enable-ftp --enable-sockets \
    --enable-bcmath --enable-exif --enable-opcache \
    --with-openssl --with-zip --with-xsl
make && make install
cp php.ini-production /usr/local/php/etc/php.ini
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf

四、配置 PHP-FPM

; /usr/local/php/etc/php-fpm.d/www.conf
listen = 127.0.0.1:9000
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 1000
request_terminate_timeout = 60
slowlog = /usr/local/php/var/log/slow.log
request_slowlog_timeout = 10

五、啟動 PHP-FPM

/usr/local/php/sbin/php-fpm
# 加入 systemd:/usr/lib/systemd/system/php-fpm.service

六、配置 Nginx 對接 FastCGI

# /usr/local/nginx/conf/nginx.conf http 段內
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;

server {
    listen 80;
    server_name localhost;
    root /usr/local/nginx/html;
    index index.php index.html;
    location / { try_files $uri $uri/ /index.php?$args; }
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include /usr/local/nginx/conf/fastcgi_params;
    }
}

七、建立 fastcgi_params

# /usr/local/nginx/conf/fastcgi_params
fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx;
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;

八、啟動 Nginx 並驗證

/usr/local/nginx/sbin/nginx
echo ' /usr/local/nginx/html/index.php
curl https://127.0.0.1/index.php

九、開機自啟 systemd 服務

# /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
[Install]
WantedBy=multi-user.target

# /usr/lib/systemd/system/php-fpm.service
[Unit]
Description=php-fpm
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/php/sbin/php-fpm --nodaemonize
ExecReload=/bin/kill -USR2 $MAINPID
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable nginx php-fpm
systemctl start nginx php-fpm

十、常見問題排查

現象排查
502 Bad Gatewayphp-fpm 未啟動、端口不匹配、防火牆、SELinux
File not foundSCRIPT_FILENAME 路徑錯誤、root 指向錯誤
Permission deniedphp-fpm 用戶無權讀取項目目錄
Primary script unknownNginx 未正確傳遞 SCRIPT_FILENAME

總結

手動編譯安裝 Nginx + PHP-FPM 讓你完全掌控版本、模組、參數。核心流程:依賴庫 → Nginx 編譯 → PHP 編譯(--enable-fpm) → php-fpm.conf/www.conf → Nginx fastcgi_pass → fastcgi_params → systemd 托管。生產環境建議加上 OPcache、Redis、監控告警、日誌輪轉。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved