linux环境下源码安装nginx,并搭建PHP 环境

25. March 2017 Linux 0

这是我第一次在linux环境下源码安装nginx,搭建php环境,过程中参考http://www.nginx.cn/install 和http://php.net/manual/zh/install.unix.nginx.php两篇官方文档来安装,还是遇到了一些问题,通过此次安装,进一步了解了php和nginx的工作原理和基本配置。

安装ubuntu平台编译环境

apt-get install build-essential
apt-get install libtool

1.选定源码目录
可以是任何目录,本文选定的是/ usr / local / src

cd /usr/local/src

2.安装PCRE库
cd /usr/local/src
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.39.tar.gz
tar -zxvf pcre-8.39.tar.gz
cd pcre-8.39
./configure
make
make install

3.安装zlib库
http://zlib.net/zlib-1.2.11.tar.gz下载最新的zlib源码包,使用下面命令下载编译和安装zlib包:

cd /usr/local/src
wget http://zlib.net/zlib-1.2.11.tar.gz
tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure
make
make install

4.安装ssl(某些vps默认没装ssl)

cd /usr/local/src
wget https://www.openssl.org/source/openssl-1.1.0e.tar.gz
tar -zxvf openssl-1.1.0e.tar.gz

5安装nginx

cd /usr/local/src
wget http://nginx.org/download/nginx-1.4.2.tar.gz
tar -zxvf nginx-1.4.2.tar.gz
cd nginx-1.4.2
./configure  –with-http_ssl_module \
–with-pcre=/usr/local/src/pcre-8.39 \
–with-zlib=/usr/local/src/zlib-1.2.11 \
–with-openssl=/usr/local/src/openssl-1.1.0e
make
make install

6 确保系统的80端口没被其他程序占用
netstat -ano|grep 80

7 启动

sudo /usr/local/nginx/sbin/nginx  启动

sudo /usr/local/nginx/sbin/nginx -s stop 停止

打开浏览器输入本机网址,或localhost,127.0.0.1均可访问

nginx安装过程中一路没有遇到错误,安装过程要查看是否有错误提示,根据错误提示更新,覆盖,或在安装所需要的依赖。

8.nginx一般是把请求发fastcgi管理进程处理,fascgi管理进程选择cgi子进程处理结果并返回被nginx . PHP-FPM是一个PHP FastCGI管理器,只是用于PHP

wget http://cn.php.net/distributions/php-5.6.30.tar.gz
tar zvxf php-5.6.30.tar.gz
cd php-5.6.30
./configure –enable-fpm –with-mysql //先安装这两个模块,以后用到在添加,正好可以学习下linux下php扩展,
make
sudo make install

9 创建配置文件,并将其复制到正确的位置。

cp php.ini-development /usr/local/php/php.ini
cp /usr/local/etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf
cp sapi/fpm/php-fpm /usr/local/bin

10 需要着重提醒的是,如果文件不存在,则阻止 Nginx 将请求发送到后端的 PHP-FPM 模块, 以避免遭受恶意脚本注入的攻击
将 php.ini 文件中的配置项 cgi.fix_pathinfo 设置为 0
打开 php.ini:
vim /usr/local/php/php.ini
定位到 cgi.fix_pathinfo= 并将其修改为如下所示:
cgi.fix_pathinfo=0

11 在启动服务之前,需要修改 php-fpm.conf 配置文件,确保 php-fpm 模块使用 www-data 用户和 www-data 用户组的身份运行。
vim /usr/local/etc/php-fpm.conf
找到以下内容并修改:
user = www-data
group = www-data

启动 php-fpm 服务:

/usr/local/bin/php-fpm

12 配置 Nginx 使其支持 PHP 应用:

vim /usr/local/nginx/conf/nginx.conf
修改默认的 location 块,使其支持 .php 文件:

location / {
root html;
index index.php index.html index.htm;
}
下一步配置来保证对于 .php 文件的请求将被传送到后端的 PHP-FPM 模块, 取消默认的 PHP 配置块的注释,并修改为下面的内容:

location ~* \.php$ {
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;//我被这个地方坑了一次,一直提示file not found,要把script替换成$document_root
fastcgi_param SCRIPT_NAME $fastcgi_script_name; //添加这一行
}

13 重启nginx

sudo /usr/local/nginx/sbin/nginx -s stop
sudo /usr/local/nginx/sbin/nginx

14 创建测试文件,

<?php phpinfo(); ?>

PS:在12步的时候一定要把nginx解析php方面的注释去掉,把script换成$document_root,nginx把php文件发送到后端的 PHP-FPM 模块(是一个PHP FastCGI管理器),PHP-FPM 模块把请求发fastcgi管理进程处理,fascgi管理进程选择cgi子进程处理结果并返回被nginx ,出现file not found 原因是php-fpm进程找不到SCRIPT_FILENAME配置的要执行的.php文件,php- fpm返回给nginx的默认404错误提示。尤其注意第12步,网上一些论坛和博客改成绝对路径,纯粹是瞎扯蛋,这种方式只能访问指定目录下的php文件。一定要使用$document_root。安装过程中注意产生的错误,还是对依赖包的更新,添加,删除等操作,作为一个技术狂,有一定的洁癖,总是喜欢从官网下载源码安装。