Web服务之LNMP

上篇我们介绍LAMP,今天来介绍下LNMP。基础、基础、基础……重要事情不只是要3遍

  LNMP是Linux、Nginx、MySQL和PHP的缩写,这个组合是最常见的WEB服务器的运行环境之一;
Nginx概述

  Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。Mysql是一个小型关系型数据库管理系统。PHP是一种在服务器端执行的嵌入HTML文档的脚本语言。这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统
  Nginx是一个小巧而高效的Linux下的Web服务器软件,已在一些大型网站上运行多年,很多国内外的门户网站、行业网站也都在是使用Nginx,相当的稳定。

Nginx特点:
  Nginx的主要特点是稳定、功能丰富、安装配置简单、低系统资源。Nginx对于反向代理和负载均衡有不错的支持。Nginx不仅仅可以做为Web服务器,还可以做负载均衡服务器、代理服务器和邮件服务器。

  作为Web服务器来说,相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,Nginx处理静态文件、索引文件,自动索引的效率非常高,体现更高的效率。
  作为代理服务器,Nginx可以实现无缓存的反向代理加速,提高网站的运行速度。
  作为负载均衡服务器,Nginx既可以在内部直接支持Rails和PHP,也可以支持HTTP代理服务器对外进行服务,同时还支持简单的容错和利用算法进行负载均衡;Nginx 用 C 编写, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。
  作为邮件代理服务器来说, Nginx是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器)。

  安装配置上,Nginx安装简单、配置灵活、配置文件非常简洁(还能够支持perl语法);
  性能方面,Nginx是专门为性能优化而开发的,非常注重效率。它采用Poll模型,可以支持更多的并发连接,最大可以支持对50000个并发连接数的形影,而且只占用很低的内存资源;
  可用性方面,Nginx支持热部署,启动速度特别迅速,可以在不间断服务的情况下,对软件版本或者配置进行升级,及时运行数月也无需重新启动,几乎可以做到7*24显示不间断运行;
LNMP组合工作流程

LNMP组合Fastcgi模式调用PHP、Mysql关系逻辑图

  当LNMP组合工作时,首先是普通用户通过游览器输入域名请求Nginx Web服务器,如果请求是静态的资源,则由Nginx解析返回给用户,如果是动态请求(.php结尾),那么Nginx就会把它通过Fastcgi接口(生产常用方法)发送给PHP引擎服务,Fastcgi进程php-fpm进行解析,如果这么动态请求解析要求读取数据库,那么PHP就会继续请求Mysql数据库,以读取需要的数据,并最终通过Nginx服务器返回数据给用户,这就是LNMP环境基本的顺序流程;

Nginx介绍和安装
https://www.liuliya.com/archives/694.html
Mysql数据库介绍

  数据库是互联网非常重要的,数据的仓库;深受广大用户欢迎的一款开源关系型数据库软件,由瑞端Mqsql AB公司开发维护的,2006年Mqsql AB公司被SUN公司收购,2008年SUN公司又被Oracel(甲骨文)公司收购,因此目前Mqsql属于甲骨文公司。

  Mqsql数据库的最常用标准化语言为SQL结构化查询语言
为什么选择关系型数据库Mqsql

 1)性能卓越,服务稳定,很少出现异常宕机
 2)开放源代码且无版权制约,自主新强,使用成本低。
 3)历史悠久,社区及用户非常活跃,遇到问题,可以很快获取到帮助
 4)软件体积小,安装使用简单,并且易于维护,安装及维护成本低
 5)支持多种操作系统,提供多种API接口,支持多种开发语言,特别对流行的PHP语言无痕支持
 6)品牌口碑效应,使得企业无需考虑直接用之。

安装步骤

  1.添加用户,创建用户的账号
  2.解压文件
  3.移动文件到指定目录
  4.初始化数据库
  5.查看关键文件:
  6.启动mysql
  7.最后把mysqld加入到开机启动

具体安装步骤参照:
https://www.liuliya.com/archives/57.html

Mysql数据库常见故障:

  1.主机名没有解析
  2.tmp没有权限 (1777)
    3.数据库初始化问题
    4.mysql数据库文件损坏,或者目录权限问题

FastCGI
什么是CGI
  CGI的全称为“通过网关接口(Common Gateway Interface)”为HTTP服务器与其他机器上的程序服务通信交流的一种工具CGI程序运行在网络服务器上。
  传统的CGI接口方式性能比较差,因为每次HTTP服务器遇到动态程序都要通过重新启动解释器来执行解释,之后结果才会返回给HTTP服务器,这里处理高并发访问几乎是不可用的,因此就诞生了FastCGI另外,传统的CGI接口方式安全性也很差;
什么是FastCGI
  是一个可伸缩的,高速的HTTP服务器的动态脚本语言通信的接口(linux下Fastcgi接口是socket )主要优点就是把动态语言和HTTP服务器分离开来,Apache Nginx Lighttpd等比较流行的是PHP,Fastcgi是接口采用C/S架构,把HTTP服务器和脚本分离开。

LNMP之Php(Fastcgi)服务安装准备

检查Nginx及Mysql的安装情况
1)检查确认mysql的安装路径
ls -ld /application/mysql/
查看mysql和nginx是否启动

