LAMP
是指 Linux+Apache+Mysql/MariaDB+Perl/Python/PHP来搭建动态网站或服务器的开源软件。
从网站的流量来说,70%以上的访问量都是LAMP提供的,LAMP是最强大的网站解决方案。
看看其他网站的服务器都是什么,来看看爱奇异的服务器
是Apache的吧,其实还有一些网站是nigix的。那就是lnmp了
先说说他们之间的关系
首先Apache想要支持动态网页,那么需要CGI能够支持动态的程序语言来开发动态网站。那么PHP就是一种。他以CGI方式运行。
那么就出现了分层结构。如果我们把Apache和PHP装在同一台主机上的话。而数据库在另一台主机上,他们之间的联系靠TCP/IP协议。那么这就是两层结构。(或者PHP和Mysql在一块)
或者是三层结构,那么就是三台主机了。Apache和PHP,Mysql都在不同的主机。静态页面在Apache上,如果Apache发现请求是动态的,就把请求转交给php。
为什么要这么做呢?其实,无论是PHP还是Mysql都是CPU密集型的。就是对CPU的要求特别高,所以要分开放。而且当WEB服务器不够了,直接加一个主机就好。所以要做的就是要装上驱动让他们之间互联。php可以做成一个deamon,监听在端口上。
下面说一下PHP和HTTP。
php:脚本编程语言。php解释器,基于zend引擎。
php的执行过程分3部分。
第一段:词法分析、语法分析、编译为Opcode(Opcode在内存中,opcode就是可执行的)
第二段 :执行Opcode
第三段 :将Opcode缓存到Xcache,eAccelerator,APC中。(当有客户再次请求时,就可以将xcache等缓存的结果返回)
工作为CGI的机制:当HTTP接到动态网页请求的话,会再开启一个进程,将用户请求交给CGI程序处理。CGI再将处理结果返回给WEB服务器,服务器将结果返回给客户。
如果WEB很忙的话,还得管理那些CGI进程,当访问量过大时。WEB就可能崩溃,能不能把CGI的访问交给别人来管理呢。
FAST-CGI来管理CGI进程。而不是WEB来管理CGI了。这样就好了。
moudle模块化:当HTTP需要PHP了,将PHP模块加载进来执行,不需要创建进程。
静态化。为了提高访问速度,当第一次有人请求某个动态网页,将最终结果缓存到HTTP服务器。第二个用户访问时直接返回缓存就好了,这样可以优化站点。这就式动态内容静态化。将内容再缓存到CDN中放到用户的家门口,以实现更快的访问。
三种MPM的介绍,Apache2.x 支持了插入式并行处理模块,成为多路处理模块(MPM),在编译apache的时候必须选择也只能选择一种MPM。这样的选择会影响到apache的运行速度和可扩展性。
Perfork MPM:这种处理模块(MPM)实现了非线程,预派生的web服务器。他是要求每个请求都相互独立的最好的MPM,若一个请求出现问题不会影响到其他的请求,用单独的子进程来处理请求,导致资源消耗大。(最安全的,稳定)
Worker MPM:这种模型是基于多线程的,内存消耗低。这种模块使用了多进程,多个进程又有多个线程,来获得基于进程的稳定性。一个单独的控制进程(父进程)负责子进程的建立,每个进程可以建立一定数量的服务线程和一个监听线程,该线程监听接入请求并将其传递给服务线程和处理和应答。(可以应对海量的请求)
以上两种模式都试图保证一些备用的或者空闲的子进程用于迎接即将到来的请求,这样客户端就不需要等子进程的产生
event MPM:以上的MPM都有些不足,就是在非常繁忙的服务器应用下就显得有些不足。尽管HTTP的keepalive方式能减少TCP的链接和网络负载。但是keepalive需要和服务进程或线程绑定,这会导致耗尽资源。event 就可以把服务进程从连接中分离出来。在处理速度上很快。(可应对更高的负载,但不能再安全HTTP访问下工作)
为了打造更合适自己的lamp,所以lamp是最需要完全手动编译的。
编译配置LAMP
httpd:2.4.12
Mysql :5.5.12
php :5.4.12
一。安装HTTPD
APR(Apache portable Run-time libraries,Apache可移植运行库)apr是为了支持apache在各种平台上运行的。
安装前必须要依赖apr和apr-util
编译前,把selinux关掉
一。配置安装环境
二。安装httpd
下载并解压httpd的压缩包,这个官方网站上都可以找到.记得还需要下载apr和apr-utils。(apr,apr-util,httpd都在官网上可以下载)
记住需要先装apr,再装apr-util。而后有了环境才可以安装httpd
1.装apr
2.装apr-util
3.装httpd
对其中的部分参数解释一下:
--enable-so 支持动态共享模块
--enable-ssl 启用ssl功能来用https
--enable-deflate 常用的压缩机制
--enable-fcgi PHP和HTTP以fast-cgi工作
--enable-cgid 线程
--enable-mpms-shared=MPM_LIST 默认是event
--with-mpm=MPM
--enable-rewrite 支持url重写
解压后根据自己的需要执行编译。这个帮助可以使用./configure --help查看.可以自定义添加选项。根据自己需要来编写相应的选项。
启动后可以使用apachectl来启动apache服务。
用浏览器打开看看(网页文件再htdocs下)
接下来。我们来改一下,pid文件所放位置,这是为了好管理httpd。就像rpm安装的一样。
在。/etc/httpd/httpd.conf下加入 PidFile “/var/run/httpd/pid”
再用rpm安装的脚本加以修改就可以用来启动httpd了
改这里就好
到此httpd的配置就结束了,但可以再加一些脚本,让httpd可以使用service命令去管理。后面会在自动配置lamp的脚本里面写
让httpd开机自启动
httpd-2.4 的新特性:
1.MPM可在运行时装载:
2.Event MPM
3.异步读写
4.在每模块或者每目录下制定日志级别
5.每请求配置:<If> <ElseIf> <Else>
6.增强的表达式分析器
7.毫秒级的KeepAlive Timeout
8.基于域名的虚拟主机不再需要NameVirtualHost 指令
9.降低了内存占用
10.支持在配置文件中使用自定义变量(允许某个IP可以访问可以使用Require ip IPADDR 等等)
二。安装MYSQL
1.配置安装环境
2.在官网上下载mysql的tar包
官网的地址点击打开链接。
3.开始编译
先解压
用cmake
开始make和make install
3.收尾工作
创建mysql的用户和用户组
将环境改得和yum安装的一样
配置PATH,启动mysql
链接库文件
完成了,OK了
其实最好把其他人看数据库的权利剥夺了。(chmod o-rx data)为了数据库安全,让mysql目录下的所有人都是root。就data是mysql就好
其中解释以下编译安装的那些参数。
mysql 服务器
服务器变量:
定义了MySQL服务器的运行状态
SHOW GLOBAL VARIABLES
状态变量:
保存了MySQL服务器运行的统计数据SHOW GLOBAL STATUS
mysql> SHOW GLOBAL VARIABLES LIKE 'data%';
+---------------+------------------------+
| Variable_name | Value |
+---------------+------------------------+
| datadir | /usr/local/mysql/data/ |
+---------------+------------------------+
1 row in set (0.00 sec)
三。安装PHP
php有三种工作模式1.cgi 2.fast-cgi 3.模块
模块是最简单的。
1.下载php源码包。同样,去php官网去下载。
2.配置环境所需要的库依赖。
这里,根据我之前的报错无数次以解决的依赖问题,这里需要5个包。分别是mhash,mhash-devel,libcrypt,libcrypt-devel和libiconv。
前四个是rpm包。在rpmfind网站上可以找到。各种平台的都有,已亲试。最后一个我提供一个源码包下载地址。安装如下图。
下载后,执行命令
tar xf libiconv-1.13.1.tar.gz
./confiure .
3.开始编译php
先解压缩
开始编译
make 和 make install
fast-cgi 模式 --enable-fpm
4.配置php
转移php的配置文件到/etc
php的配置文件 比较独特
/etc/php.ini
/etc/php.d/*.ini
修改httpd的配置文件(/etc/httpd/httpd.conf)
四。安装Xcache
xcache是php的扩展。(他的功能是opcode优化器,把php编译结果缓冲到共享内存中,避免重复编译)
所以需要让php加载这个扩展模块,
先下载Xchache的安装包,这个我是在网上随便找的。解压
进去后编译加载模块
编译安装。
配置文件
修改其中内容
好了,配置成功了。可以从phpinfo里看到
五。WEB配置
好了,至此。lamp配置完成了。可以配置虚拟主机再压力测试一下。
1.配置虚拟主机
注释中心主机
启用虚拟主机
编辑文件 [root@www htdocs]# vim /etc/httpd//extra/httpd-vhosts.conf
重启httpd
六。压力测试
在本机测试。