Apache WEB服务器入门简介:

Apache HTTP ServerApache软件基金会的一个开源的网页服务器,可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是目前最流行的Web服务器端软件之一。

Apache服务器是一个多模块化的服务器,Apache取自“A  Patchy Server”的读音,即充满补丁的服务器,因为Apache基于GPL发布,大量开发者不断为Apache贡献新的代码、功能、新的特性、修改原来的缺陷。

Apache WEB服务器有三种处理模块:Prefork MPM、Worker MPM、Event MPM

默认Apache处理模块为Prefork MPM方式,Prefork采用的预派生子进程方式,Prefork用单独的子进程来处理不同的请求,进程之间是彼此独立的,所以比较稳定。

Event MPM不支持HTTPS方式,官网也给出“This MPM is experimental, so it may or may not work as expected”提示,所以很少被使用。

Prefork的工作原理:控制进程Master在最初建立“StartServers”个进程后,为了满足MinSpareServers设置的最小空闲进程,所以需创建第一个空闲进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个,依次按照递增指数级创建进程数,最多每秒同时创建32个空闲进程,直到满足至少有MinSpareServers设置的值为止。Apache的预派生模式(Prefork),基于预派生模式不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能,不过由于Prefork MPM引擎是基于多进程方式提供对外服务,每个进程占内存也相对较高。

Worker MPM工作原理:控制进程Master在最初建立“StartServers”个进程,每个进程会创建ThreadsPerChild设置的线程数,多个线程共享该进程内存空间,同时每个线程独立地处理用户的HTTP请求。为了不在请求到来时再生成线程,Worker MPM也可以设置最大最小空闲线程。Worker MPM模式下同时处理的请求总数=进程总数xThreadsPerChild,也即等于MaxClients。如果服务器负载很高,当前进程数不满足需求,Master控制进程会fork新的进程,最大进程数不能超过ServerLimit数,如果需调整的StartServers进程数,需同时调整ServerLimit值。

Prefork MPM与Worker MPM引擎区别小结:

Prefork MPM模式:使用多个进程,每个进程只有一个线程,每个进程在某个确定的时间只能维持一个连接,稳定,内存开销较高;

Worker MPM模式:使用多个进程,每个子进程包含多个线程,每个线程在某个确定的时间只能维持一个连接,内存占用量比较小,适合大并发、高流量的WEB服务器。Worker MPM缺点是一个线程崩溃,整个进程就会连同其任何线程一起挂掉。

Apache WEB服务器安装步骤:

编译安装httpd-2.2:

[root@localhost ~]# wget http://mirrors.hust.edu.cn/apache/httpd/httpd-2.2.34.tar.bz2
[root@localhost ~]# tar xjvf httpd-2.2.34.tar.bz2
[root@localhost ~]# cd httpd-2.2.34
[root@localhost httpd-2.2.34]# yum -y install apr apr-devel apr-util apr-util-devel
[root@localhost httpd-2.2.34]# ./configure --prefix=/usr/local/apache/ --enable-rewrite --enable-so
[root@localhost httpd-2.2.34]# make && make install

启动httpd:

[root@localhost ~]# /usr/local/apache/bin/apachectl start

测试访问:

Apache常用目录:

/usr/lib64/httpd/modules/                            Apache模块存放路径;

/var/www/html/                                         YUM安装Apache网站发布目录;

/var/www/error/                       服务器设置错误信息,浏览器显示;

/var/www/icons/                                        Apache小图标文件存放目录;

var/www/cgi-bin/                      可执行的CGI程序存放目录。

/var/log/httpd/                                           Apache日志目录;

/usr/sbin/apachectl                                     Apache启动脚本;

/usr/sbin/httpd                                           Apache二进制执行文件;

/usr/bin/htpasswd                      设置Apache目录密码访问;

/usr/local/apache2/bin                                Apache命令目录;

/usr/local/apache2/build                           Apache构建编译目录;

/usr/local/apache2/htdocs/               源码安装Apache网站发布目录;

/usr/local/apache2/cgi-bin                可执行的CGI程序存放目录;

/usr/local/apache2/include                           Apache引用配置文件目录;

/usr/local/apache2/logs                               Apache日志目录;

/usr/local/apache2/man                               Apache帮助文档目录;

/usr/local/apache2/manual                           Apache手册;

