apache web服务器

1、安装 apache2.4.23javascript

新版本的 httpd-2.4 新增如下特性; php

新增模块;css

mod_proxy_fcgi(可提供 fcgi 代理) html

mod_ratelimit(限制用户带宽) java

mod_request(请求模块,对请求作过滤) mysql

mod_remoteip(匹配客户端的 IP 地址)linux

对于基于 IP 的访问控制作了修改,再也不支持 allow,deny,order 机制,而是统一使用 require 进行 nginx

还新增如下几条新特性; web

一、MPM 支持在运行时装载;不过要开启这种特性,在编译安装要启用这三种功能;sql

--enable-mpms-shared=all --with-mpm=event

二、支持 event

三、支持异步读写

四、在每一个模块及每一个目录上指定日志级别

五、加强版的表达式分析器

六、每请求配置:,

七、毫秒级别的 keepalive timeout

八、基于 FQDN 的虚拟主机再也不须要 NameVirtualHost 指令

九、支持使用自定义变量


 

安装环境:操做系统:Centos7.2,关闭 selinux

检查 httpd 包是否安装,如查安装则卸载

[root@www ~]# rpm -q httpd

一、安装 apache2.4.23

下载源码包:

httpd-2.4.23.tar.gz

apr-1.5.2.tar.gz

apr-util-1.5.4.tar.gz

zlib-1.2.8.tar.gz pcre-8.39.tar.gz

:apr(Apache Portable Runtime)Apache 可移植运行库,它是一个对操做系统调用的抽 象库,用来实现 Apache 内部组件对操做系统的使用,提升系统的可移植性。

 

安装 openssl

 

安装 apache2.4.23 时提示 openssl 版本太低,centos7 自带版本 openssl-1.0.1e

 

下载 openssl(先装)

 

yum install  openssl-devel.x86_64

 

安装 apr 和 apr-util

[root@www ~]# tar zxf apr-1.5.2.tar.gz

[root@www ~]# cd apr-1.5.2/

[root@www apr-1.5.2]# ./configure --prefix=/usr/local/apr

[root@www apr-1.5.2]# make && make install

[root@www ~]# tar zxf apr-util-1.5.4.tar.gz

[root@www ~]# cd apr-util-1.5.4/

[root@www apr-util-1.5.4]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr

[root@www apr-util-1.5.4]# make && make install

安装 zlib

[root@www ~]# tar zxf zlib-1.2.8.tar.gz

[root@www ~]# cd zlib-1.2.8/

[root@www zlib-1.2.8]# ./configure --prefix=/usr/local/zlib

[root@www zlib-1.2.8]# make && make install

安装 pcre

[root@www ~]# tar zxf pcre-8.39.tar.gz

[root@www ~]# cd pcre-8.39/

[root@www pcre-8.39]# ./configure --prefix=/usr/local/pcre

[root@www pcre-8.39]# make && make install

 

[root@www ~]# mv /usr/bin/openssl /usr/bin/openssl.1.0.1e

[root@www ~]# ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl

安装 apache2.4.23

[root@www ~]# tar zxf httpd-2.4.23.tar.gz

[root@www ~]# cd httpd-2.4.23/

[root@www httpd-2.4.23]# ./configure --prefix=/usr/local/http-2.4.23 --enable-so --enable-cgi --enable-cgid --enable-ssl --with-ssl=/usr/local/openssl --enable-rewrite --with-pcre=/usr/local/pcre --with-z=/usr/local/zlib --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mods-shared=most --enable-mpms-shared=all --with-mpm=event  --enable-proxy --enable-proxy-fcgi --enable-expires --enable-deflate

相关参数解释:

--enable-so:支持动态共享模块(即打开 DSO 支持)

--enable-rewrite:支持 url 重写

--enable-ssl:支持 ssl --with-ssl=/usr/local/openssl:指定 ssl 安装位置

--enable-cgi:启用 cgi --enable-cgid:MPM 使用的是 event 或 worker 要启用 cgid

--enable-modules=most:明确指明要静态编译到 httpd 二进制文件的模块,为 空格分隔的模块名列表、all 或者 most,all 表示包含全部模块,most 表示包含大部分经常使用模 块

--enable-mods-shared=most:明确指明要以 DSO 方式编译的模块,为空格分隔 的模块名列表、all 或者 most,all 表示包含全部模 块,most 表示包含大部分模块

--enable-mpms-shared=all:启用 MPM 全部支持的模式,这样 event、worker、prefork 就会以 模块化的方式安装,要用哪一个就在 httpd.conf 里配置就行了。

--with-mpm=event:指定启用的 mpm 模式,默认使用 enevt 模式,在 apache 的早期版本 2.0 默认 prefork,2.2 版本是 worker,2.4 版本是 event.

