命令记不住

登陆

搭建 LNMP 网站

搭建LNMP网站

1.LNMP架构概述

LNMP就是Linux+Nginx+MySQL+PHP,Linux作为服务器的操作系统,Nginx作为Web服务器、PHP作为解析动态脚本语言、MySQL即为数据库。

  • Linux作为服务器的操作系统。
  • Nginx作为WebServer服务器。
  • PHP 作为动态解析服务(php)。
  • MySQL作为后端存储数据库服务。

Nginx服务本身不能处理PHP的请求,那么当用户发起PHP动态请求, Nginx又是如何进行处理的。

用户-->http协议-->Nginx-->fastcgi协议-->php-fpm
注意: fatcgi是nginx连接php-fpm之间的协议。

Nginx与Fast-CGI详细工作流程如下:

1.用户通过http协议发起请求,请求会先抵达LNMP架构中的Nginx
2.Nginx会根据用户的请求进行判断,这个判断是有Location进行完成
3.判断用户请求的是静态页面,Nginx直接进行处理
4.判断用户请求的是动态页面,Nginx会将该请求交给fastcgi协议下发
5.fastgi会将请求交给php-fpm管理进程, php-fpm管理进程接收到后会调用具体的工作线程warrap
6.warrap线程会调用php进行解析,如果只是解析代码php直接返回
7.如果有查询数据库操作,则由php连接数据库(用户 密码 IP)然后发起查询的操作
8.最终数据由mysql->php->php-fpm->fastcgi->nginx->http->user

2.安装LNMP架构

1) 使用官方仓库安装Nginx

[root@nginx ~]# cat /etc/yum.repos.d/nginx.repo 
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

2) 安装Nginx 并启动Nginx 加入开机自启

[root@nginx ~]# yum install nginx -y
[root@nginx ~]# systemctl start nginx
[root@nginx ~]# systemctl enable nginx

3) 使用第三方扩展源安装php7.1

[root@nginx ~]# yum remove php-mysql-5.4 php php-fpm php-common
[root@nginx ~]# rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
[root@nginx ~]# rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

[root@nginx ~]# yum -y install php71w php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache php71w-pecl-memcached php71w-pecl-redis php71w-pecl-mongodb

3) 配置php-fpm 启动php-fpm 并加入开机自启

[root@nginx ~]# sed -i '/^user/c user = www' /etc/php-fpm.d/www.conf 
[root@nginx ~]# sed -i '/^group/c group = www' /etc/php-fpm.d/www.conf

[root@nginx ~]# systemctl start php-fpm
[root@nginx ~]# systemctl enable php-fpm

4) 使用MySQL官方仓库安装MySQL5.7数据库

[root@nginx ~]# rpm -ivh http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/mysql57-community-release-el7-10.noarch.rpm
[root@nginx ~]# yum install mysql-community-server -y

5) 启动数据库, 并加入开机自动

[root@nginx ~]# systemctl start mysqld
[root@nginx ~]# systemctl enable mysqld

6) mysql5.7默认配置了密码, 需要提取temporary password中的密码, 登陆对应数据库

[root@nginx ~]# grep "temporary password" /var/log/mysqld.log
[root@nginx ~]# mysql -uroot -p$(awk '/temporary password/{print $NF}' /var/log/mysqld.log)

7) 重新初始化 MySQL 的密码

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Bgx123.com';

3.配置LNMP架构

1) 为了验证Nginx能否正常解析php动态请求, 需配置如下locaiton

[root@nginx ~]# cat /etc/nginx/conf.d/php.conf 
server {
        server_name www.bgx.com;
        listen 80;
        root /code;
        index index.php index.html;

        location ~ \.php$ {
            root /code;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
}

2) 新增.php后缀的文件名, 使用phpinfo函数测试php能否正常解析

[root@nginx ~]# cat /code/info.php
<?php
        phpinfo();
?>

3) 验证php是否能正常连接mysql数据库服务

[root@nginx ~]# cat /code/mysqli.php
       <?php
        $servername = "localhost";
        $username = "root";
        $password = "Bgx123.com";

        // 创建连接
        $conn = mysqli_connect($servername, $username, $password);

        // 检测连接
        if (!$conn) {
            die("Connection failed: " . mysqli_connect_error());
        }
        echo "php连接MySQL数据库成功";
        ?>

4) 通过浏览器访问info.php文件, 如能出现php相关的信息, 则表示nginx与php能正常工作
5) 访问mysqli.php验证php-mysqli模块是否正常工作

推荐阅读