/usr/local/apache2/modules                         Apache模块路径。

Apache配置文件详解:

ServerTokens OS                    显示服务器的版本和操作系统内核版本;

ServerRoot  "/usr/local/apache2/"            Apache主配置目录;

PidFile run/httpd.pid                              PidFile进程文件;

Timeout 60                        不论接收或发送,当持续连接等待超过60秒则该次连接就中断;

KeepAlive Off                      关闭持续性的连接;

MaxKeepAliveRequests 100           当KeepAlive设置为On的时候,该数值可以决定此次连接能够传输的最大传输数量;

KeepAliveTimeout 65                当KeepAlive设置为On的时候,该连接在最后一次传输后等待延迟的秒数;

<IfModule prefork.c>                            Prefork MPM引擎配置段;

StartServers      8                   默认启动Apache工作进程数;

MinSpareServers   5                 最小空闲进程数;

MaxSpareServers   20               最大空闲进程数;

ServerLimit      4096                          Apache服务器最多进程数;

MaxClients      4096                每秒支持的最大客户端并发;

MaxRequestsPerChild  4000          每个进程能处理的最大请求数;

</IfModule>

<IfModule worker.c>                          Worker MPM引擎配置段;

StartServers        8                 默认启动Apache工作进程数;

MaxClients         4000              每秒支持的最大客户端并发;

MinSpareThreads     25             最小空闲线程数;

MaxSpareThreads     75            最小空闲线程数;

ThreadsPerChild     75              每个进程启动的线程数;

MaxRequestsPerChild  0            每个进程能处理的最大请求数,0表示无限制;

</IfModule>

LoadModule  mod_version.so               静态加载apache相关模块;

ServerAdmin support@jfedu.net              管理员邮箱,网站异常,错误信息会发生至该邮箱;

DocumentRoot   "/usr/local/apache2/htdocs/"  Apache网站默认发布目录;

<Directory "/data/webapps/www1">         设置/data/webapps/www1目录权限;

AllowOverride All

Options -Indexes FollowSymLinks

Order allow,deny

Allow from all

</Directory>

AllowOverride                            设置为None时,目录中.htaccess 文件将被完全忽略,当指令设置为All时,.htaccess文件生效;

Options -Indexes FollowSymLinks           禁止浏览目录,去掉”-“,表示浏览目录,常用于下载站点;

Order     allow,deny                       默认情况下禁止所有客户机访问;

Order   deny,allow                        默认情况下允许所有客户机访问;

Allow   from all                                             允许所有客户机访问。

Apache Rewrite规则:

Rewirte规则主要功能是实现浏览器访问HTTP URL的跳转,其正则表达式是基于Perl语言。通常而言,几乎所有的WEB服务器均可以支持URL重写。

Apache WEB服务器如需要使用Rewrite功能,须添加Rewrite模块,基于源码安装是指定参数“--enable-rewrite”,还有一种方法可以动态添加模块,以DSO模式安装Apache,利用模块源码和Apache apxs工具完成Rewrite模块的添加。

使用Apache Rewrite,除了安装Rewrite模块之外,还需在httpd.conf中的全局配置段或者虚拟主机配置段设置如下指令来开启Rewrite功能:

RewriteEngine on

URL规则重写的用途:

q  对搜索引擎优化(Search Engine Optimization,SEO)友好,利于搜索引擎抓取网站页面;

q  隐藏网站URL真实地址,浏览器显示更加美观;

q  网站变更升级,可以基于Rewrite临时重定向到其他页面。

Apache Rewrite规则使用中三个概念:

(1)       Apache Rewrite结尾标识符,用于Rewrite规则末尾,表示规则的执行属性。


R[=code](force redirect)                  强制外部重定向;


G(force URL to be gone)                 强制URL为GONE,返回410HTTP状态码;


P(force proxy)                                  强制使用代理转发;


L(last rule)                                     匹配当前规则为最后一条匹配规则,停止匹配后续规则;


N(next round)                                   重新从第一条规则开始匹配;


C(chained with next rule)                与下一条规则关联;


T=MIME-type(force MIME type)       强制MIME类型;


NC(no case)                                   不区分大小写。

(2)       Apache Rewrite规则常用表达式,主要用于匹配参数、字符串及过滤设置。

.                                                      匹配任何单字符;

