热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

部署LNMP应用平台

一、LNMP应用平台概述1.概述:LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAPPOP3

一、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.2.tar.gz -C /usr/src/
[root@www ~]# cd /usr/src/nginx-1.6.2/
[root@www nginx-1.6.2]#  ./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.2]# cd
[root@www ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@www ~]# nginx 
[root@www ~]# netstat -utlpn |grep 80
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      5618/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.6.tar.gz -C /usr/src/
[root@www ~]# cd /usr/src/cmake-2.8.6/
[root@www ~]# ./configure 
[root@www ~]# make &&make install
[root@www ~]# cd
[root@www ~]# tar zxvf mysql-5.5.22.tar.gz -C /usr/src/
[root@www ~]# cd /usr/src/mysql-5.5.22/
[root@www mysql-5.5.22]# 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.22]# make &&make install

配置初始化mysql及其优化

[root@www mysql-5.5.22]# groupadd mysql
[root@www mysql-5.5.22]# useradd -M -s  /sbin/nologin  -g mysql  mysql
[root@www mysql-5.5.22]# chown mysql:mysql /usr/local/mysql/ -R
[root@www mysql-5.5.22]# cp support-files/my-medium.cnf /etc/my.cnf
cp:是否覆盖"/etc/my.cnf"? y
[root@www mysql-5.5.22]# cp support-files/mysql.server /etc/init.d/mysqld
[root@www mysql-5.5.22]# chmod +x /etc/init.d/mysqld
[root@www mysql-5.5.22]# chkconfig --add mysqld
[root@www mysql-5.5.22]# echo "PATH=$PATH:/usr/local/mysql/bin" >>/etc/profile
[root@www mysql-5.5.22]# source /etc/profile
[root@www mysql-5.5.22]# 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 123123
[root@www ~]# mysql -uroot -p123123 
mysql> quit;

安装php服务程序

[root@www ~]# rpm -e php --nodeps
[root@www ~]# tar zxvf /root/libmcrypt-2.5.8.tar.gz -C /usr/src/
[root@www ~]# cd /usr/src/libmcrypt-2.5.8/
[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.8.tar.gz -C /usr/src/
[root@www ~]# cd /usr/src/mcrypt-2.6.8/
[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.28.tar.gz -C /usr/src/
[root@www ~]# cd /usr/src/php-5.3.28/
[root@www php-5.3.28]# ./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-5. 3.28]# make &&make install
[root@www php-5. 3.28]# ls /usr/local/php5/
bin  etc  include  lib  php  sbin  var

优化调整php服务

[root@www php-5. 3.28]# cp php.ini-development /usr/local/php5/php.ini
[root@www php-5. 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:9000
user = nginx
group = nginx
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35 
:wq
解释: [global] ##全局配置区域 pid = run/php-fpm.pid ##指定程序运行时的pid文件 [www] ##www网站区域 listen = 127.0.0.1:9000 ##fpm管理程序监听的地址和端口 user = nginx ##运行的用户和组 group = nginx pm = dynamic ##指定fpm进程池的模式,动态模式 pm.max_children = 50 ##静态方式下开启的进程 pm.start_servers = 20 ##动态方式下启动时开始的进程数 pm.min_spare_servers = 5 ##动态最小进程数 pm.max_spare_servers = 35 ##动态最大进程数
[root@www ~]# /usr/local/sbin/php-fpm                   ##启动php-fpm
[root@www ~]# netstat -utpln |grep php
tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      5587/php-fpm

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

[root@www ~]# vi /etc/init.d/lnmp
#!/bin/bash
# chkconfig: 35 95 30
# 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 $1 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)
      $0 stop
      $0 start
   ;;
   reload)
      kill -HUP $(cat $NGP) 
      kill -HUP $(cat $FPMP)
   ;;
   status)
      netstat -utpln |grep nginx &>/dev/null 
      if [  $? -eq 0 ]
      then
         echo "nginx is running! "
      else
         echo "nginx is not running! "
      fi
      netstat -upltn |grep php-fpm &>/dev/null 
      if [ $? -eq 0 ]
      then
         echo "php-fpm is runing! "
      else
         echo "php-fpm is not running! "
      fi
   ;;
   *)
      echo "Usage $0 {start|stop|status|restart}"
      exit 1
   ;;
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  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  www.linuxfan.cn;
        charset utf-8;
        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   500 502 503 504  /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','123123');
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 '123123';
> quit;

客户端访问测试:

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

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

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

 


推荐阅读
  • 本文详细介绍了在CentOS 6.5 64位系统上使用阿里云ECS服务器搭建LAMP环境的具体步骤。首先,通过PuTTY工具实现远程连接至服务器。接着,检查当前系统的磁盘空间使用情况,确保有足够的空间进行后续操作,可使用 `df` 命令进行查看。此外,文章还涵盖了安装和配置Apache、MySQL和PHP的相关步骤,以及常见问题的解决方法,帮助用户顺利完成LAMP环境的搭建。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • 本文详细介绍了在 Ubuntu 系统上搭建 Hadoop 集群时遇到的 SSH 密钥认证问题及其解决方案。通过本文,读者可以了解如何在多台虚拟机之间实现无密码 SSH 登录,从而顺利启动 Hadoop 集群。 ... [详细]
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • SecureCRT是一款功能强大的终端仿真软件,支持SSH1和SSH2协议,适用于在Windows环境下高效连接和管理Linux服务器。该工具不仅提供了稳定的连接性能,还具备丰富的配置选项,能够满足不同用户的需求。通过SecureCRT,用户可以轻松实现对远程Linux系统的安全访问和操作。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 在 CentOS 6.5 系统上部署 VNC 服务器的详细步骤与配置指南
    在 CentOS 6.5 系统上部署 VNC 服务器时,首先需要确认 VNC 服务是否已安装。通常情况下,VNC 服务默认未安装。可以通过运行特定的查询命令来检查其安装状态。如果查询结果为空,则表明 VNC 服务尚未安装,需进行手动安装。此外,建议在安装前确保系统的软件包管理器已更新至最新版本,以避免兼容性问题。 ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • 在 Ubuntu 中遇到 Samba 服务器故障时,尝试卸载并重新安装 Samba 发现配置文件未重新生成。本文介绍了解决该问题的方法。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 为了在Hadoop 2.7.2中实现对Snappy压缩和解压功能的原生支持,本文详细介绍了如何重新编译Hadoop源代码,并优化其Native编译过程。通过这一优化,可以显著提升数据处理的效率和性能。此外,还探讨了编译过程中可能遇到的问题及其解决方案,为用户提供了一套完整的操作指南。 ... [详细]
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • 作为软件工程专业的学生,我深知课堂上教师讲解速度之快,很多时候需要课后自行消化和巩固。因此,撰写这篇Java Web开发入门教程,旨在帮助初学者更好地理解和掌握基础知识。通过详细记录学习过程,希望能为更多像我一样在基础方面还有待提升的学员提供有益的参考。 ... [详细]
  • 在使用 SQL Server 时,连接故障是用户最常见的问题之一。通常,连接 SQL Server 的方法有两种:一种是通过 SQL Server 自带的客户端工具,例如 SQL Server Management Studio;另一种是通过第三方应用程序或开发工具进行连接。本文将详细分析导致连接故障的常见原因,并提供相应的解决策略,帮助用户有效排除连接问题。 ... [详细]
author-avatar
俏君woo_267
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有