LNMP 环境搭建

搭建LNMP环境主要是为了练习PHP用,也是为了以后搭建自己的个人网站做准备。

首先,我的环境是CentOS 7.0.1406,内核3.10.0-123.el7.x86_64,Nginx 1.10.1, Mysql 5.7.13, PHP 7.0.8。

参考文章:

(1)http://www.lnmp.cn/installing-php7-mysql57-nginx18-under-centos7.html

(2)http://www.osyunwei.com/archives/2353.html

(3)http://5323197.blog.51cto.com/5313197/1295151

(4)http://nginx.org/en/docs/configure.html

(5)http://dev.mysql.com/doc/refman/5.7/en/linux-installation-rpm.html

一、安装nginx

1.   更新nginx源

 (1) CentOS 中的yum库默认情况下没有提供nginx源,从nginx官网下载更新yum库的软件包,安装。

wget  http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

rpm  -ivh   nginx-release-centos-7-0.el7.ngx.noarch.rpm

   (2)然后从官网下载GPG数字签名(这步可以省略,在此记录仅仅是为了学习怎样使用GPG签名)

wget   http://nginx.org/keys/nginx_signing.key

        导入该GPG数字签名文件:

rpmkeys --import nginx_signing.key

         再修改/etc/yum.repos.d/nginx.repo文件中下面这一项:

         gpgcheck=1

   (4)这样以后使用nginx.repo这个yum库来安装软件时就会检查软件的GPG签名了。刚刚下载的那个用于更新yum库的软件包,也可以使用下面的命令来检查它的GPG签名:

rpmkeys -K nginx-release-centos-7-0.el7.ngx.noarch.rpm 

2.  安装

(1)使用yum  install  nginx发现最新版本是1.6.3,所以从官网下载最新稳定版1.10.1。

    在安装nginx之前,先安装一些依赖库。直接用yum安装这三个基础库:pcre,openssl,zlib。

  获取源码:

wget http://nginx.org/download/nginx-1.10.1.tar.gz

    解压缩,然后就是源码编译安装(configure;make;make install)nginx。编译选项参考http://nginx.org/en/docs/configure.html,如果有错误,根据编译错误提示来操作。

      检测安装是否成功,在安装目录找到执行文件,运行。用 ps aux | grep nginx 查看服务是否运行。

      配置nginx服务管理。

  vim /usr/lib/systemd/system/nginx.service

     输入以下内容:

[Unit]

Description=nginx - high performance web server 

Documentation=http://nginx.org/en/docs/

After=network.target remote-fs.target nss-lookup.target

[Service]

Type=forking

PIDFile=/var/run/nginx.pid

ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf

ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf

ExecReload=/bin/kill -s HUP $MAINPID

ExecStop=/bin/kill -s QUIT $MAINPID

PrivateTmp=true

    (注意:上面配置文件中的nginx.pid文件,nginx可执行文件和nginx.conf配置文件的路径要修改成自己安装时候设置的路径)

(2)开启开机启动

  systemctl enable nginx.service

      接着就可以用systemctl来管理nginx服务了(start,stop,reload,status,restart等命令)

      启动nginx服务后,在浏览器中输入服务器地址来验证是否成功。看到以下显示,说明nginx服务运行正常。

二、安装mysql 

1.  到官网下载mysql CentOS7 系列的社区版rpm包,用rpm命令安装需要的组件(查看官网的安装说明)

2.  配置文件在/etc/my.cnf, 注意文件中的socket=/var/lib/mysql/mysql.sock在后面的配置中要用到。

3.  因为是rpm安装的,所以默认就可以使用systemctl来管理服务(service命令不能用),启动数据库服务,查看状态,看是否正常启动。

4.  MySQL 5.7 和之前版本很大区别是在安装后会自动为 root@localhost 用户设置一个随机初始密码,之前的版本密码为空的。

     使用下面的命令从日志文件中获取这个随机的密码。

grep 'temporary password' /var/log/mysqld.log

     登录服务器,修改root密码。

ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpasswd' 

  (注意密码的要求很严格至少要有小写字母,大写字符,数字,特殊字符,超过8位)。

 

三、安装PHP

PHP 7 在2015年年底推出,PHP官方说的比 PHP 5 快2倍,就为这个,这个鲜必须尝。不过有个很值得注意的地方是,虽然 PHP 7 增加了不少新特性,但也很多地方是向后不兼容的,

例如 mysql 扩展,在 PHP 7 中已经被删除。 这些向后不兼容导致很多程序在 PHP 7 中运行不了,例如 Discuz。但其实也不需要特别担心,因为我们可以在同一服务器上安装多个版本的 PHP。

