一、LNMP应用平台概述

1.概述:LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。Mysql是一个小型关系型数据库管理系统。PHP是一种在服务器端执行的嵌入HTML文档的脚本语言。这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。

2.优势:稳定、高效、功能丰富、维护简易;

二、内部实现原理

1.处理http请求流程:

第一步:浏览器发送http request请求到服务器(Nginx),服务器响应并处理web请求,将一些静态资源(CSS,图片,视频等)保存服务器上。

第二步:将php脚本通过接口传输协议(网关协议)PHP-FCGI(fast-cgi)传输给PHP-FPM(进程管理程序),PHP-FPM不做处理,然后PHP-FPM调用PHP解析器进程,PHP解析器解析php脚本信息。PHP解析器进程可以启动多个,进行并发执行。

第三步:将解析后的脚本返回到PHP-FPM,PHP-FPM再通过fast-cgi的形式将脚本信息传送给Nginx。

第四步:服务器再通过Http response的形式传送给浏览器。浏览器再进行解析与渲染然后进行呈现。

2.Nginx + FastCGI实现:

Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过Fast-CGI接口来调用;

wrapper:为了调用CGI程序,还需要一个Fast-CGI的wrapper(wrapper可以理解为用于启动另一个程序的程序),这个wrapper绑定在某个固定socket上,如端口或者文件socket。当Nginx将CGI请求发送给这个socket的时候,通过Fast-CGI接口,wrapper接收到请求,然后Fork(派生)出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过Fast-CGI接口,沿着固定的socket传递给Nginx;最后,Nginx将返回的数据(html页面或者图片)发送给客户端。这就是Nginx+Fast-CGI的整个运作过程。

3.lamp与lnmp的区别:

Lamp:Apache一般是把PHP当做自己的一个模块来启动;

Lnmp:Ngnix则是把http请求变量转发给PHP进程,即PHP独立进程,与Nginx相独立;

三、案例:搭建LNMP并测试项目

案例环境:

系统类型

IP地址

主机名

所需软件

Centos 6.5

192.168.100.150

www.linuxfan.cn

nginx-1.6.2.tar.gz、

cmake-2.8.6.tar.gz、

mysql-5.5.22.tar.gz、

libmcrypt-2.5.8.tar.gz、

mhash-0.9.9.9.tar.gz、

mcrypt-2.6.8.tar.gz、

php-5.3.28.tar.gz、

SKYUC.v3.4.2.SOURCE.zip

案例步骤:

  • 安装并配置Nginx服务;
  • 安装mysql数据库服务;
  • 配置初始化mysql及其优化;
  • 安装php服务程序;
  • 优化调整php服务;
  • 配置nginx服务使用php的FPM模块来调用php环境来处理php的页面请求:
  • 配置Nginx支持php解析,编写服务控制脚本:
  • 编辑测试页面;
  • 客户端访问测试;
  • 发布php项目:电影系统;
  • 客户端访问测试;

安装并配置Nginx服务

[root@www ~]# yum -y install pcre-devel zlib-devel popt-devel openssl-devel openssl
[root@www ~]# useradd -M -s /sbin/nologin nginx
[root@www ~]# tar zxvf nginx-1.6..tar.gz -C /usr/src/
[root@www ~]# cd /usr/src/nginx-1.6./
[root@www nginx-1.6.]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_ssl_module --with-pcre && make && make install
[root@www nginx-1.6.]# cd
[root@www ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@www ~]# nginx
[root@www ~]# netstat -utlpn |grep
tcp 0.0.0.0: 0.0.0.0:* LISTEN /nginx

安装mysql数据库服务

[root@www ~]# rpm -e mysql  mysql-server  --nodeps
[root@www ~]# yum -y install ncurses ncurses-devel
[root@www ~]# tar zxvf cmake-2.8..tar.gz -C /usr/src/
[root@www ~]# cd /usr/src/cmake-2.8./
[root@www ~]# ./configure
[root@www ~]# make &&make install
[root@www ~]# cd
[root@www ~]# tar zxvf mysql-5.5..tar.gz -C /usr/src/
[root@www ~]# cd /usr/src/mysql-5.5./
[root@www mysql-5.5.]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DSYSCONFDIR=/etc/
[root@www mysql-5.5.]# make &&make install

配置初始化mysql及其优化

