实验概述
本实验提供LNMP(linux+nginx+mysql+php)服务器环境配置。首先,准备安装环境;然后,分别安装nginx服务器、mysql数据库和php语言环境;最后,修改nginx服务器配置文件,使Nginx支持php语言环境。
实验目标
完成此实验,有能力掌握:
- 搭建简单的LNMP网站环境
2. Nginx服务器的安装和部署
3. MySQL数据库的安装
4. PHP语言环境的安装和部署
学前建议
- 了解Linux的基本命令;
2. 了解基本的网站搭建知识
免费学习地址:
1.1 背景知识
LNMP简介
LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。
Linux:是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统。代表版本有:debian、centos、ubuntu、fedora、gentoo等。
Nginx:是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
Mysql:是一个小型关系型数据库管理系统。
PHP:是一种在服务器端执行的嵌入HTML文档的脚本语言。
这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。
Nginx简介和使用场景
Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为 “engine X”, 是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器.Nginx是由俄罗斯人 Igor Sysoev为俄罗斯访问量第二的 Rambler.ru站点开发的,它已经在该站点运行超过三年了。Igor Sysoev在建立的项目时,使用基于BSD许可。
为什么Nginx的性能要比Apache高得多?这得益于Nginx使用了最新的epoll(Linux 2.6内核)和kqueue(freebsd)网络I/O模型,而Apache则使用的是传统的select模型。目前Linux下能够承受高并发访问的 Squid、Memcached都采用的是epoll网络I/O模型。
处理大量的连接的读写,Apache所采用的select网络I/O模型非常低效。下面用一个比喻来解析Apache采用的select模型和Nginx采用的epoll模型进行之间的区别:假设你在大学读书,住的宿舍楼有很多间房间,你的朋友要来找你。select版宿管大妈就会带着你的朋友挨个房间去找,直到找到你为止。而epoll版 宿管大妈会先记下每位同学的房间号,你的朋友来时,只需告诉你的朋友你住在哪个房间即可,不用亲自带着你的朋友满大楼找人。如果来了10000个人,都要 找自己住这栋楼的同学时,select版和epoll版宿管大妈,谁的效率更高,不言自明。同理,在高并发服务器中,轮询I/O是最耗时间的操作之 一,select和epoll的性能谁的性能更高,同样十分明了。
在高并发连接的情况下,Nginx是Apache服务器不错的替代品。Nginx同时也可以作为7层负载均衡服务器来使用。Nginx 0.8.46 + PHP 5.2.14 (FastCGI) 可以承受3万以上的并发连接数,相当于同等环境下Apache的10倍。
第 2 章:实验内容
2.2 实验资源申请
2.3 安装开发包和库文件
在部署LNMP环境之前,首先,用户需要安装Nignx服务器,MySQL数据库,以及PhP环境相关的开发包和库文件,若缺少开发包或库文件,会导致后续LNMP环境部署失败。
-
远程登录到“LNMP环境”的ECS服务器,请使用本实验提供的ECS服务器的“外网地址”,“用户名”和“密码”。
- 输入命令cat /etc/redhat-release,查看当前Linux系统版本。
说明:本实验使用CentOS 6.5版本,若Linux系统为Ubuntu或者CentOS的低版本,可能会导致实验脚本不可用。
-
执行命令:chkconfig iptables off,关掉防火墙,避免实验中出现服务器无法访问的情况。在真实的生产环境中,请根据实际需求,配置相应的防火墙规则。
4. 执行如下命令,安装LNMP环境所需的开发包和库文件,若不安装,则会导致后续的LNMP环境安装失败。例如:openssl等。
yum -y install ntp make openssl openssl-devel pcre pcre-devel libpng libpng-devel libjpeg-6b libjpeg-devel-6b freetype freetype-devel gd gd-devel zlib zlib-devel gcc gcc-c++ libXpm libXpm-devel ncurses ncurses-devel libmcrypt libmcrypt-devel libxml2 libxml2-devel imake autoconf automake screen sysstat compat-libstdc++-33 curl curl-devel
注意:拷贝时,请勿换行,否则会导致部分开发包和库文件没有安装,以及后续操作中,安装错误等问题。
安装过程需要等待1分钟左右。安装完成后,页面显示“Complete!”。
5. 在真实的生产环境中,若用户的服务器中,已安装的apache、mysql、php。请执行命令 yum remove mysql httpd php 卸载相关软件,否则系统原有软件会对部署的LNMP环境中数据有影响。由于本实验中提供的ECS环境,没有安装如上软件,因此,页面提示“Package xx available, but not installed.” (xx为软件名,例如mysql 等)。
至此,已完成LNMP环境的所需的基本开发包和库环境的相关安装和部署。
2.4 安装nginx服务器
本小节,将主要介绍在Linux系统的ECS实例上,进行LNMP环境中安装Nignx服务器的操作步骤。
说明:本实验中,安装的Nginx服务器版本为Nignx 1.10.1。
- 输入命令yum -y install nginx,通过yum的方式安装nginx。
等待几秒钟,页面显示“Complete!”。证明已完成Nignx的基本安装。
- 使用命令 vi /etc/nginx/conf.d/default.conf,进入nginx配置文件“default.conf”的编辑页面。
在Nginx配置文件的编辑页面中,默认监听使用ipv4和ipv6。
使用键盘方向键将光标移动到“listen [::]:80 default_server;”位置,并输入dd命令,删除此行,也就是删除其中监听为ipv6的配置。因为,目前阿里云使用的是ipv4,若使用ipv6,运行时会报错。完成后,输入“:wq”,保存退出编辑页面。
- 输入命令service nginx start,启动nginx服务器。若页面显示“Starting nignx [OK]”,证明Nginx服务器已启动。若报错,请检查如上Nginx配置是否正确。
- 打开浏览器,并在地址栏中,输入云中沙箱提供的ECS实例“公网地址”。若页面显示“Welcome to Nginx on EPEL!”,则证明Nginx服务器已部署且启动成功。
- 执行命令chkconfig --levels 235 nginx on,设置2、3、5级别开机启动nginx。通过设置如上开机启动级别,在下次启动或者运行ECS服务器的时候,就可以自动运行Nignx服务器。
至此,已完成Nginx的全部安装部署,下一小节将介绍如何安装MySQL数据库。
2.5 安装mysql数据库
本小节,将主要介绍在Linux系统的ECS实例上,安装LNMP环境中MySQL数据库的操作步骤。
说明:本实验中,安装的MySQL数据库版本为MySQL 5.1.73版本。
- 首先,在安装MySQL之前,执行命令yum -y install mysql mysql-server mysql-devel ,安装mysql及其组件mysql-server,mysql-devel。
等待几秒钟,页面显示“Complete!”,证明已完成MySQL的安装。
2. 输入命令service mysqld start,启动mysql数据库。
等待几秒钟,页面显示“Starting mysqld [ok]”。证明mysql启动成功。
- 输入命令mysql,进入MySQL数据库的命令页面,证明已经成功安装并运行MySQL数据库。
- 在mysql的命令行中,输入exit,页面提示“bye”,退出mysql的命令页面。
- 最后,执行命令chkconfig --levels 235 mysqld on,设置2、3、5级别开机启动mysql。这样,用户在下次启动ECS服务器时,ECS实例会自动运行mysql数据库,无需用户手动启动。
至此,完成MySQL的全部安装。
2.6 安装php语言环境
本小节,将主要介绍在Linux系统的ECS实例上,安装LNMP环境中安装PHP语言环境的操作步骤。
说明:本实验中,安装的是PHP 5.3.3版本。
- 首先,用户执行如下命令,安装php及其常用扩展包。若缺少扩展包,可能会导致php安装或运行失败。
注意:如下命令不能换行,若换行,或导致扩展包或php安装失败。
yum -y install php lighttpd-fastcgi php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-mssql php-snmp php-soap
等待几秒钟,界面显示“Complete!”,证明已成功安装Php语言基本环境。
- 完成PHP语言基本环境的安装后。执行如下命令,安装PHP的相关组件。这样,可以使PHP支持MySQL、FastCGI模式。
yum install php-tidy php-common php-devel php-fpm php-mysql
说明:CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序一般运行在网络服务器上。 CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等。FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次。
等待几秒钟,页面提示“Is this ok [y/N]”,输入y,允许安装大小总计为6.7M的组件。
等待几秒钟,页面提示“Complete!”,证明组件已安装成功。此时,PHP支持MySQL和FastCGI模式。
- 执行命令service php-fpm start,启动php-fpm,界面显示“OK”。由于Nginx是个轻量级的HTTP server,必须借助第三方的FastCGI处理器才可以对PHP进行解析,PHP-FPM是一个第三方的FastCGI进程管理器,只用于PHP。
- 最后,执行命令chkconfig --levels 235 php-fpm on,设置2、3、5级别开机启动php-fpm。这样,用户在下次启动ECS服务器时,ECS会自动运行php-fpm,无需用户手动运行。
至此,已成功安装LNMP的所有环境。下一小节中,用户将配置Nginx服务器,使Nginx支持php语言环境。
2.7 配置nginx支持php
本小节中,将设置Nginx 的配置文件,允许Nginx服务器支持PHP语言环境。
1. 在真实的生产工组环境中,一般均需要备份Nginx配置文件,这样的做法可以快速恢复原有Nginx配置信息。若之后用户需要对配置文件进行修改,均需要在修改前对配置文件进行备份,从而保证Nginx服务器的正常运行:
首先,将Nginx配置文件改为备份文件,执行如下命令:
mv /etc/nginx/nginx.conf /etc/nginx/nginx.confbak
然后,拷贝默认的配置文件作为配置文件,执行如下命令:
cp /etc/nginx/nginx.conf.default /etc/nginx/nginx.conf
执行命令cd /etc/nginx,进入Nginx目录中,使用命令ls查看当前目录中有三个nignx的配置文件:Nginx配置文件“nginx.conf”,Nginx配置备份文件“nginx.confbak”,以及Nginx默认配置文件“nginx.conf.default”。
- 执行命令vim /etc/nginx/nginx.conf,进入nginx配置文件的编辑页面,添加Nginx的fastcgi支持。
首先,将文件第45行修改为如下内容,也就是首页支持php语言。
index index.php index.html index.htm;
然后,将文件的65-72行代码前的注释“#”去掉,并替换"root"和“fastcgi_param”参数值为如下内容。也就是,使用/usr/share/nginx/html作为网站根目录,进行访问。
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
include fastcgi_params;
}
最后,完成如上配置信息修改后,按ESC并输入命令:wq保存并退出编辑页面。
- 执行命令vim /etc/php.ini,进入文件php.ini的编辑页面,在结尾的“;Local Variables:”之前添加如下内容。完成后,执行:wq保存并退出编辑页面。
cgi.fix_pathinfo = 1
至此,完成LNMP环境的全部搭建内容,下一个小节将验证搭建的LNMP的网站环境。
2.8 查看LNMP网站环境
本小节,主要验证搭建的LNMP服务器是否可用。
- 首先,执行如下命令,重启nginx和php-fpm服务器。
service nginx restart
service php-fpm restart
注意:只有重启Nginx和php-fpm服务器。修改的Nginx配置文件中的参数才能生效。
- 执行命令vim /usr/share/nginx/html/info.php,在Nginx的网站访问的主目录下,创建一个info.php文件,并进入新建文件的编辑页面。并在编辑页面中,输入如下代码,用于显示php的基本信息页面。完成后,输入:wq,保存并退出编辑页面。
<?php
phpinfo();
?>
- 最后,测试nginx是否成功解析php。打开本地浏览器,并在地址栏中输入:http://xxx.xxx.xx.xx/info.php,若页面显示php介绍信息,证明LNMP环境搭建成功。
说明:xxx.xxx.xx.xx为云中沙箱提供ECS实例的“公网地址”。