zoukankan      html  css  js  c++  java
  • 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中测试的配置信息网页。

  • 相关阅读:
    Java8 Lambda表达式实战之方法引用(一)
    Lambda表达式的语法与如何使用Lambda表达式
    最后一个元素放到第一个,其他元素向后移动一位
    java8lambda表达式初识
    通过反射获取类上的注解
    注解之注解的属性
    java元注解(注解在注解上的注解)
    反射的应用场景
    通过反射获取对象的构造器
    20199324 2019-2020-2 《网络攻防实践》第1周作业
  • 原文地址:https://www.cnblogs.com/programmer-wfq/p/5657917.html
Copyright © 2011-2022 走看看