centos7-httpd服务器
Apache WEB服务器入门简介:
Apache HTTP Server是Apache软件基金会的一个开源的网页服务器,可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是目前最流行的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]
- centos中复杂java包结构使用(不用eclipse执行)
- JDK8新特性之函数式接口
- centos中tree插件的使用与注意事项
- JDK8新特性之Stream流
- JDK8新特性之Lambda表达式
- 终于,Spring 5.0正式发布了!
- cordova插件- Geolocation
- SpringCloud服务安全连接
- maven编译时出现There are test failures
- SpringCloud Eureka自我保护机制
- cordova插件-File Transfer
- 什么是Kotlin?Java终结者?
- cordova插件-Device Motion
- cordova插件-Device Orientation
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 解决Ubuntu下使用linuxdeployqt打包Qt程序问题
- 使用python获取基金历史数据
- 如何在CentOS8上安装和配置Postfix邮件服务器的方法示例
- Linux下设置Vim编辑器里Tab的长度行号
- Centos定制rpm包、搭建yum仓库的教程
- linux手动、自动更改网卡MAC地址的方法
- Centos7的Firewalld防火墙基础命令详解
- Linux下安装或升级Python 2.7的操作方法
- Linux中git用https连接时不用每次输入密码的方法
- Centos7.3 RabbitMQ分布式集群搭建示例
- Ubuntu16.04环境下搭建FTP服务器的教程
- Linux 查看空间使用情况的实例详解
- CentOS 6.8 安装vsftpd的方法步骤
- centos7下搭建ZooKeeper3.4中间件常用命令小结
- Linux性能测试 pmap命令详解