[root@www mysql-5.5.]# groupadd mysql
[root@www mysql-5.5.]# useradd -M -s /sbin/nologin -g mysql mysql
[root@www mysql-5.5.]# chown mysql:mysql /usr/local/mysql/ -R
[root@www mysql-5.5.]# cp support-files/my-medium.cnf /etc/my.cnf
cp:是否覆盖"/etc/my.cnf"? y
[root@www mysql-5.5.]# cp support-files/mysql.server /etc/init.d/mysqld
[root@www mysql-5.5.]# chmod +x /etc/init.d/mysqld
[root@www mysql-5.5.]# chkconfig --add mysqld
[root@www mysql-5.5.]# echo "PATH=$PATH:/usr/local/mysql/bin" >>/etc/profile
[root@www mysql-5.5.]# source /etc/profile
[root@www mysql-5.5.]# cd /usr/local/mysql/scripts/
[root@www scripts]# ./mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
OK
Filling help tables...
OK
[root@www scripts]# cd
[root@www ~]# /etc/init.d/mysqld start
Starting MySQL... [确定]
[root@www ~]# mysqladmin -uroot password
[root@www ~]# mysql -uroot -p123123
mysql> quit;

安装php服务程序

[root@www ~]# rpm -e php --nodeps
[root@www ~]# tar zxvf /root/libmcrypt-2.5..tar.gz -C /usr/src/
[root@www ~]# cd /usr/src/libmcrypt-2.5./
[root@www ~]# ./configure &&make &&make install
[root@www ~]# ln -s /usr/local/lib/libmcrypt.* /usr/lib64/
[root@www ~]# tar zxvf /root/mhash-0.9.9.9.tar.gz -C /usr/src/
[root@www ~]# cd /usr/src/mhash-0.9.9.9/
[root@www ~]# ./configure &&make &&make install
[root@www ~]# ln -s /usr/local/lib/libmhash* /usr/lib64/
[root@www ~]# tar zxvf /root/mcrypt-2.6..tar.gz -C /usr/src/
[root@www ~]# cd /usr/src/mcrypt-2.6./
[root@www ~]# ./configure &&make &&make install [root@www ~]# yum -y install libxml2-devel gd zlib-devel libpng-devel libjpeg-devel
[root@www ~]# tar zxvf php-5.3..tar.gz -C /usr/src/
[root@www ~]# cd /usr/src/php-5.3./
[root@www php-5.3.]# ./configure --prefix=/usr/local/php5 --with-gd --with-zlib --with-mysql=/usr/local/mysql --with-config-file-path=/usr/local/php5 --enable-mbstring --enable-fpm --with-jpeg-dir=/usr/lib
注解:
--prefix=/usr/local/php5 ##指定安装位置
--with-gd ##加载gd扩展库工具
--with-zlib ##加载压缩工具
--with-mysql=/usr/local/mysql ##加载mysql数据库的安装位置
--with-config-file-path=/usr/local/php5 ##加载php的配置文件存放位置
--enable-mbstring ##加载多字符的支持
--enable-fpm ##加载fpm管理程序
--with-jpeg-dir=/usr/lib ##加载识别图片格式 [root@www php-. 3.28]# make &&make install
[root@www php-. 3.28]# ls /usr/local/php5/
bin etc include lib php sbin var

优化调整php服务

[root@www php-. 3.28]# cp php.ini-development /usr/local/php5/php.ini
[root@www php-. 3.28]# cd
[root@www ~]# ln -s /usr/local/php5/bin/* /usr/local/bin/
[root@www ~]# ln -s /usr/local/php5/sbin/* /usr/local/sbin/
[root@www ~]# tar zxvf ZendGuardLoader-php-5.3-linux-glibc23-x86_64.tar.gz ##安装ZendGuardLoader模块
[root@www ~]# cp ZendGuardLoader-php-5.3-linux-glibc23-x86_64/php-5.3.x/ZendGuardLoader.so /usr/local/php5/
[root@www ~]# vi /usr/local/php5/php.ini ##在最后位置添加以下内容:
[Zend Guard]
zend_extension=/usr/local/php5/ZendGuardLoader.so
zend_loader.enable=1
zend_loader.disable_licensing=0
zend_loader.obfuscation_level_support=3
注释:
zend_extension=/usr/local/php5/ZendGuardLoader.so ##加载模块位置
zend_loader.enable=1 ##开启该模块
zend_loader.disable_licensing=0 ##禁用许可证检查(提高性能)
zend_loader.obfuscation_level_support=3 ##让 Zend Guard Loader 支持混淆级别

配置nginx服务使用php的FPM模块来调用php环境来处理php的页面请求