--with-pcre=/usr/local/pcre:支持 pcre

--with-z=/usr/local/zlib:使用 zlib 压缩库

--with-apr=/usr/local/apr:指定 apr 的安装路径

--with-apr-util=/usr/local/apr-util:指定 apr-util 的安装路径

--enable-expires:激活彧经过配置文件控制 HTTP 的“Expires:”和“Cache-Control:”头内容,即 对网站图片、js、css 等内容,提供客户端浏览器缓存的设置。这个是 apache 调优的一个重 要选项之一。

--enable-deflate:提供对内容的压缩传输编码支持,通常是 html、js、css 等内容的站点。使 用此参数会打打提升传输速度,提高访问者访问的体验。在生产环境中,这是 apache 调优 的一个重要选项之一。

[root@www httpd-2.4.23]# make && make install

优化 http 程序执行路径

[root@www httpd-2.4.23]# ln -s /usr/local/http-2.4.23/bin/* /usr/local/bin/

修改配置文件 httpd.conf,设置其中的 ServerName 值   (在vim /usr/local/http-2.4.23/conf)

例如:ServerName www.benet.com

开启 apache 服务器:

# /usr/local/http-2.4.23/bin/apachectl start

开机后自动启动

[root@www httpd-2.4.23]# cp /usr/local/http-2.4.23/bin/apachectl /etc/init.d/httpd

编辑 /etc/init.d/httpd 文件,在首行 #!/bin/sh 下面加入这行:

[root@www httpd-2.4.23]# vi /etc/init.d/httpd

# chkconfig: 35 85 15 (在 3 和 5 启动模式下的--启动优先级

将 Apache 加入开机自动启动:

[root@www httpd-2.4.23]# chkconfig --add httpd

[root@www httpd-2.4.23]# chkconfig httpd on

启动编译好的 Apache 2.4.23:

[root@www httpd-2.4.23]# service httpd start

[root@www httpd-2.4.23]# netstat -anplt | grep 80

tcp6           0          0     :::80      :::*     LISTEN      4807/httpd

客户端测试访问(注意防火墙)

 

 

 

 


2、Apache 的优化配置:

apache 所运行的硬件环境都是对性能影响最大的因素,即便不能对硬件进行升级,也最好 给 apache 一个单独的主机以避免受到其余应用的干扰。各个硬件指标中,对性能影响最大的 是内存,对于静态内容(图片、javascript 文件、css 文件等),它决定了 apache 能够缓存多 少内容,它缓存的内容越多,在硬盘上读取内容的机会就越少,大内存能够极大提升静态站 点的速度;对动态高负载站点来讲,每一个请求保存的时间更多一些,apache 的 mpm 模块会 为每一个请求派生出相应的进程或线程分别处理,而进程或线程的数量与内存的消耗近似成正 比,所以增大内存对提升动态站点的负载和运行速度也极为有利  其次是硬盘的速度,静态站点尤其突出,apache 不断的在读取文件并发送给相应的请求, 硬盘的读写是极其频繁的;动态站点也要不断的加载 web 程序(php 等),一个请求甚至要读 取十几个文件才能处理完成,所以尽量的提升硬盘速度和质量对提升 apache 的性能是有 积极意义的。 

最后是 cpu 和网络,cpu 影响的是 web 程序执行速度,网络影响流量大小。     

一、apache 的工做模式:

Apache HTTP 服务器被设计为一个强大的、灵活的可以在多种平台以及不一样环境下工做的服 务器。这种模块化的设计就叫作“多进程处理模块”(Multi-Processing Module,MPM),也叫 作工做模式。 Prefork 模式(一个非线程型的) : 其主要工做方式是:当 Apache 服务器启动后,mpm_prefork 模块会预先建立多个子进程(默 认为 5 个),每一个子进程只有一个线程,当接收到客户端的请求后,mpm_prefork 模块再将 请求转交给子进程处理,而且每一个子进程同时只能用于处理单个请求。若是当前的请求数将 超过预先建立的子进程数时,mpm_prefork 模块就会建立新的子进程来处理额外的请求。 Apache 老是试图保持一些备用的或者是空闲的子进程用于迎接即将到来的请求。这样客户 端的请求就不须要在接收后等候子进程的产生。 因为在 mpm_prefork 模块中,每一个请求对应一个子进程,所以其占用的系统资源相对其余 两种模块而言较多。不过 mpm_prefork 模块的优势在于它的每一个子进程都会独立处理对应 的单个请求,这样,若是其中一个请求出现问题就不会影响到其余请求。Prefork 在效率上 要比 Worker 要高,可是内存使用大得多不擅长处理高并发的场景。 Apache 在 prefork 工做模式下影响性能的重要参数说明 