安装步骤如下:

  下载源码到  /usr/local/src

cd /usr/local/src

wget -c http://cn2.php.net/distributions/php-7.0.8.tar.gz

  解压缩,然后进入目录:

tar -zxvf php-7.0.5.tar.gz

cd php-7.0.5/

  安装之前要先安装那些准备装的扩展要用到的软件模块

yum -y install libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel curl curl-devel openssl openssl-devel

   configure:

./configure --prefix=/usr/local/php7 --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-mysqli --with-zlib --with-curl --with-gd --with-jpeg-dir

--with-png-dir --with-freetype-dir --with-openssl --enable-mbstring --enable-xml --enable-session --enable-ftp --enable-pdo -enable-tokenizer --enable-zip

  上面已经提到,PHP 7 已经删除了 MySQL 扩展,所以 -with-mysql 不再是一个有效的选项。这里用 MySQLi 或 PDO 代替。

  make;make install;

make(这里会等待较长一段时间)

make install

四、配置

   配置之前,先说明一下nginx运行用户,php-fpm运行用户,mysql运行用户的关系。参考http://www.ilanni.com/?p=7438

  1.说明

  Nginx本身不能处理PHP,它只是个web服务器。当接收到客户端请求后,如果是php请求,则转发给php解释器处理,并把结果返回给客户端。如果是静态页面的话,nginx自身处理,然后把结果返回给客户端。

      Nginx下php解释器使用最多的就是fastcgi。一般情况nginx把php请求转发给fastcgi管理进程处理,fastcgi管理进程选择cgi子进程进行处理,然后把处理结果返回给nginx。

  在这个过程中就牵涉到两个用户,一个是nginx运行的用户,一个是php-fpm运行的用户。如果访问的是一个静态文件的话,则只需要nginx运行的用户对文件具有读权限或者读写权限。

  而如果访问的是一个php文件的话,则首先需要nginx运行的用户对文件有读取权限,读取到文件后发现是一个php文件,则转发给php-fpm,此时则需要php-fpm用户对文件具有有读权限或者读写权限。

  2.操作

  用ps aux | grep nginx查看nginx的运行用户,可知,与配置文件nginx.conf中配置一致(不配置默认是nobody这个用户)

  用ps aux |grep php-fpm查看php-fpm的运行用户,与其对应的配置文件是www.conf。

  我们现在需要做的就是统一nginx与php-fpm运行用户为nobody(通过以上两个配置文件,注意修改完后要重启php-fpm服务,重新加载nginx配置文件),然后把nginx的虚拟主机网站根目录对nobody用户及nobody用户组具有所有权限。

  3.经验

  在实际生产环境中,我们一般的配置是nginx与php-fpm都运行在nobody用户下,而且网站的根目录也要属于nobody用户,并且根目录对nobody用户具有所有权限。

  这样配置是最安全的,因为nobody用户最安全。即使黑客攻破了网站,但是也不能登录系统。

  4.php配置

  先是 PHP 的配置文档

[root@lnmp php-7.0.8]# cp php.ini-development /usr/local/php7/lib/php.ini

  php.ini 路径应该放在 PREFIX/lib 文件夹,除非在安装的时候通过这个选项修改

--with-config-file-path=PATH

  如果安装 PHP 时没有指明 --prefix ,那么就 php.ini 路径就是 /usr/local/lib/php.ini 。刚才安装时有指明 --prefix ,所以是 /usr/local/php7/lib/php.ini。

  然后根据实际自己需要修改 php.ini。

[root@lnmp ~]# vim /usr/local/php7/lib/php.ini

  查找 mysqli.default_socket,修改成:

mysqli.default_socket = /var/lib/mysql/mysql.sock

  其中 /var/lib/mysql/mysql.sock 就是上面安装 MySQL 时提到的。这个值必须填,否则会出现如下错误:
  Warning: mysqli_connect(): (HY000/2002): No such file or directory

  修改时区,查找 date.timezone,改成(主要将前面的 ; 去掉,这个是注释用的):

date.timezone = PRC

  好了,PHP 7 已经安装好,下面验证一下

[root@lnmp php-7.0.8]# /usr/local/php7/bin/php -v

PHP 7.0.8 (cli) (built: Jul 10 2016 06:59:19) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies

  再查看下已经安装的模块

[root@lnmp php-7.0.8]# /usr/local/php7/bin/php -m
[PHP Modules]
Core
ctype
curl
date
dom
fileinfo
filter
ftp
gd
hash
iconv
json
libxml
mbstring
mysqli
mysqlnd
openssl
pcre
PDO
pdo_sqlite
Phar
posix
Reflection
session
SimpleXML
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
zip
zlib
[Zend Modules]

  5.配置 php-fpm

  copy php-fpm 的配置文档