[root@www ~]# cd /usr/local/php5/etc/
[root@www etc]# cp php-fpm.conf.default php-fpm.conf
[root@www etc]# vi php-fpm.conf ##新建管理cgi接口的fpm模块的配置文件
[global]
pid = run/php-fpm.pid
[www]
listen = 127.0.0.1:
user = nginx
group = nginx
pm = dynamic
pm.max_children =
pm.start_servers =
pm.min_spare_servers =
pm.max_spare_servers =
:wq
解释:
[global] ##全局配置区域
pid = run/php-fpm.pid ##指定程序运行时的pid文件
[www] ##www网站区域
listen = 127.0.0.1: ##fpm管理程序监听的地址和端口
user = nginx ##运行的用户和组
group = nginx
pm = dynamic ##指定fpm进程池的模式,动态模式
pm.max_children = ##静态方式下开启的进程
pm.start_servers = ##动态方式下启动时开始的进程数
pm.min_spare_servers = ##动态最小进程数
pm.max_spare_servers = ##动态最大进程数
[root@www ~]# /usr/local/sbin/php-fpm ##启动php-fpm
[root@www ~]# netstat -utpln |grep php
tcp 127.0.0.1: 0.0.0.0:* LISTEN /php-fpm

配置Nginx支持php解析,编写服务控制脚本

[root@www ~]# vi /etc/init.d/lnmp
#!/bin/bash
# chkconfig:
# description: This script is for LNMP Management!
NGF=/usr/local/nginx/sbin/nginx
NGP=/usr/local/nginx/logs/nginx.pid
FPMF=/usr/local/php5/sbin/php-fpm
FPMP=/usr/local/php5/var/run/php-fpm.pid
case $ in
start)
$NGF &&echo "nginx is starting! "
$FPMF && echo "php-fpm is starting! "
;;
stop)
kill -QUIT $(cat $NGP) &&echo "nginx is stoped! "
kill -QUIT $(cat $FPMP) &&echo "php-fpm is stoped! "
;;
restart)
$ stop
$ start
;;
reload)
kill -HUP $(cat $NGP)
kill -HUP $(cat $FPMP)
;;
status)
netstat -utpln |grep nginx &>/dev/null
if [ $? -eq ]
then
echo "nginx is running! "
else
echo "nginx is not running! "
fi
netstat -upltn |grep php-fpm &>/dev/null
if [ $? -eq ]
then
echo "php-fpm is runing! "
else
echo "php-fpm is not running! "
fi
;;
*)
echo "Usage $0 {start|stop|status|restart}"
exit
;;
esac
[root@www ~]# chmod +x /etc/init.d/lnmp
[root@www ~]# chkconfig --add lnmp
[root@www ~]# /etc/init.d/lnmp status
nginx is running!
php-fpm is runing! [root@www conf]# vi /usr/local/nginx/conf/nginx.conf ##主配置文件如下
worker_processes ;
events {
worker_connections ;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout ;
server {
listen ;
server_name www.linuxfan.cn;
charset utf-;
location / {
root /var/www/linuxfan/;
index index.html index.htm index.php;
}
location ~\.php { ##访问.php页面的配置段
root /var/www/linuxfan/; ##php网页文档根目录,html代表安装nginx的目录下的html目录
fastcgi_pass 127.0.0.1:9000; ##php-fpm的监听地址和端口号
fastcgi_index index.php; ##指定php首页文件
include fastcgi.conf; ##包括fastcgi.conf样本配置
}
error_page /50x.html;
location = /50x.html {
root html;
}
}
}
[root@www conf]# /etc/init.d/lnmp restart

编辑测试页面

[root@www ~]# mkdir -p /var/www/linuxfan
[root@www ~]# vi /var/www/linuxfan/index.html
www.linuxfan.cn
[root@www ~]# vi /var/www/linuxfan/testa.php
<?php
phpinfo();
?>
[root@www ~]# vi /var/www/linuxfan/testm.php
<?php
$link=mysql_connect('localhost','root','');
if($link) echo "mysql ok!";
mysql_close();
?>

客户端访问测试:

http://www.linuxfan.cn

http://www.linuxfan.cn/testa.php

http://www.linuxfan.cn/testa.php

发布php项目:电影系统

[root@www ~]# yum -y install unzip
[root@www ~]# unzip SKYUC.v3.4.2.SOURCE.zip
[root@www ~]# cd SKYUC.v3.4.2.SOURCE/
[root@www ~]# cp -rf wwwroot /var/www/linuxfan/skyuc
[root@www ~]# cd /var/www/linuxfan/skyuc
[root@www ~]# chown -R nginx:nginx admincp/ data/ templates/ upload/
[root@www ~]#mysql -uroot -p123123
> create database skyucdb;
> grant all on skyucdb.* to 'runskyuc'@'localhost' identified by '';
> quit;

客户端访问测试:

http://www.linuxfan.cn/skyuc/install/index.php ##安装该系统

http://www.linuxfan.cn/skyuc ##普通用户访问该系统

http://www.linuxfan.cn/skyuc/admincp ##后台管理界面,用户密码为安装时指定