Apache 在 prefork 工做模式下影响性能的重要参数说明

# prefork MPM

<IfModule mpm_prefork_module> StartServers             5

#apache 启动时候默认开始的子进程数 MinSpareServers          5

#最小的闲置子进程数 MaxSpareServers         10

#最大的闲置子进程数 MaxRequestWorkers      250

#MaxRequestWorkers 设置了容许同时的最大接入请求数量。任何超过

MaxRequestWorkers 限制的请求将进入等候队列,在 apache2.3.1 之前的版本

MaxRequestWorkers 被称为 MaxClients,旧的名字仍旧被支持。

MaxConnectionsPerChild   500 

注 4:查看 Apache 加载的模块

[root@www ~]#apachectl -t -D DUMP_MODULES

[root@www ~]# apachectl -M

[root@www ~]# apachectl –l  (小写 L,只显示静态模块) 

3.重启 httpd 服务 

Worker 模式(多线程多进程):

和 prefork 模式相比,worker 使用了多进程和多线程的混合模式,worker 模式也一样会先预 派生一些子进程,而后每一个子进程建立一些线程,同时包括一个监听线程,每一个请求过来会 被分配到一个线程来服务。线程比起进程会更轻量,由于线程是经过共享父进程的内存空间, 所以,内存的占用会减小一些,在高并发的场景下会比 prefork 有更多可用的线程,表现会 更优秀一些;另外,若是一个线程出现了问题也会致使同一进程下的线程出现问题,若是是 多个线程出现问题,也只是影响 Apache 的一部分,而不是所有。因为用到多进程多线程, 须要考虑到线程的安全了,在使用 keep-alive 长链接的时候,某个线程会一直被占用,即便 中间没有请求,须要等待到超时才会被释放(该问题在 prefork 模式下也存在) 总的来讲,prefork 方式速度要稍高于 worker,然而它须要的 cpu 和 memory 资源也稍多于 woker。 

Apache 在 worker 工做模式下影响性能的重要参数说明

# worker MPM

<IfModule mpm_worker_module>

StartServers      3

#apache 启动时候默认开始的子进程数

MinSpareThreads 75

#最小空闲数量的工做线程

MaxSpareThreads 250
#最大空闲数量的工做线程

ThreadsPerChild 25

#每一个子进程产生的线程数量

MaxRequestWorkers 400

#与 prefork 模式相同

MaxConnectionsPerChild 0

#与 prefork 模式相同

注 4:进程与线程的区别

线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别:

