一直以来我都经过网上的一些材料去搭建lnmp环境,经过直接yum安装nginx mysql php等软件。可是为了原生态的编译安装最新的软件版本,我决定本身亲手搭建lnmp环境,采用最新的nginx1.9.7(昨天出了1.9.8)和php7来研究如何搭建起nginx最新版本和php7的环境。php
在linux使用make方式安装,须要保证linux已经具有比较OK的编译环境,例如gcc等编译工具。通常而言,服务器提供商在安装的系统中已经默认集成了这些软件,可是为了保险起见,咱们仍是经过一些较为基础的方式,把这些依赖包都跑一遍,以防在以后的编译中出差错。html
$ yum -y install gcc gcc-c++ autoconf automake libtool make cmake $ yum -y install zlib zlib-devel openssl openssl-devel pcre-devel
zlib: 为nginx提供gzip模块,须要zlib库支持mysql
openssl: 为nginx提供ssl功能linux
pcre: 为支持地址重写rewrite功能nginx
确保pcre已正确安装c++
在上面的基础环境安装中,咱们已经yum安装了pcre,可是部分服务器上并无pcre的安装包,因此咱们能够经过下载tar包自行编译安装pcre。sql
搜索pcre,进入其官网,找到最新的版本,复制tar.gz的下载链接,执行以下操做:数据库
$ wget http://pcre/xxx/xxx/xxx最新版xxx.tar.gz $ tar zxvf xxxx.tar.gz $ cd xxxx $ ./configure $ make install
这样就能够保证安装pcre了。apache
咱们建立一个新的用户和用户组来运行nginx,这样能够把nginx和root分开,保证nginx不具有root权限。可是,咱们并不但愿nginx成为一个真实的能够登录到远程进行操做的用户,因此,咱们并不给它建立家目录,在useradd的时候,用-M参数:后端
$ groupadd nginx $ useradd -g nginx -M nginx
-g参数为nginx用户指定了一个组。-M参数保证其不自动生成home目录。
但经过上面的用户建立以后,nginx用户能够经过设置一个密码登录到服务器,这个不是咱们想要的,咱们禁用它的ssh登录权限.禁止用户登录也很方便,只须要修改配置文件中有关用户和用户组的信息便可。
$ vi /etc/passwd
找到nginx,将后面的/bin/bash
改成/sbin/nologin
便可。
OK,用户处理完毕。
前面讲了这么多,都尚未说到重点,接下来咱们来编译安装nginx。先进入nginx的官方网站,找到最新版本的tar.gz包的连接,复制连接,而后执行下面的动做:
$ wget http://xxxxxxxxxx/nginx1.7.x.tar.gz $ tar zxvf nginx1.7.x.tar.gz $ cd nginx1.7.x
接下来咱们须要执行./configure,不一样的开发者有不一样的习惯,对于刚入门的用户而言,不是很喜欢麻烦的去进行配置,老是但愿默认就是最好的,可是实际状况刚好相反,走上linux的道,就请热爱折腾,既然选择编译安装,就请热爱make。
我但愿把软件安装在/user/local下面,一个软件一个目录,在之后卸载的时候也比较方便清理。软件的目录也按照linux的目录形式,用conf、etc、sbin、run等进行归类管理,因此,我最终的./configure配置以下:
$ ./configure --prefix=/usr/local/nginx \ --pid-path=/usr/local/nginx/run/nginx.pid \ --with-http_ssl_module \ --user=nginx \ --group=nginx \ --with-pcre \ --without-mail_pop3_module \ --without-mail_imap_module \ --without-mail_smtp_module
末尾三个是禁用nginx做为邮件代理服务器,我通常只用服务器做为网站或数据库的服务器,因此这里把它们禁用掉,你若是想搭建的是邮件服务器,那么就应该去阅读nginx搭建邮件服务器的教程。
你能够认真阅读一下./configure的结果,看看有没有报错,或者加载的模块是否是都齐全,若是一切OK,那么往下继续,若是感受不对,能够用./configure --help认真阅读一下。
$ make $ make install
make的地方有一个小技巧,若是服务器是双核,能够经过-j2来指定用双核进行编译,-j4表明4核编译。
安装到这里就结束了,可是,安装完可没完事儿,nginx尚未运行起来,你能够先去看看安装的结果,而且运行nginx服务器:
$ cd /usr/local/nginx $ ls $ sbin/nginx
这样就运行起来了,访问你的服务器ip,看看可否看到ngin的欢迎页面吧。(不要让其余软件占用80端口哦)默认状况下网页文件放在/usr/local/nginx/html下,不符合咱们的使用习惯,这个须要修改nginx的配置文件来修改,不过即便不修改,咱们也是能够正常使用的,咱们就不详细解释nginx的配置了。
可是,make编译安装的软件,可不像yum安装的服务,咱们熟悉的service命令并不起效,否则你用service nginx restart试试看。这是由于service调用/etc/ini.d/目录下的程序完成,而该目录下并不存在nginx这个程序。那么这个时候怎么重启nginx呢?以下操做:
$ /usr/local/nginx/sbin/nginx -s reload
这个操做能够从新加载nginx的配置文件,至关于重启(当配置文件出错时,不会重启)。若是必定要重启整个服务,那只能经过杀死nginx进程,而后在运行程序了。
不过为了使用咱们熟悉的service操做,这里提供一个程序,放到/etc/ini.d/目录下,并执行:
$ chmod +x /etc/init.d/nginx $ chkconfig --add nginx $ chkconfig nginx on
这样就能够经过service nginx restart等方法来操做nginx了。你能够把程序下载下来,简单研究一下,若是你的nginx安装路径和个人不一样,还要修改程序开头的变量设置。
惯例是先解决一些编译的依赖包
$ yum -y install libxml2 libxml2-devel openssl openssl-devel curl-devel libjpeg-devel libpng-devel freetype-devel libmcrypt-devel
在《lamp升级php至php7》一文中,我谈到了如何在apache的服务器环境中升级php到7,而到nginx环境下,咱们再也不使用php的apxs模块,而是直接使用php-fpm模块。接下来,咱们来尝试编译安装php7。
先从官方网站下载php7,而且解压,因为上面这篇文章已经有了相关步骤,就不作过多详解:
$ wget http://am1.php.net/get/php-7.0.0.tar.gz/from/this/mirror $ tar zvxf php-7.0.0.tar.gz $ cd php-7.0.0
接下来要进行编译前的配置,和上面一篇文章不一样,咱们不提供apxs参数,相反,咱们提供php-fpm相关参数:
$ ./configure --prefix=/usr/local/php7 \ --with-config-file-path=/usr/local/php7/etc \ --with-config-file-scan-dir=/usr/local/php7/etc/php.d \ --with-mcrypt=/usr/include \ --enable-mysqlnd \ --with-mysqli \ --with-pdo-mysql \ --enable-fpm \ --with-fpm-user=nginx \ --with-fpm-group=nginx \ --with-gd \ --with-iconv \ --with-zlib \ --enable-xml \ --enable-shmop \ --enable-sysvsem \ --enable-inline-optimization \ --enable-mbregex \ --enable-mbstring \ --enable-ftp \ --enable-gd-native-ttf \ --with-openssl \ --enable-pcntl \ --enable-sockets \ --with-xmlrpc \ --enable-zip \ --enable-soap \ --without-pear \ --with-gettext \ --enable-session \ --with-curl \ --with-jpeg-dir \ --with-freetype-dir \ --enable-opcache
配置无误后执行:
$ make $ make install
一样可使用-j2哦。若是安装成功,OK,那么php7的安装就OK了。
默认安装好以后,你会发现/usr/local/php7/etc下面没有php.ini文件,这个去哪里要呢?在php7的源码安装包都有。
$ cd /usr/src/php-7.0.0/ $ ls
能够看到有两个php.ini-xxx文件,咱们能够分别vi打开来看下,一个是产品模式,一个是开发模式。
$ cp php.ini-production /usr/local/php7/etc/php.ini $ vi /usr/local/php7/etc/php.ini
能够看到php的配置。本文就不作过多的配置解释了。
上面咱们在编译php7的时候,已经将fpm模块编译了,那么接下来,咱们要启用php-fpm。可是默认状况下它的配置文件和服务都没有启用,因此要咱们本身来搞定。
搞定配置文件:
$ cd /usr/local/php7/etc $ mv php-fpm.conf.default php-fpm.conf $ mv php-fpm.d/www.conf.default php-fpm.d/www.conf
php-fpm的具体配置咱们也不作深刻去详解,由于在编译以前./configure的时候,咱们都已经肯定了一些配置,好比运行fpm的用户和用户组之类的,因此默认配置应该不会存在路径问题和权限问题。
搞定php-fpm的服务载入:
就像上面的nginx同样,咱们但愿使用service php-fpm start|stop|restart这些操做来实现服务的重启,但没有像nginx那么复杂,php编译好以后,给咱们提供了一个php-fpm的程序,不须要我再编写分享了。这个文件放在php编译源码目录中:
$ cd /usr/src/php-7.0.0/sapi/fpm $ ls $ cp init.d.php-fpm /etc/init.d/php-fpm $ chmod +x /etc/init.d/php-fpm $ chkconfig --add php-fpm $ chkconfig php-fpm on
经过上面这个操做,咱们就可使用sevice php-fpm start
来启用php-fpm了。用ps -ef | grep php-fpm
看看进程吧。
经过上面的操做,nginx和php-fpm服务都被咱们跑起来了,可是php-fpm走的是127.0.0.1:9000,外网是没法访问的,并且咱们也不可能直接经过php-fpm给外网提供服务,咱们用nginx去代理9000端口执行php。
实际上这个过程只须要对nginx进行配置便可,fpm已经在后台运行了,咱们须要在nginx的配置文件中增长代理的规则,便可让用户在访问80端口,请求php的时候,交由后端的fpm去执行,并返回结果。
$ vi /usr/local/nginx/conf/nginx.conf
若是你大体了解过nginx的配置,应该可以很快分辨出这个配置文件里面的结构,而且知道server表明一个虚拟主机,要增长虚拟主机就再增长一个server,并且这个conf文件中也给出了例子。那么怎么代理php-fpm呢?找到:
#location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /script$fastcgi_script_name; # include fastcgi_params; #}
把前面的#注释符号去掉,把script改成$document_root最终以下:
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; }
这样就OK了,从新载入nginx配置便可
$ service nginx reload
而后到/usr/local/nginx/html去写一个php文档,进行测试吧。
若是你的程序可以正常运行起来,用ip做为外网访问地址访问成功,那么恭喜你,本篇文章的目的就达到了。