【LNMP】nginx + php + mysql 手动安装方法

nginx读音“Engine X”,接下来我们说的LNMP套装(也有人称为LEMP,取Engine之意),也即Linux + Nginx + MySQL + PHP,安装起来需要注意的环节较多。

ps:尽管网上有许多傻瓜式的LNEP一键安装包,但是我还是强烈建议用纯手工的办法体验一次LNEP的安装,出于学习的目的,这个安装流程会衍生许多Linux下的知识点,而这些知识点都是对我们很有用的。

一. 首先是编译安装Nginx

1.1 第一步是先把nginx需要的环境给搭上:
好在这些东西用yum都能很容易做到:
#yum install gcc-c++
#yum install -y pcre pcre-devel
#yum install -y zlib zlib-devel
#yum install -y openssl openssl-devel

1.2 下载nginx安装包
https://nginx.org/en/download.html
找到合适的安装包后,用鼠标右键点下载链接,复制下它的地址,然后粘贴到puTTY之类的控制台里面,
先创建一个目录统一存放这些临时安装包,比如
#mkdir src 
#cd src
#wget -c  https://nginx.org/download/nginx-1.11.1.tar.gz  (我这里目前最新是1.11.1版本,以后可能会变,总之以实际为准)
#tar -zxvf nginx-1.11.1.tar.gz (解开压缩包)
#cd nginx-1.11.1
./configure (首先制作配置文件,后面不带任何参数即为默认配置,这一步必须要保证没有任何错误发生,否则接下来无法make编译)
刷刷刷刷屏幕会滚动半天,检测没有任何问题后,接下来开始编译:
#make
#make install
因为是默认配置,所以一般来说也不会出现什么问题,除非之前的环境没有搭建好。
装好后,可以用:
#whereis nginx (查看nginx装在了什么位置)
至此,编译安装结束。

1.3 启动、停止、重启nginx
#/usr/local/nginx/sbin/nginx (启动nginx)
#/usr/local/nginx/sbin/nginx -s quit (停止nginx,此方式停止步骤是待nginx进程处理任务完毕进行停止。)
#/usr/local/nginx/sbin/nginx -s stop (停止nginx,此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程。)
#/usr/local/nginx/sbin/nginx -s reload (重启nginx)
这一步有时候会出现问题,说是找不到nginx.pid之类的,我们可以用这个办法去解决:
#/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf (强制nginx以指定设置文件启动)

1.4 开机自启动
即在rc.local增加启动代码就可以了。
#vim /etc/rc.local
增加一行 /usr/local/nginx/sbin/nginx
设置执行权限:
#chmod 755 rc.local
1.5 测试nginx是否安装成功?
跟Apache一样,直接到浏览器输入http://ip即可,例如 http://127.0.0.1
如果安装成功将会显示一个很简单的“Welcome to nginx!”欢迎页面。


接下来我们安装PHP,但在安装之前我强烈建议先装Mysql, 否则将会产生一系列莫名其妙的问题!
请移步这里: http://138.128.197.175/forum.php?mod=viewthread&tid=6788


二. 编译安装PHP
2.1 卸载PHP
在安装PHP之前,需要先卸载之前安装的旧版PHP,很多CentOS服务器上都预装了PHP5.X,版本过于老旧,所以第一步是彻底把这些老顽固清理出去。
第一步是常规卸载:
#yum remove php
这么做其实并不干净,因为输入php -v,还是能显示php的版本号,所以并没有真正删除干净。
继续:
#rpm -qa|grep php (用这个命令去抓取与PHP相关的东西)
提示如下:
php-pdo-5.1.6-27.el5_5.3
php-mysql-5.1.6-27.el5_5.3
php-xml-5.1.6-27.el5_5.3
php-cli-5.1.6-27.el5_5.3
php-common-5.1.6-27.el5_5.3
正确的卸载顺序是:
#rpm -e php-mysql-5.1.6-27.el5_5.3 
#rpm -e php-pdo-5.1.6-27.el5_5.3 
#rpm -e php-xml-5.1.6-27.el5_5.3 
#rpm -e php-cli-5.1.6-27.el5_5.3 
#rpm -e php-gd-5.1.6-27.el5_5.3 
#rpm -e php-common-5.1.6-27.el5_5.3 
再用#php -v
查看版本信息已经没有提示。

2.2 编译安装PHP
2.2.1 这个流程跟刚才装nginx差不多,第一步也是去官网找下载链接: http://php.net/downloads.php
#cd /src (回到我们放源码的目录)
#wget -c  http://php.net/get/php-7.1.11.tar.gz/from/a/mirror   (注意要选.gz为后缀的版本)
#tar xzvf php-7.1.11.tar.gz
#cd php-7.1.11
然后安装各种扩展库:
#yum -y install libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel MySQL pcre-devel
#yum -y install curl-devel
#yum -y install libxslt-devel

以上几个扩展库可以使用yum直接安装,不麻烦,但是 libmcrypt、mcrypt、mhash这三个就有点让人头疼了:

第1步,需要去 http://www.sourceforge.net 下载安装包:
这是我抓到的绝对地址,不排除以后会变,但貌似从2008年开始这东西就没更新过,所以应该一直能用,我们用wget把这三个东西下载下来:

  1. #wget -c https://sourceforge.net/projects/mcrypt/files/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz
  2. #wget -c https://sourceforge.net/projects/mcrypt/files/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz
  3. #wget -c https://sourceforge.net/projects/mhash/files/mhash/0.9.9.9/mhash-0.9.9.9.tar.gz