(1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程 有本身独立的地址空间;

(2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源

(3)线程是处理器调度的基本单位,但进程不是.

(4)两者都可并发执行.

进程和线程都是由操做系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对 应用的并发性。

进程和线程的区别在于:

简而言之,一个程序至少有一个进程,一个进程至少有一个线程.  线程的划分尺度小于进程,使得多线程程序的并发性高。  另外,进程在执行过程当中拥有独立的内存单元,而多个线程共享内存,从而极大地提升了程 序的运行效率。 

Event 模式:

这是 Apache 最新的工做模式,是 worker 模式的变种,它把服务进程从链接中分离出来,一 worker 模式不一样的是在于它解决了 keep-alive 长链接的时候占用线程资源被浪费的问题,在 event 工做模式中,会有一些专门的线程用来管理这些 keep-alive 类型的线程,当有真实请
求过来的时候,将请求传递给服务器的线程,执行完毕后,又容许它释放。这加强了在高并 发场景下的请求处理。event 模式不能很好的支持 https 的访问(HTTP 认证相关的问题)。

三、开启 apache 的 Gzip(deflate)功能 

gzip 能够极大的加速网站,有时压缩比率高到 80%,最少都有 40%以上,仍是至关不错的。

在 Apache2 以后的版本,模块名不叫 gzip,而叫 mod_deflate

未使用 Gzip 

若是要开启 deflate 的话,必定要打开下面二个模块 (进主配:vim  /etc/http/conf/httpd.conf)

LoadModule deflate_module modules/mod_deflate.so

LoadModule headers_module modules/mod_headers.so 

设置压缩比率,取值范围在 1(最低) 到 9(最高)之间,不建议设置过高,虽然有很高的压缩率, 可是占用更多的 CPU 资源.

mod_deflate 模块检查及安装

[root@www ~]# /usr/local/http-2.4.23/bin/apachectl -M | grep deflate 

deflate_module (shared) 

若是没有安装:

a.编译时安装方法

  编译的时候跟上--enable-deflate便可实现安装

b.DSO 方式安装

[root@www ~]# cd /root/httpd-2.4.23/modules/filters/ #切到 apache 源码包 mod_deflate 所在 的目录下 

# /usr/local/http-2.4.23/bin/apxs -c -i -a mod_deflate.c  #以 dso 的方式编译安装到 apache 中 # /usr/local/http2.2/bin/apxs -c -i -a /root/httpd-2.2.17/modules/metadata/mod_headers.c#以 dso 的方式编译安装到 apache 中 若是报错: 

缘由是缺乏 zlib-devel 的安装包,装上就能够了。

[root@www filters]# ll /usr/local/http-2.4.23/modules/mod_deflate.so   

#检查 mod_deflate 是 否安装,成功安装这里会显示出该文件

-rwxr-xr-x. 1 root root 98144 Oct 22 23:14 /usr/local/http-2.4.23/modules/mod_deflate.so 

apxs 命令参数说明: 

-i  此选项表示须要执行安装操做,以安装一个或多个动态共享对象到服务器的 modules 目 录中。 

-a  此选项自动增长一个 LoadModule 行到 httpd.conf 文件中,以启用此模块,或者,若是 此行已经存在,则启用之。 

-c  此选项表示须要执行编译操做。 若是重启的时候出现错误 

须要在 LoadModule deflate_module  modules/mod_deflate.so 的前面加载 zlib.so

这里须要注意的是 LoadModule deflate_module 须要放在 LoadModule php5_module 以后

LoadFile /usr/lib/libz.so(x64 系统中该库文件位于/usr/lib64 目录下,能够软连接到/usr/lib 下 或者就在 LoadModule deflate_module modules/mod_deflate.so 这行的上一行添加 LoadFile /usr/lib64/libz.so 便可

从新启动 httpd:

# /usr/local/http2.4.23/bin/apachectl graceful #优雅启动 httpd 服务 

修改 Apache 配置文件开启 gzip 压缩传输:()

http.conf 修改、增长配置参数

LoadModule deflate_module  modules/mod_deflate.so

LoadModule headers_module modules/mod_headers.so

打开 httpd.conf 后,先将上面两行配置前面的#号去掉,这样 apache 就会启用这两个模块, 其中 mod_deflate 是压缩模块,就是对要传输到客户端的代码进行 gzip 压缩;mod_headers 模块的做用是告诉浏览器页面使用了 gzip 压缩,若是不开启 mod_headers 那么浏览器就会 对 gzip 压缩过的页面进行下载,而没法正常显示。 在 httpd.conf 中加入如下代码,能够加到任何空白地方,不了解 apache 的话,若是担忧加 错地方,就放到 http.conf 文件的最后一行 

<IfModule mod_deflate.c>
     DeflateCompressionLevel 9
     SetOutputFilter DEFLATE
    #AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-javascript application/x-               httpd-      php
      #AddOutputFilterByType DEFLATE image/*
      AddOutputFilterByType DEFLATE text/*
      AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript
      application/javascript application/x-javascript
      AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp
      SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary

      SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary

      SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary 

</IfModule>

修改完成后保存退出并重启 httpd 服务 使用谷歌浏览器测试访问,

以下图显示结果:(提示:在访问测试页以前按 F12 键) 

四、配置 mod_expires 模块

这个很是有用的优化,mod_expires 能够减小 20-30%左右的重复请求,让重复的用户对指定 的页面请求结果都 CACHE 在本地,根本不向服务器发出请求。但要注意更新快的文件不要 这么作。

这个模块控制服务器应答时的 Expires 头内容和 Cache-Control 头的 max-age 指令。有效期 (expiration date)能够设置为相对于源文件的最后修改时刻或者客户端的访问时刻。 未启用 expire 的效果: 

[root@www htdocs]# curl -I 192.168.31.83

HTTP/1.1 200 OK

Date: Tue, 25 Oct 2016 15:52:37 GMT

Server: Apache/2.4.23 (Unix)

Last-Modified: Sun, 23 Oct 2016 15:34:10 GMT

ETag: "8c9f-53f8a01b18080"

Accept-Ranges: bytes

Content-Length: 35999
Vary: Accept-Encoding

Content-Type: image/png

启用 expire 缓存:

mod_expires 的安装配置:

启用 expires_module

LoadModule expires_module modules/mod_expires.so 

而后添加 Expires 配置规则

<IfModule mod_expires.c>

ExpiresActive On

ExpiresByType text/css "now plus 1 month"

ExpiresByType application/x-javascript "now plus 5 day"

ExpiresByType image/jpeg "access plus 1 month"

ExpiresByType image/gif "access plus 1 month"

ExpiresByType image/bmp "access plus 1 month"

ExpiresByType image/x-icon "access plus 1 month"

ExpiresByType image/png "access plus 1 minute"

ExpiresByType application/x-shockwave-flash "access plus 1 month"

ExpiresDefault "now plus 0 minute"

</IfModule

验证:

[root@www htdocs]# curl -I 192.168.31.83

HTTP/1.1 200 OK

Date: Tue, 25 Oct 2016 16:00:57 GMT

Server: Apache/2.4.23 (Unix)

Last-Modified: Sun, 23 Oct 2016 15:34:10 GMT

ETag: "8c9f-53f8a01b18080"

Accept-Ranges: bytes

Content-Length: 35999

Cache-Control: max-age=60

Expires: Tue, 25 Oct 2016 16:01:57 GMT

Vary: Accept-Encoding

Content-Type: image/png

四、Apache 禁止目录遍历

将 Options Indexes FollowSymLinks 中的 Indexes 去掉,就能够禁止 Apache 显示该目录结构。
Indexes 的做用就是当该目录下没有 index.html 文件时,就显示目录结构。

一、主配置中启用 httpd-default.conf

Include conf/extra/httpd-default.conf 

二、修改 httpd-default.conf

文件:/usr/local/http-2.4.23/conf/extra/httpd-default.conf

找到

ServerTokens Full

ServerSignature On

改为

ServerTokens Prod

ServerSignature off

重启 apache 测试 

六、Apache 日志切割

为何要分割日志 随着网站的访问愈来愈大,WebServer 产生的日志文件也会愈来愈大,若是不对日志进行分 割,那么只能一次将大的日志(如 Apache 的日志)整个删除,这样也丢失了不少对网站比较 宝贵的信息,由于这些日志能够用来进行访问分析、网络安全监察、网络运行情况监控等, 所以管理好这些海量的日志对网站的意义是很大的。 

方法 1:使用 rotatelogs(apache 自带的工具)每隔一天记录一个日志

辑 Apache 的主配置文件,更改内容以下:

注释掉以下两行

ErrorLog logs/error_log

CustomLog logs/access_log common

而后添加以下两行

ErrorLog "|/usr/local/http-2.4.23/bin/rotatelogs -l logs/error_%Y%m%d.log 86400"

CustomLog "|/usr/local/http-2.4.23/bin/rotatelogs -l logs/access_%Y%m%d.log 86400" combined 

注:其中 86400 为轮转的时间单位为秒

验证:查看 logs 目录下的日志文件

[root@www ~]# ls /usr/local/http-2.4.23/logs/  (若是没有的稍等,有缓存

access_20161026.log  access_log  deflate_log.log  error_20161026.log  error_log  httpd.pid

因为 apache 自带的日志轮询工具 rotatelogs,听说在进行日志切割时容易丢日志,所以咱们 一般使用 cronolog 进行日志轮询。 

方法 二、使用 cronolog 为每一天创建一个新的日志

安装 cronolog 程序

下载 cronolog 

 [root@www ~]# tar zxf cronolog-1.6.2.tar.gz 

[root@www ~]# cd cronolog-1.6.2/

[root@www cronolog-1.6.2]# ./configure && make && make install 

主配置文件中的使用方法

ErrorLog "|/usr/local/sbin/cronolog logs/error-%Y%m%d.log"

CustomLog "|/usr/local/sbin/cronolog logs/access-%Y%m%d.log" combined

若是 Apache 中有多个虚拟主机,最好每一个虚拟主机中放置一个这样的代码,并将日志文件 名改为不一样的名字。

扩展: 

这个保证了天天一个文件夹文件夹下每一个小时产生一个 log CustomLog "|/usr/local/sbin/cronolog logs /%Y%m%d/access_log.%H" combined

按天轮询(生产环境常见用法,推荐使用): CustomLog "|/usr/local/sbin/cronolog logs/access_www_%Y%m%d.log" combined

按小时轮询(生产环境较常见用法): CustomLog "|/usr/local/sbin/cronolog logs /access_www_ %Y%m%d%H.log" combined

验证:查看 logs 目录下的日志文件

[root@www ~]# ls /usr/local/http-2.4.23/logs/

access-20161026.log access_log deflate_log.log error-20161026.log error_log httpd.pid

注意:

这两个管道日志文件程序还有一点不一样之处是使用 cronolog 时若是日志是放在某个不存 在的路径则会自动建立目录,而使用 rotatelogs 时不能自动建立,这一点要特别注意

 七、配置防盗链

有时候,你的网站莫名其妙的访问量变大,不要高兴的太早,有多是被别人盗链了。 举个例子:好比你搭了个 discuz 论坛,里面有些热点图片、视频;而后别人将他网站上访问 图片的地址重定向到你的 discuz 上,这样他的服务器就能够空闲出来了;也就是说别人访问 他网站的图片视频,消耗的确是你服务器的资源; 解决这个问题的方法是配置下防盗链,让外来的盗不了链; 

方法 1:Apache 防盗链的第一种实现方法,能够用 rewrite 实现。

首先要确认 Apache 的 rewrite module 可用:

[root@www ~]# apachectl -M | grep rewrite

rewrite_module (shared)

打开 httpd.conf,确保有这么一行配置:

LoadModule rewrite_module modules/mod_rewrite.so

而后在找到本身网站对应的配置的地方(如在主配置文件中或虚拟主机中),

加入下列代码: ServerName www.benet.com 

#防盗链配置

RewriteEngine On

RewriteCond %{HTTP_REFERER} !^$

RewriteCond %{HTTP_REFERER} !^http://benet.com/.*$ [NC] 

RewriteRule .*\.(gif|jpg|swf)$ http://www.benet.com/about/nolink.png[R,NC,L] 

防盗链配置的说明:

若是访问不了 把域名改成ip

先要在htdoce里放入两张图片:

<img  src="1.jpg">

<img  src="2.jpg">

而后再打开一台:安装apache

第一台:

 

 

 

 

3、fcgi 模式编译安装 LAMP+xcache

php 的工做模式:

php 在 lamp 环境下共有三种工做模式:CGI 模式、apache 模块、FastCGI 模式。

CGI 模式下 运行 PHP,性能不是很好。做为 apache 的模块方式运行,在之前的课程中编译安装 lamp 已 经介绍过了。

FastCGI 的方式和 apache 模块的不一样点在于:

FastCGI 方式 PHP 是一处独立的 进程,全部 PHP 子进程都由 PHP 的一个叫做 php-fpm 的组件负责管理;而 apache 模块化方 式运行的 PHP,则是 apache 负责调用 PHP 完成工做。PHP 的 FastCGI 方式性能要比 apache 模块化方式强不少,今天咱们以 FastCGI 方式编译安装 lamp。 FastCGI 工做机制: 首先客户端发起请求,请求分为 2 种,一种是静态请求它能够直接由 Apache 直接响应返回; 另外一种是动态的请求,如其中包含中 php 或者 Perl 这种脚本解释性语言,则由 Apache 服务 器经过fastcgi协议调用php服务器执行并返回给Apache由Apache返回解释执行后的结果, 若是这个过程当中涉及到对数据的操做,此时 php 服务器还会还会经过 mysql 协议调用 mysql 服务器。

编译环境及各软件版本:(三台初始环境web、php、mysql

主机规划

至少 3 台主机,操做系统都是 centos7.2.网段在 192.168.197.0/24 网关 192.168.197.2

分配以下: 1 台 httpd 服务器(192.168.31.83)

1 台 php 服务器(192.168.31.141)

1 台 mysql 服务器(192.168.31.225)

编译安装 LAMP

编译安装 apache(请参考前面 apache 的安装)

编译安装 mysql(请参考 mysql 安装) 

FastCGI 方式安装 php 

一、解决依赖关系 [root@phpserver ~]# yum -y install libxml2-devel lzip2-devel libcurl-devel openssl-devel bzip2-devel 

安装 libmcrypt

[root@phpserver ~]# tar zxf libmcrypt-2.5.7.tar.gz 

[root@phpserver ~]# cd libmcrypt-2.5.7/

[root@phpserver libmcrypt-2.5.7]# ./configure --prefix=/usr/local/libmcrypt && make && make install 

二、编译安装 php

[root@phpserver ~]# tar zxf php-5.6.27.tar.gz

[root@phpserver ~]# cd php-5.6.27/ 

[root@phpserver php-5.6.27]# ./configure --prefix=/usr/local/php  --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-openssl --enable-fpm --enable-sockets --enable-sysvshm --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --with-mhash --with-mcrypt=/usr/local/libmcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2--enable-maintainer-zts

[root@phpserver php-5.6.27]# make && make install 

三、提供 php 配置文件

[root@phpserver php-5.6.27]# cp php.ini-production /etc /php.ini 

四、为 php-fpm 提供脚本

[root@phpserver php-5.6.27]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

[root@phpserver php-5.6.27]# chmod +x /etc/init.d/php-fpm 

[root@phpserver php-5.6.27]# chkconfig --add php-fpm

[root@phpserver php-5.6.27]# chkconfig php-fpm on 

五、提供 php-fpm 配置文件并编辑:

# cp /usr/local/php5.6/etc/php-fpm.conf.default /usr/local/php5.6/etc/php-fpm.conf 

[root@phpserver ~]# vi /usr/local/php5.6/etc/php-fpm.conf

修改内容以下:

pid = run/php-fpm.pid

listen = 192.168.31.141:9000(phpip)

pm.max_children = 50

pm.start_servers = 5

pm.min_spare_servers = 5

pm.max_spare_servers = 35 

启动 php-fpm 服务:

[root@phpserver ~]# service  php-fpm start

Starting php-fpm  done

[root@phpserver ~]# netstat -anpt | grep php-fpm

tcp        0      0 0.0.0.0:9000            0.0.0.0:*               LISTEN     

25456/php-fpm: mast  

[root@phpserver ~]# firewall-cmd --permanent --add-port=9000/tcp success

[root@phpserver ~]# firewall-cmd --reload Success 

在该主机上新建虚拟主机目录用于存放网页文件

[root@phpserver ~]# mkdir -p /var/www/benet

至此 php 安装配置完毕,下面配置 apache 经过 fastcgi 协议调用 php 

六、配置 apache(切换到 apache 主机上操做)

在 Apache2.4 之后已经专门有一个模块针对 FastCGI 的实现,此模块为 mod_proxy_fcgi.so, 它实际上是做为 mod_proxy.so 模块的扩充,所以,这两个模块都要加载 

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

[root@www ~]# apachectl -M | grep proxy

proxy_module (shared) 

proxy_fcgi_module (shared) 

创建一个目录做为虚拟主机的家目录

[root@www ~]# mkdir -p /var/www/benet

编辑主配置文件 httpd.conf,开启虚拟主机 

启用 Include conf/extra/httpd-vhosts.conf

同时定位 AddType;添加下面两行:让 apache 能识别 php 格式的页面

AddType application/x-httpd-php .php

AddType application/x-httpd-php-source .phps

而且定位至 DirectoryIndex:支持 php 格式的主页

DirectoryIndex index.php index.html #添加 index.php

 

配置虚拟主机支持使用 fcgi 

[root@www ~]# vi /usr/local/http-2.4.23/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
    ServerAdmin webmaster@benet.com
    DocumentRoot "/var/www/benet"
    ServerName www.benet.com
    ServerAlias benet.com
    ErrorLog "logs/benet.com-error_log"
    CustomLog "logs/benet.com-access_log" common
    ProxyRequests Off
ProxyPassMatch ^/(.*\.php(/.*)?)$   fcgi://192.168.31.141:9000/var/www/benet/$1
<Directory "/var/www/benet">
      Options FollowSymLinks
      AllowOverride None
      Require all granted
</Directory>
</VirtualHost>

三方模块支持 PHP-FPM 实现。

测试 LAMP 环境:

在 mysql 主机上建立用于 php 服务器链接的 mysql 帐户

mysql> grant all on *.* to testuser@'%' identified by '123456’;

注意防火墙要容许 mysql 链接。 

在 php 服务器上的/var/www/benet 目录下建立.php 的测试页:

[root@phpserver ~]# cat /var/www/benet/index.php 

<?php

phpinfo();

?>

[root@phpserver ~]# cat /var/www/benet/test1.php 

<?php

$link=mysql_connect('192.168.31.225','testuser','123456');

if ($link)echo "connection success......";

mysql_close();

?> 

测试访问 php 测试页: 

看到上面两个测试页说明 apache、php、mysql 之间能够协同工做了。 

 

七、压力测试

网站性能压力测试是服务器网站性能调优过程当中必不可缺乏的一环。只有让服务器处在高压 状况下,才能真正体现出软件、硬件等各类设置不当所暴露出的问题。 性能测试工具目前最多见的有如下几种:ab、http_load、webbench、siege。今天咱们专门 来介绍 ab。

ab 是 apache 自带的压力测试工具。ab 很是实用,它不只能够对 apache 服务器进行网站访 问压力测试,也能够对或其它类型的服务器进行压力测试。好比 nginx、tomcat、IIS 等。 下面咱们开始介绍有关 ab 命令的使用: 

查看 ab 是否安装成功,能够切换到上述目录下,使用 ab –V 命令进行检测。

以下: [root@www ~]# /usr/local/http-2.4.23/bin/ab -V

This is ApacheBench, Version 2.3 <$Revision: 1748469 $>

Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/

Licensed to The Apache Software Foundation, http://www.apache.org/ 

若是 ab –V 命令出错,能够 exporexport LD_LIBRARY_PATH="/usr/local/openssl/lib/", 就能够了。 

八、CentOS7.2 下安装 php加速软件 Xcache(在 php 主机上完成下面的操做

说明:

php 安装目录:/usr/local/php5.6

php.ini 配置文件路径:/etc/php.ini

php 网页根目录:/var/www/benet

 

1)安装 xcache

wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz #下载

[root@phpserver ~]# tar zxf xcache-3.2.0.tar.gz #解压

[root@phpserver ~]# cd xcache-3.2.0/ #进入安装目录

[root@phpserver xcache-3.2.0]# /usr/local/php5.6/bin/phpize#用 phpize 生成 configure 配置文 件

[root@phpserver xcache-3.2.0]# ./configure --enable-xcache --enable-xcache-coverager --enable-xcache-optimizer --with-php-config=/usr/local/php5.6/bin/php-config #配置

[root@phpserver xcache-3.2.0]# make && make install #编译、安装

Installing                                      shared                                    extensions: /usr/local/php5.6/lib/php/extensions/no-debug-zts-20131226/

安装完成以后,出现下面的界面,记住如下路径,后面会用到

/usr/local/php5.6/lib/php/extensions/no-debug-zts-20131226/ 

2)建立 xcache 缓存文件

# touch /tmp/xcache

# chmod 777 /tmp/xcache 

3)拷贝 xcache 后台管理程序到网站根目录

[root@phpserver xcache-3.2.0]# cp -r htdocs/ /var/www/benet/xcache 

4)配置 php 支持 xcache

vi / etc/php.ini #编辑配置文件,在最后一行添加如下内容 

[xcache-common]

extension = /usr/local/php5.6/lib/php/extensions/no-debug-zts-20131226/xcache.so(这是上面的路径

[xcache.admin]

xcache.admin.enable_auth = Off

[xcache]

xcache.shm_scheme ="mmap"

xcache.size=60M

xcache.count =1

xcache.slots =8K

xcache.ttl=0

xcache.gc_interval =0

xcache.var_size=64M
xcache.var_count =1

xcache.var_slots =8K

xcache.var_ttl=0

xcache.var_maxttl=0

xcache.var_gc_interval =300

xcache.test =Off

xcache.readonly_protection = Off

xcache.mmap_path ="/tmp/xcache"

xcache.coredump_directory =""

xcache.cacher =On

xcache.stat=On xcache.optimizer =Off

[xcache.coverager]

xcache.coverager =On

xcache.coveragedump_directory =""

将 xcache 目录拷贝到 apache 主机的网页文档目录下

[root@phpserver ~]# scp -r /var/www/benet/xcache/ root@192.168.31.83:/var/www/benet/ 

6)测试 service php-fpm restart #重启 php-fpm

浏览器打开网站根目录下面的 xcache

http://http://192.168.31.83/xcache 能够看到以下页面: (httpdip

至此,Linux 下安装 php 加速软件 Xcache 教程完成 

 

 

查看 xcache 的命中率: 

九、部署 bbs 论坛

Discuz 的程序文件解压,而且将 upload 中全部文件放置到网站目录(php 服务器的操做)

#unzip Discuz_7.0.0_FULL_SC_UTF8.zip  -d  discus

# mv Discuz/upload/  /var/www/benet/bbs 

设置 php-fpm 的服务用户为下面文件的属主或者对其设置写权限,不然安装时会报错

#cd  /var/www/benet/bbs

#chown -R nobody config.inc.php attachments/ forumdata/ uc_client/data/cache/ templates/

#chmod -R 777 uc_server/data/

修改 php.ini 文件

short_open_tag = On

service php-fpm restart(重启

web 服务器也须要有静态文件(apache 服务器上操做

 


 

#unzip Discuz_7.0.0_FULL_SC_UTF8.zip  -d  discus

# mv Discuz/upload/  /var/www/benet/bbs 

设置 httpd 的服务用户对指定文件也须要有写权限

#cd  /var/www/benet/bbs

#chown -R daemon config.inc.php attachments/ forumdata/ uc_client/data/cache/ templates/ 

在数据库服务器上建立 bbs 数据库及受权账户

mysql> create database bbsdb;

Query OK, 1 row affected (0.01 sec)

mysql> grant all on bbsdb.* to runbbs@'%' identified by '123';

Query OK, 0 rows affected, 1 warning (0.03 sec) 

置完成以后,输入 httd://192.168.31.83/bbs/install 便可安装 

填写数据库的相关信息,添加数据库服务器的地址和 MariaDB 建立的数据库和用户密码,而 后在设置 bbs 的管理员账号密码就能够继续安装了。 剩下的根据提示安装便可。 

 

出现上面这种状况是因为 php 服务器安装了 discuz 以后致使程序发生变化从而致使动态服 务器和静态服务器的程序不一致,只须要手动把 bbs 服务器的文件和 web 服务器进行一次 同步便可,若是想实现自动同步,须要使用其余服务,如 initory+rsync、sersync 等工具。

#scp -r /var/www/benet/bbs/* root@192.168.31.83:/var/www/benet/bbs/

动态服务器和静态服务器同步文件以后,再次访问 bbs 的网址就正常了。 

相关文章
相关标签/搜索