netstat -lntup|egrep "3306|80"
netstat -lntup|egrep "nginx|mysql"
cat /etc/redhat-release
uname -r
uname -m

yum -y install mcrypt #《==需提前安装eperl源,前文已经安装过eperl
建议还是yum install
PHP安装基本依赖库:

rpm -qa zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel
rpm -qa freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel

提示:libjpeg-turbo-devel 是早期的libjpeg-devel的新名字,libcurl-devel是在早期的curl-devel的新名字
安装执行过程如下:

yum install zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel -y
yum install freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel -y

提示:缺少一个包
libiconv-devel

yum无法安装
这里我们手工安装下:

mkdir -p /home/oldboy/tools
cd /home/oldboy/tools
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
tar zxf libiconv-1.14.tar.gz
cd libiconv-1.14
./configure --prefix=/usr/local/libiconv
make
make install
cd ../

PHP相关拓展库

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
yum -y install libmcrypt-devel
yum -y install mhash
yum -y install mcrypt
rpm -qa libmcrypt-devel mhash mcrypt

安装libmcrypt库
  这是一个动态的模块化的libmcrypt. libmcrypt对于在程序运行时添加、移除算法是有用的
Libmcrypt-nm目前不在官方支持,软件的地址:
http://mcrypt.hellug.gr/lib/ 编译PHP的过程中libmcrypt库不是必须装的库。
安装过程:

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
yum -y install libmcrypt-devel

安装mhash库
yum -y install mhash
安装mcrypt库
yum -y install mcrypt
最后我们检查一下:
rpm -qa libmcrypt-devel mhash mcrypt
开始安装PHP5.5

tar zxf php-5.5.32.tar.gz
cd php-5.5.32

#php编译安装

./configure \
--prefix=/application/php5.5.32 \
--with-mysql=/application/mysql/ \
--with-pdo-mysql=mysqlnd \
--with-iconv-dir=/usr/local/libiconv \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr \
--enable-xml \
--disable-rpath \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--with-curl \
--enable-mbregex \
--enable-fpm \
--enable-mbstring \
--with-gd \
--with-mcrypt \
--enable-gd-native-ttf \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-zip \
--enable-soap \
--enable-short-tags \
--enable-static \
--with-xsl \
--with-fpm-user=www \
--with-fpm-group=www \
--enable-ftp \
--enable-opcache=no

echo $?
0 #返回0表示配置没有问题


说明:
编译PHP记得touch文件 不然回报一下错误:
创建一个文件(5.3一个bug 这里我们5.5同样也touch 一个)
touch ext/phar/phar.phar
方法1:就是make前创建
touch ext/phar/phar.phar
方法2:#记得find /application/mysql/lib然后把此路径放到vi /etc/ld.so.conf 追加 /application/mysql/lib

ln -s /application/mysql/lib/libmysqlclient.so.18 /usr/lib64/
touch ext/phar/phar.phar
make
make install


完成make
然后在make install 至此如图完成php安装

配置PHP并启动

ln -s /application/php5.5.32/ /application/php
ls /application/php

php的配置文件:

ls php.ini* -l
php.ini-development
php.ini-production

备份php.ini-production文件
cp php.ini-production /application/php/lib/php.ini
进入PHP文件夹内

cd /application/php/etc/
ll
pear.conf
php-fpm.conf.default
启动php-fpm
cp php-fpm.conf.default php-fpm.conf
/application/php/sbin/php-fpm
lsof -ef|grep php-fpm

有两个进程:

master
worker

配置PHP服务完成并确认成功
整合nginx+php
cd /application/nginx/conf/extra
配置location

cd /application/nginx/conf
cd extra
cp blog.conf blog.conf.oldboy.20160517
vim blog.conf
server {
    listen        80;
     server_name  blog.etiantian.org;
     location / {
         root   html/blog;
         index  index.html index.htm;
        }
        location ~ .*\.(php|php5)?$ {
        root html/blog;
        fastcgi_pass 127.0.0.1:9000
        fastcgi_index index.php;
        include fastcgi.conf;
     }
  }

查看fastcgi.conf
cat ../fastcgi.conf
平滑重启ngixn
../../sbin/nginx -s reload
测试Nginx环境生效
echo "<?php phpinfo(); ?>" >test_info.php
生成php_inof文件 查看后立即删除掉。
cat test_info.php
<?phpinfo (); ?>

配置完域名解析
然后游览器访问地址

测试连接数据库是否正常
vim test_mysql.php

<?php
	$link_id=mysql_connect('localhost','root','oldboy') or mysql_error();
	if($link_id){
	echo "mysql successful by oldboy !";
	}else{
	echo mysql_error();
}
?>

整合php+mysql
配置php连接Mysql服务并确认成功

<?php
	$link_id=mysql_connect('localhost','root,'123456') or mysql_error();
	if($link_id){
		echo "mysql successful by goodboy!";
	}else{
		echo mysql_error();
	}
?<

然后游览器输入:
http://blog.ediandian.org/test_mysql.php
显示:
mysql successful by goodboy!
就说明PHP到mysql连接成功了;

发表评论

发表评论

*

沙发空缺中,还不快抢~