httpd2.2的配置文件常见设置

 

 

 摘要:一个服务的配置文件非常重要,弄懂配置文件是熟练掌握服务的必要前提。

一、httpd-2.2常见文件介绍

(1)配置文件:

主配置文件尽量别改,改自己的子配置文件

  /etc/httpd/conf/httpd.conf 主配置文件

  /etc/httpd/conf.d/*.conf 自配置文件

检查配置语法:

  httpd -t 通用

  service httpd configtest centos7不支持

服务脚本:/etc/rc.d/init.d/httpd

脚本配置文件:/etc/sysconfig/httpd

服务控制和启动:

  chkconfig httpd on|off

  service {start|stop|restart|status|configtest|reload} httpd

站点网页文档根目录:

/var/www/html

模块文件路径 :

  /etc/httpd/modules 软连接

  /usr/lib64/httpd/modules

主程序文件:

  /usr/sbin/httpd

  /usr/sbin/httpd.worker

  /usr/sbin/httpd.event

主进程文件 :服务起来后会自动生成,可以查进程pid,最后不要手动加

  /etc/httpd/run/httpd.pid

日志文件目录:

  /var/log/httpd

    access_log: 访问日志

    error_log :错误日志

帮助文档包:httpd-manual ,按完包后,重启服务,就能看帮助文档,没网也可以看

 

(2)httpd 配置文件的组成:修改前先备份,养成好习惯

# grep "Section" /etc/httpd/conf/httpd.conf  人为的分成3大段,方便管理,可以随便放

### Section 1: Global Environment 全局环境配置

### Section 2: 'Main' server configuration 主服务器

### Section 3: Virtual Hosts 虚拟主机,全是注释,默认没有

 

配置格式:directive(指令) value(值)

  directive: 不区分字符大小写

  value: 为路径时,是否区分大小写,取决于文件系统

 

二、Httpd 2.2 常见配置:可以在官网或安装帮助包查看帮助

vim /etc/httpd/conf/httpd.conf 总配置文件

1、启动报错:提示没有名字fqdn

在总配置文件搜索 /ServerName,把注释去掉,随便写,最好写自己的网站名;启动就不报错了

修改后:

 

2、显示服务器版本信息

ServerTokens:管理响应首部信息的,显示服务器版本信息

搜索/ServerTokens,文件默认是OS,可以注释掉、删掉,有默认值full

ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full

  配置文件在的设置      首部显示的信息

① ServerTokens Prod[uctOnly]:Server: Apache

② ServerTokens Major: Server:Apache/2

③ ServerTokens Minor: Server:Apache/2.0

④ ServerTokens Min[imal]: Server:Apache/2.0.41

⑤ ServerTokens OS: Server:Apache/2.0.41 (Unix)

⑥ ServerTokens Full (or not specified):Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2

This setting applies to the entire server and cannot be enabled or disabled on a virtualhost-by-virtualhost basis. After version 2.0.44, this directive also controls the information presented by the ServerSignature directive.

建议使用:ServerTokens Prod 安全,显示越详细越不安全

可以查看帮助信息,要安装httpd-manual包,帮助信息很详细

实例:cur -I 192.168.37.106 查询头部信息

另:可以在调度器上设置:直接隐藏版本信息或随意修改

 

3、修改监听的IP和Port

搜索/Listen,默认80

Listen [IP:]PORT,不要随意更改,可以用于只想让特定的ip访问,不让其他人访问

(1) 省略IP 表示为0.0.0.0; 端口绑定所有ip

(2) Listen 指令至少一个,可重复出现多次,写多个,不能为空或注释掉,注释掉服务起不来

  Listen 80

  Listen 8080 写多个就可开启多个端口,但是访问的还是同一个网站

注意:改了端口,要在访问时加上自己改的端口

(3) 修改监听socket,重启服务进程方可生效

 

3、持久连接

Persistent Connection :连接持久建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成,默认关闭持久连接 KeepAlive Off

  断开条件:数量限制:100

  时间限制:以秒为单位, httpd-2.4 支持毫秒级

  副作用:对并发访问量较大的服务器,持久连接功能会使用有些请求得不到响应

  折中:使用较短的持久连接时间

设置: KeepAlive On|Off

   KeepAliveTimeout 15

  MaxKeepAliveRequests 100

测试:telnet WEB_SERVER_IP PORT

  GET /URL HTTP/1.1    模仿报文首部

  Host: WEB_SERVER_IP

 

4 、MPM( Multi-Processing Module )多路处理模块

(1)MPM 工作模式介绍:prefork、worker、 event(试验阶段)

① prefork 多进程I/O 模型每个进程响应一个请求,默认模型

  一个主进程 :生成和回收n个子进程 , 创建套接字,不响应请求

  多个子进程:工作work 进程,每个子进程处理一个请求;系统初始时,预先生成多个空闲进程,等待请求,最大不超过1024个

② worker :复用的多进程I/O 模型, 多进程多线程,IIS 使用此模型

  一个主进程: 生成m 个子进程,每个子进程负责生成n个线程,每个线程响应一个请求 ,并发响应请求:m*n

 event :事件驱动模型(worker 模型的变种)

  一个主进程:生成m个子进程,每个进程直接响应n个请求,并发响应请求:m*n ,有专门的线程来管理这些keep-alive 类型的监控线程,当有真实请求时, 将请求传递给服务线程,执行完毕后,又允许释放 。这样增强了高并发场景下的请求处理力 能力

httpd-2.2: event 测试版 ,centos6 默认

httpd-2.4 :event 稳定版,centos7 默认

  图示:

① prefork MPM

② worker MPM

③ event MPM

注意:httpd-2.2 不支持同时编译多个模块,所以只能编译时选定一个;rpm 安装的包提供三个二进制程序文件,分别用于实现对不同MPM 机制的支持

(2)确认方法:

  ps aux | grep httpd

  默认为/usr/sbin/httpd, 即prefork 模式

查看模块列表:

  查看静态编译的模块

    httpd -l

  查看静态编译及动态装载的模块

    httpd -M

动态模块加载:不需重启即生效

动态模块路径:/usr/lib64/httpd/modules

 

(3)更换使用的httpd 程序模块:

/etc/sysconfig/httpd 在这个文件中改

① HTTPD=/usr/sbin/httpd.worker  默认是被注释的,去掉注释就切换到worker程序了

重启服务生效

pstree -p|grep httpd 查看进程和线程

httpd.worker -l 模块换了,命令也换了

② Httpd 2.4 与之不同

以动态模块方式提供

配置文件:/etc/httpd/conf.modules.d/00-mpm.conf

httpd -M |grep mpm

重启服务 生效

pstree -p|grep httpd 查看进程和线程

 

(4)prefork 的默认配置:主配置文件中,搜索/prefork

<IfModule prefork.c> 根据工作环境设置

StartServers 8 一开启服务就准备8个进程

MinSpareServers 5 最小的空闲进程,先预留,不够就生成

MaxSpareServers 20 最大空闲进程

ServerLimit 256 最多进程数, 最大256

MaxClients 256 最大并发数

MaxRequestsPerChild 4000 子进程最多能处理请求数量。在处理MaxRequestsPerChild 个请求之后, 子进程将会被父进程终止,这时候子进程占用的内存就会释放( 为0时永远不释放)

</IfModule>

 

(5) worker 的默认配置:主配置文件中,搜索/worker

<IfModule worker.c>

StartServers 4 一开启服务就准备4个进程,4x25=100线程

MaxClients 300 最多300个线程

MinSpareThreads 25 最小空闲25线程

MaxSpareThreads 75 最大空闲75线程,和上边冲突,开服务先开启4个进程,再杀死1个进程

ThreadsPerChild 25 每个子进程最大25个线程

MaxRequestsPerChild 0 无限制

</IfModule>

(6) 测试性能:ab命令 yum -y install httpd-tools

ab -c 100 -n 1000 http://192.168.30.106/

-  c:并发连接数

  -n:总的连接数

结果:发现prefork和worker性能没有什么较大的差异

 

5 、DSO:Dynamic Shared Object

① 加载动态模块配置:/etc/httpd/conf/httpd.conf 主配置文件

配置指定实现模块加载格式:搜索/LoadModule

② 格式:

LoadModule <mod_name> <mod_path>

模块文件路径可使用相对路径:相对于ServerRoot 服务的根(设置的为/etc/httpd)

③ httpd -M 可以查询模块信息,若删除或注释掉一个模块,那个模块的功能就会禁用,且httpd -M 查询不到

因此,当我们需要用PHP时,可以写入PHP的模块,就能使用了

示例:

LoadModule auth_basic_module

modules/mod_auth_basic.so

 

6 、定义'Main' server (主站点) 的文档页面路径

搜索/DocumentRoot

格式:DocumentRoot "/path"

作用:文档路径映射:

  DocumentRoot 指向的路径为URL 路径的起始位置

注意:

① 可以写多行,但是下边的会覆盖上边的,最后还是使用下边的,写到子配置文件一样,因为子配置文件Include conf.d/*.conf在这行设置的上边,会被这行设置覆盖。

② 若设置的主站点不存在,那么服务会启动失败!

示例:

  DocumentRoot "/app/site1"

   http:/192.168.30.106/--> /app/site1/index.html

注意:SELinux 和iptables 的状态,要关掉

 

7、定义站点主页面

搜索:/DirectoryIndex

格式:DirectoryIndex index.html index.html.var

分析:

① 查询http://192.168.30.106/ 及其子目录时,不指定文件,可以默认打开目录下的index.html文件

② 若没有设置中的两个文件,看其他设置:下设置9,默认是报错;

有特定设置会显示特定设置,如首页;子配置文件 /etc/httpd/conf.d/welcome.conf 有设置,若只有 / 或多个,目录下没有index.html,就显示报错页面,welcome.conf这个设置优先级高,安全

报错页面

 

8 、站点访问控制常见机制

可基于两种机制指明对哪些资源进行何种访问控制访问控制机制有两种:客户端来源地址,用户账号

 文件系统路径:格式

<Directory "/path">

...

</Directory>

<Files "/path/file">

...

</Files>

<FilesMatch "PATTERN">

...

</FilesMatch>

例:主配置文件中,不能访问 .ht 开头的文件的设置

 

② URL 路径:支持正则,通配符

<Location "">

...

</Location>

<LocationMatch "">

...

</LocationMatch>

例:子配置文件,/etc/httpd/conf.d/welcome.conf 的设置

注意:支持正则,通配符

示例:

<FilesMatch "\.(gif|jpe?g|png)$"> 正则

<Files "?at.*"> 通配符

<Location /status> 绝对路径的目录

<LocationMatch "/(extra|special)/data">

 

9 、<Directory> 中"基于源地址"实现访问控制

(1) Options :后跟1 个或多个以空白字符分隔的选项列表,可在总配置文件中修改,也可从创建一个自配置文件中修改设置

在选项前的+ ,- 表示增加或删除指定选项

  常见选项:

  Indexes :指明的URL 路径下不存在定义的主页面资源相符的资源文件时,返回索引列表给用户,默认是不允许,加上不安全;有需要的时候,例如做yum源的时候

  FollowSymLinks :允许访问符号所指向的源文件,例:链接文件,默认允许

  None :全部禁用

  All:全部允许

注意:若冲突,后边的设置会覆盖前边的

子目录也可以设置的和父目录不一样,放在下边

例:vim /etc/httpd/conf.d/test.conf 子配置文件

 

(2) AllowOverride,和上边实现的效果一样,就是把设置放在目录的隐藏文件下.htaccess

与访问控制相关的哪些指令可以放在指定目录下的.htaccess(由AccessFileName 指定)文件中,覆盖之前的,.htaccess是主配置文件中设置指定的

用法:vim /etc/httpd/conf.d/test.conf

只对<directory> 语句有效

  AllowOverride All: 所有指令都有效

  AllowOverride None :.htaccess 文件无效

  AllowOverride AuthConfig Indexes 除了AuthConfig和Indexes的其它指令都无法覆盖

然后在.htaccess文件中设置,.htaccess放在所需要控制的目录下,例bbs目录

vim /app/site1/.htaccess

options +indexes -followsymlinks

 

(3) order 和allow 、deny,在2.4中已无效,有另外的权限控制

order :定义生效次序;写在后面的表示默认法则,覆盖,优先级高

  Order allow,deny

  Order deny,allow

  Allow from, Deny from

来源地址的表达方法:IP、网络:

  172.16

  172.16.0.0

  172.16.0.0/16

  172.16.0.0/255.255.0.0

分析:① 若不冲突,allow,deny都产生效果,例

若冲突,看谁在后,在后的优先级高,但是只限于冲突的

例:除107,这个网段的其他ip可以访问,但这个网段以外,都拒绝

③ 没在deny、allow中设置的,看allow/deny谁在后边,谁优先级高

 

10 、日志设定

日志类型:

  访问日志

  错误日志

错误日志:

  ErrorLog logs/error_log

  LogLevel warn

  loglevel 可选值:

  debug, info, notice, warn,error

  crit, alert, emerg

 

访问日志:搜索:/LogForma

定义访问日志格式:LogFormat format strings,

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

下边有选择哪一个日志

使用日志格式:

CustomLog logs/access_log combined

参考帮助:

http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats

各项设置的意思:可以随便改自己想要的

• %h 客户端IP 地址

• %l 远程用户, 启用mod_ident 才有效,通常为减号"-" "

• %u 验证(basic ,digest )远程用户, 非登录访问时,为一个减号"-"

• %t 服务器收到请求时的时间

• %r First line of request ,即表示请求报文的首行;记录了此次请求的"方法","URL" 以及协议版本

• %>s 最后的响应状态码

• %b 响应报文的大小,纯数据大小,单位是字节;不包括响应报文http 首部

• %{Referer}i 请求报文中首部"referer" 的值;即从哪个页面中的超链接跳转至当前页面的

  防止倒链,i就是首部的意思

• %{User-Agent}i 请求报文中首部"User-Agent" 的值;即发出请求的应用程序

帮助文档里都有

查询日志:tail /var/log/httpd/access_log

 

11 、设定默认字符集

AddDefaultCharset UTF-8(全球) 默认

中文字符集:GBK, GB2312(中文简体), GB18030

 

12 、定义路径别名

格式: Alias /URL/ "/PATH/" /URL/有没有都无所谓,虚拟的目录

Alias /download/ "/rpms/pub/"

  例:http://www.magedu.com/download/bash.rpm ==> /rpms/pub/bash.rpm

  http://www.magedu.com/images/logo.png ==> /www/htdocs/images/logo.png

 

13 、status 页面

这个功能需要status_module 模块

  httpd -M | grep status 查询这个模块有没有被加载

在总配置文件中搜索/server-status

LoadModule status_module modules/mod_status.so 这个模块在总配置文件有加载

<Location /server-status> 本来是注释掉的

  SetHandler server-status2 这个名字随便写,只要访问时用这个名字就行

  Order allow,deny

  Allow from 192.168.30.0/24

</Location>

ExtendedStatus On 显示扩展信息,默认也是注释的

显示状态页面

状态的类型:

  "-"等待连接 "S"启动 "R"处于读取状态

  "W"发送应答 "K"保持长连接 "D"dns查询

  "C"正处于关闭状态 "L"记录日志 "G"优雅的终止,温柔的断开

  "r"把空闲的worker进程清理 "."没有正常的进程

 

转载自:http://www.cnblogs.com/along21/p/7691642.html

版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。


不积跬步无以至千里

转载于:https://www.cnblogs.com/dannylinux/articles/7999156.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/390596.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode 149. 直线上最多的点数

题目 给你一个数组 points &#xff0c;其中 points[i] [xi, yi] 表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。 示例 1&#xff1a; 输入&#xff1a;points [[1,1],[2,2],[3,3]] 输出&#xff1a;3 示例 2&#xff1a; 输入&#xff1a;points [[1,1],[3,…

静态代理设计与动态代理设计

静态代理设计模式 代理设计模式最本质的特质&#xff1a;一个真实业务主题只完成核心操作&#xff0c;而所有与之辅助的功能都由代理类来完成。 例如&#xff0c;在进行数据库更新的过程之中&#xff0c;事务处理必须起作用&#xff0c;所以此时就可以编写代理设计模式来完成。…

6.3 遍历字典

遍历所有的键—值对 遍历字典时&#xff0c;键—值对的返回顺序也与存储顺序不同。 6.3.2 遍历字典中的所有键 在不需要使用字典中的值时&#xff0c;方法keys() 很有用。 6.3.3 按顺序遍历字典中的所有键 要以特定的顺序返回元素&#xff0c;一种办法是在for 循环中对返回的键…

Google Guava新手教程

以下资料整理自网络 一、Google Guava入门介绍 引言 Guavaproject包括了若干被Google的 Java项目广泛依赖 的核心库&#xff0c;比如&#xff1a;集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [comm…

数据科学领域有哪些技术_领域知识在数据科学中到底有多重要?

数据科学领域有哪些技术Jeremie Harris: “In a way, it’s almost like a data scientist or a data analyst has to be like a private investigator more than just a technical person.”杰里米哈里斯(Jeremie Harris) &#xff1a;“ 从某种意义上说&#xff0c;这就像是数…

初创公司怎么做销售数据分析_为什么您的初创企业需要数据科学来解决这一危机...

初创公司怎么做销售数据分析The spread of coronavirus is delivering a massive blow to the global economy. The lockdown and work from home restrictions have forced thousands of startups to halt expansion plans, cancel services, and announce layoffs.冠状病毒的…

leetcode 909. 蛇梯棋

题目 N x N 的棋盘 board 上&#xff0c;按从 1 到 N*N 的数字给方格编号&#xff0c;编号 从左下角开始&#xff0c;每一行交替方向。 例如&#xff0c;一块 6 x 6 大小的棋盘&#xff0c;编号如下&#xff1a; r 行 c 列的棋盘&#xff0c;按前述方法编号&#xff0c;棋盘格…

Python基础之window常见操作

一、window的常见操作&#xff1a; cd c:\ #进入C盘d: #从C盘切换到D盘 cd python #进入目录cd .. #往上走一层目录dir #查看目录文件列表cd ../.. #往上上走一层目录 二、常见的文件后缀名&#xff1a; .txt 记事本文本文件.doc word文件.xls excel文件.ppt PPT文件.exe 可执行…

WPF效果(GIS三维篇)

二维的GIS已经被我玩烂了&#xff0c;紧接着就是三维了&#xff0c;哈哈&#xff01;先来看看最简单的效果&#xff1a; 转载于:https://www.cnblogs.com/OhMonkey/p/8954626.html

r软件时间序列分析论文_高度比较的时间序列分析-一篇论文评论

r软件时间序列分析论文数据科学 &#xff0c; 机器学习 (Data Science, Machine Learning) In machine learning with time series, using features extracted from series is more powerful than simply treating a time series in a tabular form, with each date/timestamp …

leetcode 168. Excel表列名称

题目 给你一个整数 columnNumber &#xff0c;返回它在 Excel 表中相对应的列名称。 例如&#xff1a; A -> 1 B -> 2 C -> 3 … Z -> 26 AA -> 27 AB -> 28 … 示例 1&#xff1a; 输入&#xff1a;columnNumber 1 输出&#xff1a;“A” 示例 2&…

selenium抓取_使用Selenium的网络抓取电子商务网站

selenium抓取In this article we will go through a web scraping process of an E-Commerce website. I have designed this particular post to be beginner friendly. So, if you have no prior knowledge about web scraping or Selenium you can still follow along.在本文…

剑指 Offer 37. 序列化二叉树

题目 序列化是将一个数据结构或者对象转换为连续的比特位的操作&#xff0c;进而可以将转换后的数据存储在一个文件或者内存中&#xff0c;同时也可以通过网络传输到另一个计算机环境&#xff0c;采取相反方式重构得到原数据。 请设计一个算法来实现二叉树的序列化与反序列化…

一个简单的 js 时间对象创建

JS中获取时间很常见&#xff0c;凑凑热闹&#xff0c;也获取一个时间对象试试 首先&#xff0c;先了解js的获取时间函数如下&#xff1a; var myDate new Date(); //创建一个时间对象 myDate.getYear(); // 获取当前年份&#xff08;2位&#x…

裁判打分_内在的裁判偏见

裁判打分News flash: being an umpire is hard. Their job is to judge whether a ball that’s capable of moving upwards of 100 MPH or breaking 25 inches crossed through an imaginary zone before being caught. I don’t think many would argue that they have it ea…

LCP 07. 传递信息

小朋友 A 在和 ta 的小伙伴们玩传信息游戏&#xff0c;游戏规则如下&#xff1a; 有 n 名玩家&#xff0c;所有玩家编号分别为 0 &#xff5e; n-1&#xff0c;其中小朋友 A 的编号为 0 每个玩家都有固定的若干个可传信息的其他玩家&#xff08;也可能没有&#xff09;。传信息…

微信公众号自动回复加超链接最新可用实现方案

你在管理微信号时是否会有自动回复或者在关键字触发自动回复加一个超链接的需求呢&#xff1f;例如下图像王者荣耀这样&#xff1a; 很多有开发经验的朋友都知道微信管理平台会类似富文本编辑器&#xff0c;第一想到的解决方案会是在编辑框中加<a href网址 >显示文字<…

从Jupyter Notebook切换到脚本的5个理由

意见 (Opinion) 动机 (Motivation) Like most people, the first tool I used when started learning data science is Jupyter Notebook. Most of the online data science courses use Jupyter Notebook as a medium to teach. This makes sense because it is easier for be…

win10子系统linux编译ffmpeg

android-ndk-r14b(linux版) ffmpeg-4.0 开启win10子系统&#xff08;控制面板-》程序和功能-》启用或关闭Windows功能 然后在 适用与 Linux 的 Windows 子系统前面打勾&#xff09; 然后点击确定&#xff0c;等待安装&#xff0c;电脑会重启 然后在win10应用商店 搜索ubuntu安装…

leetcode 451. 根据字符出现频率排序

给定一个字符串&#xff0c;请将字符串里的字符按照出现的频率降序排列。 示例 1:输入: "tree"输出: "eert"解释: e出现两次&#xff0c;r和t都只出现一次。 因此e必须出现在r和t之前。此外&#xff0c;"eetr"也是一个有效的答案。 示例 2:输入…