部署LNMP应用平台的更多相关文章

  1. 10 一键部署LNMP网站平台

    #!/bin/bash export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin NGINX_V=1.19.1 P ...

  2. 脚本_部署LNMP平台

    #!bin/bash#功能:部署LNMP平台,实际运行脚本时,需要去除备注.#作者:liusingbonfunction menu {                //定义函数menu        ...

  3. 十九.部署LNMP环境、构建LNMP平台、地址重写

    proxy client web1 web2   1.部署LNMP环境 1.1 部署nginx(前面已部署过) 1.2 部署mariadb ]# yum -y install mariadb mari ...

  4. 高级运维(三):部署Lnmp环境、构建Lnmp平台、地址重写

    一.部署LNMP环境 目标: 安装部署Nginx.MariaDB.PHP环境 1> 安装部署Nginx.MariaDB.PHP.PHP-FPM: 2> 启动Nginx.MariaDB.FP ...

  5. Docker: 快速搭建LNMP网站平台

    快速搭建LNMP网站平台 步骤: 1.自定义网络(这里建立一个自定义网络,名字叫 lnmp, 让LNMP网站的服务,都加入这个自定义网络)docker network create lnmp2.创建M ...

  6. 使用Docker 一键部署 LNMP+Redis 环境

    使用Docker 部署 LNMP+Redis 环境 Docker 简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linu ...

  7. 部署zabbix监控平台(源码安装)

    案例:部署Zabbix监控平台 1 问题 本案例要求部署一台Zabbix监控服务器,一台被监控主机,为进一步执行具体的监控任务做准备: 安装LNMP环境 源码安装Zabbix 安装监控端主机,修改基本 ...

  8. Docker部署LNMP完整教程

    在Docker中部署LNMP环境可以分为以下几个步骤: 安装Docker 创建镜像 创建Dockerfile build Docerfile 复制/修改配置文件 运行镜像,并映射端口 为了方便分布式部 ...

  9. Docker进阶之八:搭建LNMP网站平台实战

    搭建LNMP网站平台实战 LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写.L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指PHP,也可 ...

随机推荐

  1. [BZOJ3538]坑爹的GPS

    题目描述 Description 有一天,\(FJ\) 买了一辆车,但是,他一手下载了两个\(GPS\) 系统.好了现在麻烦的事情来了,\(GPS\) 有一个功能大概大家也知道,如果\(FJ\) 没有 ...

  2. CSP考前复习

    前言 因为loceaner太菜了,他什么东西都不会 所以他打算学一个东西就记录一下 不过因为他很菜,所以他不会写原理-- 而且,他希望在2019CSP之前不会断更 就酱紫,就是写给他自己的--因为他太 ...

  3. [LeetCode] 35. Search Insert Position 搜索插入位置

    Given a sorted array and a target value, return the index if the target is found. If not, return the ...

  4. WPF DataGrid 鼠标对表格双击导致客户端崩溃

    该问题是由于在创建DataGrid时没有设置为只读属性 解决:             <DataGrid Name="switchInfoList" MouseLeftBu ...

  5. oracle 配置DBlink 链接mysql库

    一,环境配置与准备.简介 \ oracle mysql 主机名 oracle01 mysqlre1 IP 192.168.0.10 192.168.0.187 本文章是oracle通过dblink连接 ...

  6. oracle--10GRAC集群搭建问题OUI-25031

    一,问题描述 安装RAC的过程中在结束 的阶段出现的错误 02,解决方式 这个可能在root.sh 执行的时候报错 由于版本问题: 修改vim /etc/redhat-release 把6.9改为4. ...

  7. 用欧拉计划学Rust语言(第17~21题)

    最近想学习Libra数字货币的MOVE语言,发现它是用Rust编写的,所以先补一下Rust的基础知识.学习了一段时间,发现Rust的学习曲线非常陡峭,不过仍有快速入门的办法. 学习任何一项技能最怕没有 ...

  8. Qt Quick 布局介绍

    在 Qt Quick 中有两套与布局管理相关的类库,一套叫作 Item Positioner(定位器),一套叫作 Item Layout(布局). 定位器包括 Row(行定位器).Column(列定位 ...

  9. Linux record

    1.设置ubuntu密码刚安装好的ubuntu系统,没有root密码,需要用户去手动设置的. sudo passwd root 输入2次密码即可. 2. Linux下is not in the sud ...

  10. Extra:Variable Types

    文章著作权归作者所有.转载请联系作者,并在文中注明出处,给出原文链接. 本系列原更新于作者的github博客,这里给出链接. 在我们使用Cg或者HLSL进行shader编写的过程中,常常涉及到一些变量 ...