复制代码
第2步,先安装Libmcrypt
#tar -zxvf libmcrypt-2.5.8.tar.gz
#cd libmcrypt-2.5.8
#./configure
#make
#make install 说明:libmcript默认安装在/usr/local 

第3步,安装mhash
#tar -zxvf mhash-0.9.9.9.tar.gz
#cd mhash-0.9.9.9
#./configure
#make
#make install

第4步,安装mcrypt
#tar -zxvf mcrypt-2.6.8.tar.gz
#cd mcrypt-2.6.8
#LD_LIBRARY_PATH=/usr/local/lib ./configure
#make
#make install

至此,PHP需要的扩展环境基本上就搭好了,下面开始正式编译安装:

大家还记得前面见过多次的那个./configure命令吗,
之前的所有安装包括nginx,都是不带任何参数的,但是php就不一样了,他需要一个极长的安装参数行,
注意以下指令是一个很长的整行,需要一次性粘贴到puTTY里面,中间不能断行,否则会报错。

./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-pdo-mysql --with-mysqli --with-gd --with-zlib --with-mcrypt --enable-fpm --enable-soap  --enable-mbstring=all  --enable-sockets

稍微解释一下这条配置行的含义,只讲几个比较重要的:
--prefix=/usr/local/php  : 表示将php安装到/usr/local/php目录
--with-config-file-path=/usr/local/php/etc  : 表示将php配置文件存放在/usr/local/php/etc 
-with-pdo-mysql  : 需要安装mysql原生模块
--with-mysqli  : 需要安装mysql 增强模块
--enable-fpm  : 需要安装fpm模块,这个很重要,需要它才能打通nginx
剩下的都是一些基本库,比如说gd,zlib、mbstring之类,就不再一 一解释了。



输入这条超长的指令后,屏幕开始滚动,时间在半分钟左右,跟之前那些比起来,算是比较长的,并且要求中途不能有任何错误发生,如果有错误产生,那么根本没办法执行接下来的make指令,这个环节有可能会产生很多问题,不是那么容易解决的,但99%都是因为扩展没有安装好,总之,在我的服务器上,经过上述的各种安装包,我是可以保证无错误产生的,至于在你的机器上如何,这个因为初始环境不同,并不好下结论,总之尽量把扩展都安装齐全,系统缺少什么他都会报告出来,根据关键字去顺藤摸瓜并想办法安装上就是了。

如果没有任何问题,即不报error之类(warning不算),那么我们就可以开始编译了,很简单就一条指令:
#make && make install
然后屏幕开始翻滚,这个过程非常漫长,大概会在半个小时之后完成。

屏幕滚完(编译完)之后,我们开始编辑设置文件:

1.修改php.ini
cd /usr/local/php
vim php.ini
找到:cgi.fix_pathinfo
改为:
cgi.fix_pathinfo=0
存盘退出。

2. 然后修改php-fpm.conf
cd /usr/local/php/etc
vim php-fpm.conf
找到:pid = run/php-fpm.pid
把前面的;号去掉(取消注释)就行了。
存盘退出。

3. 修改www.conf
cd /usr/local/etc/php-fpm.d (注意这个文件并不在php目录下)
vim www.conf
修改:
user = www
group = www
listen = 127.0.0.1:9000
存盘退出。

4. 修改nginx.conf (修改这个相当于就把nginx和php-fpm连通了)
cd /usr/local/nginx/conf
vim nginx.conf (nginx在运行着的时候,会出现权限冲突,不管他,直接按E,强制修改)
找到:
server {
        listen       80;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
            root   html;
            index  index.html index.htm;
        }
然后在下面添加:
        location ~ \.php$ {
        root    html;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
       }
存盘退出。

另外还要在系统中添加一个组和一个账号,执行以下命令:
#groupadd www
#useradd -g www www
至此文件修改结束。

第五步:启动php-fpm和nginx

1. 首先启动php-fpm
#/usr/local/php/sbin/php-fpm

2. 然后启动nginx
#/usr/local/nginx/sbin/nginx

如果没有报错,就可以进行下一步了,这个地方报错的可能性也比较大,多半都是因为上面4个文件没有设置好导致,
网上的教程关于这四个文件的设置也是五花八门各种各样的都有,让人无所适从,实在乱套了,也没关系,
几乎每个设置文件的目录下都有一个默认设置文件备份,改得太乱大不了重新恢复到原始状态再重新折腾即可,例如:
#cp nginx.conf.default nginx.conf (这样就恢复原样了)


第六步:
即使上一步没有任何报错,也不见得php文件就能顺利运行,因此我们还需要进行有效的测试:

1. 去nginx的主目录下创建一个php测试文件
cd /usr/local/nginx/html
vim test.php
内容只有一行:
<?php phpinfo(); ?>
存盘退出。

然后去浏览器里输入http://ip/test.php
如果安装成功,会出现一个内容很丰富的PHP探针页面,否则直接报错,服务器会报500或404错误。至于为什么报错,不太好说,以上任何一个环节出问题都有可能导致,但关注点主要还是在那四个文件的修改上面.另外一点就是前面的编译安装,千万不要有“妥协”的心态,比如某个扩展没装好,干脆就跳过它,直接不装了进入到下一步的话,也很难说会不会出问题。

祝你早日看到这个画面:
 

猜你喜欢

转载自blog.csdn.net/rockage/article/details/79441346