[word]                                            匹配字符串:word;

[^word]                                         不匹配字符串:word;

jfedu|jfteach                                   可选择的字符串:jfedu|jfteach;

?                                                      匹配0到1个字符;

*                                                      匹配0到多个字符;

+                                                     匹配1到多个字符;

^                                                      字符串开始标志;

$                                                      字符串结束标志;

\n                                                     转义符标志。

(3)     Apache Rewrite变量,常用于匹配HTTP请求头信息、浏览器主机名、URL等。

HTTP headers:HTTP_USER_AGENT, HTTP_REFERER, HTTP_COOKIE, HTTP_HOST, HTTP_ACCEPT;

connection & request: REMOTE_ADDR, QUERY_STRING;

server internals::DOCUMENT_ROOT, SERVER_PORT, SERVER_PROTOCOL;

system stuff::TIME_YEAR, TIME_MON, TIME_DAY。

详解如下:

HTTP_USER_AGENT                用户使用的代理,例如浏览器;

HTTP_REFERER                       告知服务器,从哪个页面来访问的;

HTTP_COOKIE                       客户端缓存,主要用于存储用户名和密码等信息;

HTTP_HOST                              匹配服务器ServerName域名;

HTTP_ACCEPT                          客户端的浏览器支持的MIME类型;

REMOTE_ADDR                    客户端的IP地址

QUERY_STRING                       URL中访问的字符串;

DOCUMENT_ROOT                   服务器发布目录;

SERVER_PORT                          服务器端口;

SERVER_PROTOCOL                服务器端协议;

TIME_YEAR                             年;

TIME_MON                               月;

TIME_DAY               日;

(4)    Rewrite规则使用案例

