Linux 系统搭建 Nginx + PHP-FPM 服务器环境指南
本文详解如何在 Linux 环境下从零搭建 Nginx 与 PHP 的开发及运行环境。通过 apt-get 或源码编译安装 Nginx,配置辅助库后编译安装 PHP,并重点演示如何利用 spawn-fcgi 管理多进程 FastCGI 服务。涵盖核心配置文件编写、路径信息修复以及开机自启设置,确保 Web 服务器稳定高效地处理动态请求。
Nginx 服务器的安装与启动
Nginx 是一款高性能的 HTTP 和反向代理服务器。在 Linux 上部署该环境,首先需获取并安装 Nginx。用户可根据需求选择包管理器安装或源码编译。
第1步:安装或编译 Nginx
目的: 快速部署 Nginx 二进制程序及其默认配置文件。
- Ubuntu/Debian 系统:直接使用包管理器安装,系统将自动处理依赖关系。
sudo apt-get install nginx
- 源码编译:若需自定义模块(如 Rewrite 模块)或特定路径,可下载源码包进行编译。
wget http://sysoev.ru/nginx/nginx-0.5.34.tar.gz
tar zxvf nginx-0.5.34.tar.gz
cd nginx-0.5.34
./configure --prefix=/usr/local/nginx
make && make install
第2步:验证安装与目录结构
目的: 确认程序已正确写入系统,并熟悉关键文件位置。
包管理器安装后的典型路径:
- 配置文件:
/etc/nginx/(虚拟主机配置在/etc/nginx/sites-available/) - 执行程序:
/usr/sbin/nginx - 日志目录:
/var/log/nginx/ - 根目录:
/var/www/nginx-default
源码编译的典型路径:
- 配置目录:
/usr/local/nginx/conf - 网站根目录:
/usr/local/nginx/html - 日志目录:
/usr/local/nginx/logs - Sbin目录:
/usr/local/nginx/sbin
第3步:启动服务与开机自启
目的: 启动监听 80 端口的服务进程,并设置为开机运行。
- 启动方法: Ubuntu 用户使用
sudo /etc/init.d/nginx start;源码编译用户直接执行/usr/local/nginx/sbin/nginx。 - 测试访问: 浏览器访问
http://localhost/,应看到 Nginx 欢迎页面。 - 设置自启: Ubuntu 执行
update-rc.d nginx defaults;其他系统可将启动命令添加至/etc/rc.local。
PHP 环境的编译与配置
由于 Nginx 不原生支持 CGI 方式运行 PHP,必须使用 FastCGI 协议。这要求先为 PHP 准备必要的扩展库,然后编译 PHP 本体。
第4步:安装 PHP 辅助依赖库
目的: 解决 PHP 运行所需的图像、加密及压缩功能依赖。
常用的辅助包包括 zlib, libjpeg, libpng, libmcrypt, mhash 等。以 zlib 为例,操作流程如下:
- 解压:
tar -jxf zlib-1.2.3.tar.bz2 - 进入目录:
cd zlib-1.2.3 - 配置与安装:
./configure && make && make install
其余辅助包遵循相同的解压、配置(./configure)、编译安装流程。
第5步:编译安装 PHP 5
目的: 生成包含 FastCGI 支持且具备所需功能的 php-cgi 可执行文件。
# 解压源码包
mv -zxvf php-5.2.14.tar.gz
cd php-5.2.14
# 配置编译参数,指定安装路径并加载必要模块
./configure --prefix=/usr/local/php5 \
--with-mysql=/usr/local/mysql5 \
--with-zlib --with-png-dir --with-jpeg-dir \
--with-mcrypt --enable-mbstring --enable-zip
# 编译并安装
make && make install
配置完成后,找到 php.ini 配置文件。为了配合 Nginx 正确处理 SCRIPT_FILENAME,需在配置中开启路径信息修复功能:
cgi.fix_pathinfo=1
Nginx 与 PHP FastCGI 对接配置
此阶段目标是让 Nginx 能够将 .php 请求转发给后台运行的 PHP-CGI 进程。
第6步:创建 FastCGI 环境变量文件
目的: 向 PHP 进程传递 Nginx 的关键 URL 信息和状态码。
新建文件 fastcgi_params(源码安装在 /usr/local/nginx/conf/,APT 安装在 /etc/nginx/),内容如下:
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
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_FILENAME $document_root$fastcgi_script_name;
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 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 重定向状态标记
fastcgi_param REDIRECT_STATUS 200;
第7步:配置 Nginx 站点监听规则
目的: 定义当请求以 .php 结尾时,将其转发至 PHP-CGI。
在 Nginx 的 server 块中添加以下 location 配置:
server {
index index.php;
root /usr/local/nginx/html;
location ~ \.php$ {
include /usr/local/nginx/conf/fastcgi_params; # 引入环境变量文件
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000; # 转发到 PHP-CGI 监听的地址和端口
}
}
修改配置后,重载 Nginx 使配置生效:
- Ubuntu:
sudo /etc/init.d/nginx reload - 源码版:
kill -HUP `cat /usr/local/nginx/logs/nginx.pid`
第8步:配置与管理 PHP FastCGI 进程
目的: 使用独立工具管理多个 PHP-CGI 进程,避免单进程效率低下,并提供进程重启能力。
利用 Lighttpd 附带的 spawn-fcgi 工具来守护 PHP 进程:
# 获取 spawn-fcgi (假设已从 lighttpd 源码中提取)
cp src/spawn-fcgi /usr/local/bin/spawn-fcgi
# 启动 5 个子进程的 PHP-CGI (绑定 127.0.0.1:9000)
/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u www-data -g www-data -f /usr/bin/php-cgi
参数说明:
-f: 指定执行的 FastCGI 程序路径。-a/p: 绑定 TCP 地址和端口。-s: 绑定 Unix Socket 路径。-C: 预生成的子进程数(仅对 PHP 有效,提高并发响应速度)。-u/-g: 运行进程的用户和用户组(Ubuntu 建议设为www-data)。
将上述启动命令追加到 /etc/rc.local 底部,实现开机自启动 PHP 池。
完成判断与排错
结果验证: 在网站根目录创建 index.php,写入 。访问 http://localhost/index.php,若能查看到完整的 PHP 版本、扩展列表及环境配置信息,则说明 Nginx + PHP-FastCGI 环境已配置成功。
常见问题排查:
- 502 Bad Gateway: 检查
spawn-fcgi进程是否存活,确认 Nginx 的fastcgi_pass地址端口与 spawn-fcgi 一致。 - 脚本无法执行: 检查
php.ini中的cgi.fix_pathinfo是否已开启;检查SCRIPT_FILENAME映射路径是否正确。 - 权限拒绝: 确保 PHP 进程(如
www-data)拥有读取网站文件及写出日志文件的权限。
以上就是 Linux下安装配置Nginx+PHP开发环境的详细内容,更多关于Linux部署运维的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













