lnmp环境快速搭建及原理解析
刚开始学习php的时候是在wamp环境下开发的,后来才接触到 lnmp 环境当时安装lnmp是按照一大长篇文档一步步的编译安装,当时是真不知道是在做什么啊!脑袋一片空白~~,只知道按照那么长的一篇文档一步步的来做就能实现lnmp的搭建。最近工作闲暇之余又想起来了这个悲惨的事情,然后我就想能不能不看文档就把lnmp环境搭建起来呢(当然我知道有一键安装脚本这个东东,我们暂时把它忽略因为它真的是太简单啦)?当时我的想法是反正 l(linux)+ n(nginx)+ m(mysql)+ p(php)设计到的东西也就这四种,那我使用 apt-get (ubuntu 系统为例)直接安装不就好啦,至于每个软件之间的通讯那就再另想办法了,无非是通过什么配置或者驱动什么的连接起来的,于是我变开始了我的折腾之旅。。。。
所谓实践是要以理论来做基础的,先上一张我自己理解的图镇楼
原理嘛就在楼上我觉得我画的还是挺通俗易懂的~~
在lnmp中关键性的就两点:
1.nginx接收客户端发来的请求后找到对应的执行脚本文件再用php-fpm来解释执行脚本文件并将结果返回给客户端
2.php通过php扩展pdo、mysql、或者mysqli来操作mysql数据库实现对数据的存储
只要将以上两点能够实现那么基础的lnmp环境也就搭建好啦!
应广大网友的要求下面我要开始我的表演啦,啊不,是研究~~
首先交代下环境 腾讯云服务器(ubuntu 16.4 系统) 这样的话lnmp中的 l 就有啦
接下来将 nginx 、mysql 、php先安装好。依次执行如下命令
sudo apt-get update
sudo apt-get install nginx
sudo apt-get install php
sudo apt-get install mysql-server
安装好后如图:
下面我们先实现下 nginx 和 php的通讯,这里我们先要明确下nginx的配置文件在什么地方,这里可以使用以下命令找一下
sudo find / -name nginx.conf
找到文件 /etc/nginx/nginx.conf 我们打开该文件修改下配置添加如下代码:
server {
listen 8200;
server_name localhost;
location / {
root /usr/share/nginx/html; #填写项目的根目录
index index.php index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~ .php$ {
root /usr/share/nginx/html; #填写项目的根目录
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
访问 8200 端口会看到nginx的经典页面,但是这时我们访问的是静态页面也就是html页面而不是PHP页面。不过配置中已经将php的相关配置写好啦,我们先将 nginx与php之间通讯需要使用的php-fpm安装上之后再讲如何配置。 这里还是使用 apt-get 工具
sudo apt-get install php-fpm
安装好之后找到 php-fpm的配置文件 "/etc/php/7.0/fpm/pool.d/www.conf" ,打开该文件我们会看到这条语句
listen = /run/php/php7.0-fpm.sock
这里监听的 listen 值 与 nginx.conf 中 fastcgi_pass 的值是相对应的
www.conf(php-fpm) 中的listen值 |
nginx.conf 中的fastcgi_pass |
---|---|
/run/php/php7.0-fpm.sock |
unix:/run/php/php7.0-fpm.sock |
9000 |
127.0.0.1:9000 |
这里我们使用第一种方式 并且编写一个php文件查看是否配置成功(不要忘了执行php7.0-fpm将php-fpm运行起来),如图所示,说明我们现在将第一个问题解决啦实现了php与nginx之间的通讯
开始解决第二个问题:如何将php 与 mysql通讯这里我们使用 php_pdo这个扩展实现操作数据库,在上面的截图我们可以看到已经安装了php扩展,那么我们来写一个pdo连接的程序来测试下;
<?php
//连接数据库
$dsn="mysql:dbname=mysql;host=127.0.0.1";
//数据库的用户名
$user="root";
//数据库的密码
$password="123456";
//生成PDO对象
$object = new PDO($dsn,$user,$password);
//执行添加
$sql="select * from user";
$result = $object->query($sql);
echo "一共从表中获取到".$result->rowCount()." 条记录:<br>";
foreach($result as $row){
echo $row['User']."<br>";
}
然后直接访问 8200 接口,然后。。。。崩溃啦,返回500错误,我们看下nginx的报错日志
PHP message: PHP Fatal error: Uncaught PDOException: could not find driver in /usr/share/nginx/html/index.php:9
简单的翻译下就是没有找到 mysql 驱动。。。开始看见这个报错的时候我是一脸蒙蔽。。什么驱动?不是有pdo就可以了吗??? 图样图森破啊,普及下mysql驱动的事情
php中内置的mysql数据库连接驱动mysqlnd简介及mysqlnd的配置安装方式
这里主要包括 mysqlnd 和 libmysql 两种驱动但是我们选择第一种,什么?你问为什么?简单啊!按照惯例执行
sudo apt-get install php-mysqlnd
再来看下刚才的页面
好啦。到这里我们的lnmp环境就搭建完啦。全程只是用了apt-get 这个工具,是不是很爽~~
当然这只是适用于搭建简单的lnmp环境如何需要编译其他模块还是建议使用编译安装的方式,找个时间将编译安装的的各个细节再研究下~~~,生命不息学习不止!
- 漏洞预警 | Ubuntu 16.04版本存在本地提权漏洞(附EXP)
- 通过“震网三代”和Siemens PLC 0day漏洞,实现对工控系统的入侵实验
- 安卓端渗透工具DVHMA:自带漏洞的混合模式APP
- 小萝莉说Crash(二): Unrecognized selector xxx 之 ForwardInvocation
- 5分钟教程:如何通过UART获得root权限
- 源码级剖析PHP 7.2.x GD拒绝服务漏洞
- 美女程序媛发福利,读懂ANR的trace文件So easy
- Openshift高阶探索实验
- 卡卡卡!小萝莉告诉你开发iOS应用如何避免卡顿
- Bugly即将支持的ANR,精神哥告诉你是个什么鬼?
- Go语言Goroutine与Channel内存模型
- 手把手教 | 深度学习库PyTorch(附代码)
- 如何定位Obj-C野指针随机Crash(一):先提高野指针Crash率
- 如何定位Obj-C野指针随机Crash(二):让非必现Crash变成必现
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 还在为 520 发愁吗?教你用 Python 写个表白神器!
- 用 Python 实现微信自动回复
- 一行命令给猎狐 F4 带口罩 & 检测是否带口罩
- 备战 618,用 Python 领取京东优惠券
- 一键生成你的微信社交数据报告
- 分析OutOfMemoryError异常
- 用 Python 制作关不掉的端午安康弹窗
- 使用JFR分析性能问题
- MyISAM 迁移至 InnoDB方案
- 解决Seafile局域网访问失败
- 一键解锁网易云音乐变灰歌曲
- 彻底理解 IO多路复用
- 分享Apache环境禁止目录浏览的方法
- DB2 Linux平台安装 Part 1 Linux环境配置
- DB2 Linux平台安装 Part 2 单机版软件安装