[root@lnmp php-7.0.8]# cp /usr/local/php7/etc/php-fpm.conf.default /usr/local/php7/etc/php-fpm.conf
[root@lnmp php-7.0.8]# cp /usr/local/php7/etc/php-fpm.d/www.conf.default /usr/local/php7/etc/php-fpm.d/www.conf

  其中 www.conf 中要留意以下这个值

listen = 127.0.0.1:9000

  这里使用 9000 端口,这个选项在配置 Nginx 网站时要用到的。

  配置 php-fpm 启动服务脚本

[root@lnmp php-7.0.8]# cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/

  修改启动脚本,把里边 prefix 相关的内容用实际路径代替

[root@lnmp php-7.0.8]# vim /usr/lib/systemd/system/php-fpm.service

  将

PIDFile=${prefix}/var/run/php-fpm.pid
ExecStart=${exec_prefix}/sbin/php-fpm --nodaemonize --fpm-config ${prefix}/etc/php-fpm.conf

  修改成

PIDFile=/usr/local/php7/var/run/php-fpm.pid
ExecStart=/usr/local/php7/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php7/etc/php-fpm.conf

  重新载入 systemd

[root@lnmp php-7.0.8]# systemctl daemon-reload

  让 php-fpm 随机启动

[root@lnmp php-7.0.8]# systemctl enable php-fpm
ln -s '/usr/lib/systemd/system/php-fpm.service' '/etc/systemd/system/multi-user.target.wants/php-fpm.service'

  立即启动 php-fpm

[root@lnmp php-7.0.8]# systemctl start php-fpm

  查看状态

[root@lnmp php-7.0.5]# systemctl status php-fpm
php-fpm.service - The PHP FastCGI Process Manager
   Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled)
   Active: active (running) since Fri 2016-04-08 00:50:54 CST; 3s ago
 Main PID: 13609 (php-fpm)
   CGroup: /system.slice/php-fpm.service
           ├─13609 php-fpm: master process (/usr/local/php7/etc/php-fpm.conf)
           ├─13610 php-fpm: pool www
           └─13611 php-fpm: pool www
Apr 08 00:50:54 lnmp.cn systemd[1]: Started The PHP FastCGI Process Manager.

  php-fpm 已经成功启动。

  6. 配置nginx.conf

  (1)index index.php index.html index.htm;   #增加index.php

  (2)取消FastCGI server部分location的注释,并要注意fastcgi_param行的参数,改为$document_root$fastcgi_script_name,或者使用绝对路径

  7.测试

   进入nginx默认网站根目录(参考:/usr/local/nginx/html)

   vi  index.php   #新建index.php文件

   输入

   <?php
        phpinfo();

   :wq! #保存

   chown nobody:nobody /usr/share/nginx/html/ -R  #设置目录所有者

   在客户端浏览器输入服务器IP地址,可以看到相关的配置信息!

  

   配置成功。

  8.配置网站(还有疑问。。。)

  先建立一个 lnmp 站点,路径是 /www/lnmp/web

[root@lnmp php-7.0.8]# mkdir -p /www/lnmp/web

  并准备好 phpinfo 测试文件

[root@lnmp php-7.0.8]# vim /www/lnmp/web/phpinfo.php

  输入如下内容保存:

<?php
phpinfo();

  每个站点建一个 Nginx 配置文件放到 /usr/local/nginx/conf/ 中

[root@lnmp php-7.0.8]# cd /usr/local/nginx/conf/
[root@lnmp conf]# vim myphp.com.conf

  在 myphp.com.conf 中加入以下内容然后保存

server {
    listen       80;
    server_name  www.myphp.com;
    root         /www/lnmp/web;
    location / {
        index  index.php index.html index.htm;
    }
    location ~ .php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

  其中 server_name  www.myphp.com; 中的 www.myphp.com 改成你自己的域名
  其中 root   /www/lnmp/web; 就是刚才创建的站点目录
  其中 fastcgi_pass   127.0.0.1:9000; 就是上面配置 php-fpm 提到要留意的值

  修改配置后一定要记得 reload nginx 才能生效

[root@lnmp conf]# systemctl reload nginx

  好了,大功告成,就打开刚才的域名验证下(前提是域名已经指向配置好的服务器 IP: 在windows上的hosts文件设置域名映射到服务器ip)

  浏览器输入:http://www.myphp.com/phpinfo.php看是否能获得7中测试的配置信息网页。

原文地址:https://www.cnblogs.com/programmer-wfq/p/5657917.html