#将a.com跳转至www.a.com 
RewriteEngine on                                 启用rewrite引擎;
RewriteCond  %{HTTP_HOST}   ^a.com        [NC]   匹配以a.com开头的域名,NC忽略大小写;
RewriteRule ^/(.*)$  http://www.a.com/$1  [L]    (.*)表示任意字符串,$1表示引用(.*)的中任意内容。
#将www.a.com www.b.com b.net跳转至www.c.net,OR表示或者
RewriteEngine on                                    
RewriteCond  %{HTTP_HOST}   www.a.com        [NC,OR]
RewriteCond  %{HTTP_HOST}   www.b.com        [NC,OR]
RewriteCond  %{HTTP_HOST}   ^b.net           [NC]
RewriteRule ^/(.*)$  http://www.c.net/$1     [L]
#访问www.b.net首页跳转至www.b.net/newindex/,R=301表示永久重定向
RewriteEngine on
RewriteRule ^/$  http://www.b.net/newindex/  [L,R=301]
#访问/xxx/123456跳转至/xxx?id=123456
RewriteEngine on
rewriteRule  ^/(.+)/(\d+)$  /$1?id=$2  [L,R=301]
#判断是否使用移动端访问网站,移动端访问跳转至m.abc.com
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^iPhone    [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Android   [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^WAP       [NC]
rewriteRule ^/$            http://m.abc.com/index.html    [L,R=301]
rewriteRule ^/(.*)/$       http://m.abc.com/$1            [L,R=301]

centos7-httpd服务器的更多相关文章

  1. Centos7+httpd+fastcgi安装提示错误

    搭建的环境: centos7 Apache/2.4.6 fastcgi2.4.6 rails4 在安装fastcgi的时候遇到了问题: 问题: ...... In file included from ...

  2. 基于CentOS7的服务器搭建(LAMP环境)

    基于CentOS7的服务器环境搭建(LAMP环境) 一.安装MySQL组件 1.由于在CentOS7中,默认yum安装库中不含有mysql,我们可以下载mysql的分支MariaDB,如果必须要下my ...

  3. centos7 httpd配置

    centos7 httpd配置 标签(空格分隔): 未分类 隐藏server信息 修改httpd.conf 设置,添加如下两行 ServerSignature Off ServerTokens Pro ...

  4. 基于腾讯Centos7云服务器搭建SVN版本控制库

    基于腾讯Centos7云服务器搭建SVN版本控制库 最近在和小伙伴组队参加一个关于人工智能的比赛,无奈不知道怎么处理好每个人的代码托管问题,于是找到了晚上免费svn托管服务器的服务,但是所给的免费空间 ...

  5. centos7邮件服务器SSL配置

    在上篇文章centos7搭建postfix邮件服务器的搭建中我们没有配置SSL,接下来我们在这篇文章中讲讲centos7邮件服务器SSL配置. 1. 创建SSL证书 [root@www ~]# cd ...

  6. 关于Apache (httpd)服务器防DDOS模块mod_evasive的使用说明

    关于Apache (httpd)服务器防DDOS模块mod_evasive的使用说明 1. mod_evasive 介绍: mod_evasive 是Apache(httpd)服务器的防DDOS的一个 ...

  7. 阿里云CentOS7.3服务器通过Docker安装Nginx

    前言 小编环境: 阿里云CentOS7.3服务器 docker 下面分享一次小编在自己的阿里云CentOS7.3服务器上使用Docker来安装Nginx的一次全过程 温馨小提示: 如果只是希望单纯使用 ...

  8. CentOS6.5环境下搭建Apache httpd服务器

    前期准备: 1.CentOS6.5虚拟系统: 2.CentOS6.5 IP地址:192.168.2.99 3.虚拟系统能上外网 下面我们就开始配置: 第一步:安装 首先我们需要把Apache http ...

  9. 阿里云CentOS7.2服务器的安装

    第一步:下载服务器系统ISO安装文件 我使用的是阿里云的镜像:因为阿里云的服务在国内相对比较成熟 服务器镜像下载如下:http://mirrors.aliyun.com/centos/7/isos/x ...

  10. httpd服务器的真实ip获取难题

    web服务器httpd中想要获取真正的ip是个难度,我们先要在配置文件中定义错误日志的格式:如下所示: 然后获取ip 上面三条输出日志中,第一条是直接访问http://172.16.213.157/i ...

随机推荐

  1. C# 随机列表

    一.问题描述 在EF中使用随机排序出现的问题:LINQ to Entities does not recognize the method 'System.Guid NewId()' method, ...

  2. CSS 绝对定位与相对定位的区别

    设置为绝对定位的元素框从文档流完全删除, 并相对于其包含块定位,包含块可能是文档中的另一个元素或者是初始包含块. 元素原先在正常文档流中所占的空间会关闭,就好像该元素原来不存在一样. 元素定位后生成一 ...

  3. jzoj6001. 【PKUWC2019模拟2019.1.15】Mines (tarjan)

    题面 题解 我们把每个地雷向它能炸到的地雷连边,不难发现同一个强联通分量里的点只要一个炸全炸 那么我们缩点,首先所有入度为\(0\)的强联通分量中必须得选一个地雷炸掉,而入度不为\(0\)的强联通分量 ...

  4. js new Date("2016-07-01 08:00:00") 格式在IE内核浏览器中显示NaN的问题

    js new Date("2016-07-01 08:00:00") 格式在IE内核浏览器中显示NaN的问题 废话就不多了,var dd = new Date("2016 ...

  5. Jmeter跨线程组传参

      我们知道,同一线程组中可以通过“正则表达式提取器”获取其中一个取样器的响应结果中的参数,直接传给线程组中的其他取样器.但其他线程组中的取样器也想使用同样的参数时,无法直接获取.举个例子: 提取“登 ...

  6. 13.组合查询--SQL

    利用UNION操作符将多条SELECT语句组合成一个结果集. 主要有两种情况需要使用组合查询: 在一个查询中从不同的表返回结构数据: 对一个表执行多个查询,按一个查询返回数据. UNION规则 UNI ...

  7. UVa1471

    保留有价值的数字的做法,实际上这道题因为n只有1e5,所以不需要这种优化. #include<bits/stdc++.h> #define inf 0x3f3f3f3f ; using n ...

  8. poj3264_Balanced Lineup

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 42349   Accepted: 19917 ...

  9. ASP.NET Core 2.0 源代码

    ASP.NET Core 2.0 源代码 在Visual Studio 2017中可以通过符号以及源链接,非常方便对 ASP.NET Core 2.0中源代码进行调试.在这篇文章中,我们将重点介绍如何 ...

  10. NetCore组件

    NetCore之组件写法 本章内容和大家分享的是Asp.NetCore组件写法,在netcore中很多东西都以提供组件的方式来使用,比如MVC架构,Session,Cache,数据库引用等: 这里我也 ...