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
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
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
; /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
/usr/local/php/sbin/php-fpm # 加入 systemd:/usr/lib/systemd/system/php-fpm.service
# /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;
}
}
# /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;
/usr/local/nginx/sbin/nginx echo ' /usr/local/nginx/html/index.php curl https://127.0.0.1/index.php
# /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 Gateway | php-fpm 未啟動、端口不匹配、防火牆、SELinux |
| File not found | SCRIPT_FILENAME 路徑錯誤、root 指向錯誤 |
| Permission denied | php-fpm 用戶無權讀取項目目錄 |
| Primary script unknown | Nginx 未正確傳遞 SCRIPT_FILENAME |
手動編譯安裝 Nginx + PHP-FPM 讓你完全掌控版本、模組、參數。核心流程:依賴庫 → Nginx 編譯 → PHP 編譯(--enable-fpm) → php-fpm.conf/www.conf → Nginx fastcgi_pass → fastcgi_params → systemd 托管。生產環境建議加上 OPcache、Redis、監控告警、日誌輪轉。