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 ;
server_name localhost;
location / {
root /usr/share/nginx/html; #填写项目的根目录
index index.php index.html index.htm;
}
error_page /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.-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:
简单的翻译下就是没有找到 mysql 驱动。。。开始看见这个报错的时候我是一脸蒙蔽。。什么驱动?不是有pdo就可以了吗??? 图样图森破啊,普及下mysql驱动的事情
php中内置的mysql数据库连接驱动mysqlnd简介及mysqlnd的配置安装方式
这里主要包括 mysqlnd 和 libmysql 两种驱动但是我们选择第一种,什么?你问为什么?简单啊!按照惯例执行
sudo apt-get install php-mysqlnd
再来看下刚才的页面

好啦。到这里我们的lnmp环境就搭建完啦。全程只是用了apt-get 这个工具,是不是很爽~~

当然这只是适用于搭建简单的lnmp环境如何需要编译其他模块还是建议使用编译安装的方式,找个时间将编译安装的的各个细节再研究下~~~,生命不息学习不止!
lnmp环境快速搭建及原理解析的更多相关文章
- Linux:LNMP环境的搭建
LNMP环境的搭建 安装DNS服务器 安装DNS服务 yum install bind -y DNS的配置 创建正向解析 以创建一个名为"lsy.com"的正向查找区域为例: 第一 ...
- Java Web 开发环境快速搭建
Java Web 开发环境快速搭建 在因某种原因更换开发设备后,可依据此文快速搭建开发环境,恢复工作环境. Java开发环境: Windows 10 (64-bit) Oralce JDK Eclip ...
- JAVA学习:maven开发环境快速搭建
转自:http://tech.it168.com/a2011/1204/1283/000001283307.shtml 最近,开发中要用到maven,所以对maven进行了简单的学习.因为有个mave ...
- [Linux] PHP程序员玩转Linux系列-lnmp环境的搭建
1.PHP程序员玩转Linux系列-怎么安装使用CentOS 在平常的工作中,我作为PHP程序员经常要搭建一下环境,这个环境就是Linux系统下安装nginx,php,mysql这三个软件,对软件进行 ...
- maven环境快速搭建(转)
出处:http://www.cnblogs.com/fnng/archive/2011/12/02/2272610.html 最近,开发中要用到maven,所以对maven进行了简单的学习.因为有个m ...
- LNMP环境下搭建SVN服务
最近自己买了个服务器,试着在上面搭建了LNMP环境,因为以前在本地用MAMP Pro搭建过LAMP环境,所以基本上还算是轻车熟路,第一次搭建LNMP,使用的是一键安装,过程是顺利的,后来在使用过程中遇 ...
- 记一次“愉快”的lnmp环境的搭建
愉快的lnmp环境搭建 后续更新 几个笔记记录 yum remove php-mysql yum -y install cmake autoconf wget gcc-c++ gcc zlib pcr ...
- windows Android开发环境快速搭建和部署
windows安装Android的开发环境相对来说比较简单,本文写给第一次想在自己Windows上建立Android开发环境的朋友们,为了确保大家能顺利完成开发环境的搭建,文章写的尽量详细,希望对初级 ...
- hadoop伪分布环境快速搭建
1.首先下载一个完成已经进行简单配置好的镜像文件(hadoop,HBASE,eclipse,jdk环境已经搭建好,tomcat为7.0版本,建议更改为tomcat8.5版本,运行比较稳定). 2安装V ...
随机推荐
- debian源配置实例
debian9 官方源: deb http://ftp.debian.org/debian stretch main contribdeb http://ftp.debian.org/debian s ...
- 【算法编程 C++ Python】根据前序遍历、中序遍历重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...
- 【软工实践】Beta冲刺(5/5)
链接部分 队名:女生都队 组长博客: 博客链接 作业博客:博客链接 小组内容 恩泽(组长) 过去两天完成了哪些任务 描述 将数据分析以可视化形式展示出来 新增数据分析展示等功能API 服务器后端部署, ...
- 方法名同类名相同如果没有__construct,会被当做构造函数。
简介本文主要罗列些例子,看看当php类名和函数名重名时,php是如何处理的例子<?php class TestObject{ public $subject; private $message ...
- PostgreSQL体系架构与内存结构
PostgreSQL体系架构 PostgreSQL的内存结构
- mongodb配置“主从”模式
版本的mongodb不支持Master/slave模式了.推荐使用集群模式.大家都知道,集群模式需要多于三台的奇数台机器(奇数个进程测试有意义,实际意义不大)现在我的手头有两台主机,更合理的配置个人觉 ...
- openresty开发系列33--openresty执行流程之2重写赋值阶段
openresty开发系列33--openresty执行流程之2重写赋值阶段 一)重写赋值阶段 1)set_by_lua 语法:set_by_lua $res <lua-script-str&g ...
- linux升级python到2.7版本
linux的python安装包默认版本是2.6.6,yum程序默认也是依赖这个版本的python包的,但是其他一些程序如nodejs,却要的是2.7版本,因此必须要考虑升级后与yum的兼容问题.两步走 ...
- Zookeeper 安装与简单使用
一.安装Zookeeper 其实Zookeeper的安装特别简单,也不能算安装了,只需要将Zookeeper下载后解压,就完成了安装操作. 下载地址:http://zookeeper.apache.o ...
- Qt编写安防视频监控系统13-视频存储
一.前言 一般视频监控行业都会选择把视频存储在本地NVR或者服务器上,而不是存储在客户端电脑,只有当用户经费预算有限的时候,或者用户特殊需求要求存储在本地客户端电脑的时候才会开启存储到本地,正常来说视 ...