一、httpd2.2的组成:

/etc/httpd:服务器的根目录

conf/httpd.conf,conf.d/*:配置文件

conf/magic:MIME的配置文件

logs:日志文件的存放路径,符号链接/var/log/httpd

modules:动态模块文件的存放路径,符号链接/usr/lib64/httpd/modules

run:httpd主进程pid的存放路径,符号链接/usr/run/httpd

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

在此配置文件中,所有的配置项均被称为指令(Directive)

指令的格式:Directive Value

在主配置文件中,所有的指令都被分组到三个配置段中:

### Section 1: Global Environment

### Section 2: 'Main' server configuration

### Section 3: Virtual Hosts

二、常用的配置指令:

Section 1: Global Environment:全局配置段

1.Listen Directive

定义服务器监听的有效套接字

格式:Listen [IPADDR:]port [protocol]

注意:

1.在各配置文件中,Listen指令可以出现多次,用于定义不同的监听套接字

2.Listen指令不能省略,否则服务器无法启动

3.如果省略IP地址,将会监听当前服务器所有被正确配置并生效的IP地址

4.在httpd2.2中,如果更改Listen中IP地址信息,则必须重启httpd进程才能生效,仅仅reload不能生效

2.KeepAlive Directive

开启或关闭HTTP协议的长链接功能

格式:KeepAlive On|Off

KeepAliveTimeout Directive

服务器在一个长链接上能够达到的子回话请求的最大时间间隔;默认的时间单位为秒

格式:KeepAliveTimeout number

MaxKeepAliveRequests Directive

一个长链接上所能够接受的最大的用户请求数量,默认是100个

格式:MaxKeepAliveRequests number

以上三条指令是与长链接相关的指令,长链接的断开条件:

时间限制、请求数量限制

使用Telnet测试长链接:

设置KeepAlive On ,重载httpd服务,默认 KeepAliveTimeout的值为15

3.MPM相关指令:

MPM:多道处理模块;

httpd-2.2的MPM不支持DSO机制,且event为测试模式

/usr/sbin/httpd

/usr/sbin/httpd.event

/usr/sbin/httpd.worker

通过修改/etc/sysconfig/httpd文件来完成MPM功能切换;

HTTPD=/usr/sbin/httpd.worker

每次更换MPM模块,都需要重启httpd服务后才能生效,/etc/sysconfig/httpd是服务启动脚本/etc/init.d/httpd的配置文件;

查看httpd或httpd.worker程序的模块列表:

httpd -M

httpd.worker -M

查看httpd或httpd.worker程序的静态编译模块列表

httpd -l

httpd.worker -l

与prefoik模块相关的配置指令:

<IfModule prefork.c>

StartServers       8

//在服务主进程启动之后,预先fork多少子进程

MinSpareServers    5

//最少预留的空闲子进程的数量

MaxSpareServers   20

//最多预留的空闲子进程的数量

ServerLimit      256

//为MaxClient指令定义上限

MaxClients       256

//最多的客户端并发访问量

MaxRequestsPerChild  4000

//每个子进程能够处理的客户端请求的最大值

</IfModule>

与worker模块相关的配置指令

<IfModule worker.c>

StartServers         4

//在服务主进程启动之后,预先fork多少个子进程;

MaxClients         300

//最多的客户端并发访问量

MinSpareThreads     25

//最少预留的空闲线程的数量

MaxSpareThreads     75

//最多预留的空闲线程的数量

ThreadsPerChild     25

//每个子进程可以管理的线程数量

MaxRequestsPerChild  0

//每个子进程可以处理的客户端请求的最大值

</IfModule>

4.DSO机制:

链接动态模块并将其添加至活动模块列表

格式:LoadModule module filename

例:

LoadModule auth_basic_module modules/mod_auth_basic.so

modules是相对于ServerRoot指令定义的根目录的路径而言的

5.Include Directive

可以包括除了主配置文件之外的其他服务配置文件;支持Globbing

格式:Include file-path | directory-path | wildcard

示例:

Inlude conf.d/*.conf

6.User Directive

指定启动子进程的用户ID和组ID

格式:User User-Id

Group Group-Id

Section 2: 'Main' server configuration,定义了默认的web站点的基本属性

    7.ServerAdmin Directive

定义了发送错误信息的邮箱地址;

格式:ServerAdmin email-address|URL

ServerName Directive

服务器做自我标识时使用的主机名和端口号的组合;

格式:ServerName [scheme://]domain-name|ip-address[:port]

DocumentRoot Directive

为web站点的资源提供路径映射;

格式:DocumentRoot directory-path

示例:

DocumentRoot "/var/www/html"

8.站点资源访问控制资源指令

1)基于文件系统的访问控制指令

a.基于指定目录的访问控制指令

<Directory "/PATH/TO/SOME_DIR">

Options Directive

AllowOverride Directive

Order Directive

Allow Directive

Deny Directive

</Directory>

b.基于特定文件的访问控制指令

<File "FILENAME">

Directive Value

</File>

c.基于模式匹配的方式进行访问控制的指令

<FilesMatch regex>

Directive Value

</FilesMatch>

<DirectoryMatch regex>

Directive Value

</DirectoryMatch>

2)基于URL的访问控制指令

a.基于URL进行访问控制:

<Location URL-path|URL>

Directive Value

</Location>

b.基于URL的模式匹配的方式进行访问控制:

<LocationMatch regex>

Directive Value

</LocationMatch>

3)指令具体内容

①Options Directive

指定的目录中激活web访问控制相关特性;

格式:Options [+|-]option [[+|-]option] ...

取值可以是:None, All, Indexes, Includes, FollowSymLinks, SymLinksifOwnerMatch, ExecCGI, MultiViews...

Indexes:启用DocumentRoot的索引特性;当web站点没有定义符合要求的主页或者主页不存在时,在浏览器上允许以索引的方式列表显示整个DocumentRoot中所有的资源给用户选择;一般用于资源下载站点;对于正常的web站点来说,应禁用此功能;

FollowSymLinks:跟踪符号链接并找到被链接的文件,并可以在客户端浏览器中打开;

SymLinksifOwnerMatch:只有处理客户端请求的子进程的所有者与符号链接文件的所有者为同一用户时,才跟踪符号链接;

②AllowOverride Directive

控制被允许放置于.htaccess文件中的指令是否生效;

格式:AllowOverride All|None|directive-type [directive-type]

httpd允许在web站点的文档根目录中以及各级子目录中使用.htaccess文件进行资源的访问控制;凡是放置于.htaccess文件中的指令,有继承的特性;如果每次执行指令都要读取该文件进行比对,则运行效率会下降,所以通常建议该指令的值设置为"None";

③Order Directive

定义基于IP地址的访问控制管理的顺序;

a.配置顺序:

根据指定的Allow和Deny的顺序来执行;

b.范围顺序:

匹配范围越小的,越优先执行;

格式:Order ordering

ordering可以包含两种通用顺序:

Allow, Deny:

先计算Allow指令的匹配,如果能够匹配任意规则,则允许;

再计算Deny指令的匹配,如果能够匹配任意规则,则阻止;

如果没有匹配,则默认阻止所有;

Deny, Allow:

先计算Deny指令的匹配,如果能够匹配任意规则,则阻止;

再计算Allow指令的匹配,如果能够匹配任意规则,则允许;

如果没有匹配,则默认允许所有;

④Deny Directive

控制阻止访问服务器的客户端主机;

格式:Deny from all|host|env=[!]env-variable [host|env=[!]env-variable] ...

Allow Directive

控制允许访问服务器的客户端主机;

格式:Allow from all|host|env=[!]env-variable [host|env=[!]env-variable] ...

host可以写成:

域名或FQDN:example.net www.abc.com

单个IP:172.16.0.1

逻辑网段:172.16 172.16.0.0/16 172.16.0.0/255.255.0.0

示例:

Order allow,deny

Allow from all

//允许所有客户端主机访问当前服务器的web站点服务;

Order deny,allow

Deny from 172.16.0.1

//仅阻止IP地址为172.16.0.1的主机访问当我服务器的web站点服务;

9.DirectoryIndex Directive

为当前web站点指定默认的主页文件名称;

格式:DirectoryIndex disabled | local-url [local-url] ...

注意:

1) DirectoryIndex指令之后可以设置多个本地URL作为主页文件名称;按照顺序从前到后进行名称匹配,如果能够匹配成功,就将该资源当作本站点的主页文档;如果没有匹配成功,且Options指令中也没有定义Indexes特性,则web服务器阻止本次请求;

2) 如果请求资源时明确的给出URL,则DirectoryIndex指令的值无任何意义;

10.日志相关指令

ErrorLog Directive

标明错误信息的日志记录的位置(文件路径)

格式:ErrorLog file-path|syslog[:[facility][:tag]]

示例:

ErrorLog logs/error_log

LogLevel Directive

控制错误日志记录的详细程度;

格式:LogLevel [module:]level [module:level] ...

level包括:emerg、alert、crit、error、warn、notice、info、debug

注意:

1) 日志记录等级越高,在错误日志中记录的信息就会越少;

2) 选择的日志记录等级,有向上兼容的特性;

CustomLog Directive

标明记录访问日志的文件的路径及日志记录的格式;

格式:CustomLog file format

示例:

CustomLog logs/access_log combined

LogFormat Directive

功能:描述了在访问日志中记录信息的特定格式;

格式:LogFormat format|nickname [nickname]

常用的format:

%h:远程主机名称;如果HostnameLookups的值设置为Off,则记录远程主机的IP地址;

%l:远程登录名称;如果没有登录名,就在日志中记录为"-";

%u:远程用户名称;记录通过身份验证之后访问资源的用户名称;

%t:收到客户端请求的时候的服务器的时间戳;[18/Sep/2011:19:18:28 -0400]

\"%r\":请求报文首部的首行;

"GET /index.html HTTP/1.1"

%>s:请求报文的状态信息;

%b:以字节为单位的响应报文的长度;

\"%{Referer}i\":访问此页面之前通过哪个超链接跳转而来;使用"{}"引用的内容是报文首部中的首部名称;

\"%{User-Agent}i\":客户端使用的http应用程序及相关信息;

示例:

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

LogFormat "%h %l %u %t \"%r\" %>s %b" common

LogFormat "%{Referer}i -> %U" referer

LogFormat "%{User-agent}i" agent

四种格式,默认选择combined

CustomLog logs/access_log combined

11.定义路径别名的指令:

Alias Directive

将指定的URL映射至本地的文件系统路径;

格式:Alias URL-path file-path|directory-path

示例:

Alias /icons/ "/var/www/icons/"

<Directory "/var/www/icons">

Options Indexes MultiViews FollowSymLinks

AllowOverride None

Order allow,deny

Allow from all

</Directory>

AliasMatch Directive

使用正则表达式将URL映射至本地的文件系统路径;

格式:AliasMatch regex file-path|directory-path

示例:

AliasMatch ^/exam(.*)?$ "/tmp/exam$1"

<Directory "/tmp/exam/">

Options None

AllowOverride None

Order allow,deny

Allow from all

</Directory>

12.服务器系统状态数据查询:

前提:LoadModule status_module modules/mod_status.so

<Location /server-status>

SetHandler server-status

Order deny,allow

Deny from all

Allow from 172.16

</Location>

ExtendedStatus On|Off:开启或关闭更多的额外状态信息展示;

三、虚拟主机配置段:

### Section 3: Virtual Hosts

<VirtualHost> Directive

启动并配置虚拟主机及相关参数;

格式:

<VirtualHost addr[:port] [addr[:port]] ...>

Directive Value

</VirtualHost>

使用虚拟主机:默认一个httpd仅能构建一个web站点,因此很多的情况下,我们需要在同一台服务器上架构多个web站点,此时则需要使用虚拟主机来定义。如果启用了虚拟主机,每个独立的Web站点都必须要有至少一个独立的主机标识:

IP地址 + Port + 主机头(请求报文首部中的Host首部的值,通常为FQDN)

三种典型的虚拟主机实现方式:

1) 基于IP地址构建的虚拟主机;

2) 基于Port构建的虚拟主机;

3) 基于主机头构建的虚拟主机;

注意:Main Server和Virtual Host不能同时被定义;而且一旦虚拟主机配置被激活,Main Server就不再有效;

常用指令:

NameVirtualHost Directive

功能:在使用基于主机头构建虚拟主机时,指定虚拟主机名称;

格式:NameVirtualHost addr[:port]

配置示例:

/etc/httpd/conf/httpd.conf中添加如下指令:

1
2
Listen172.16.88.99:8000
NameVirtualHost 172.16.88.99:80

/etc/httpd/conf.d/vhost1.conf的内容如下:

1
2
3
4
5
6
7
8
9
10
<VirtualHost 192.168.109.2:80>
    ServerNamewww.ppp213.com
    DocumentRoot"/myvhost/vhost1/"
    <Directory "/myvhost/vhost1">
        Options None
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

/etc/httpd/conf.d/vhost2.conf的内容如下

1
2
3
4
5
6
7
8
9
10
<VirtualHost 192.168.109.20:8080>
    ServerNamewww.ppp213.cn
    DocumentRoot"/myvhost/vhost2/"
    <Directory "/myvhost/vhost2/">
        Options None
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

/etc/httpd/conf.d/vhost3.conf的内容如下

1
2
3
4
5
6
7
8
9
10
<VirtualHost 192.168.109.20:80>
    ServerName www.ppp213.org
    DocumentRoot "/myvhost/vhost3/"
    <Directory "/myvhost/vhost3/">
    Options None
    AllowOverride None
    Order allow,deny
    Allow from all
    </Directory>
</VirtualHost>

为主机添加新的ip地址 192.168.109.20:

1
ip add add 192.168.109.20/16 dev eth0 label eth0:0

分别创建/myvhost/vhost1,/myvhost/vhost2,/myvhost/vhost3,并再其下创建index.html,重新载入httpd服务后,分别访问192.168.109.2、192.168.109.20、192.168.109.20:8080

linux系统web站点设置-http基础设置的更多相关文章

  1. Linux系统WEB服务之Nginx基础入门

    一.Nginxi简介 Nginx是什么?它是一个开源.高性能的WEB服务器软件和代理服务器软件,由俄罗斯人Igor Sysoev 开发实现.它的功能主要分三类,第一是它作为一个WEB服务软件使用:第二 ...

  2. Linux系统Web网站目录和文件安全权限设置

    查看Linux文件的权限:ls -l 文件名称查看linux文件夹的权限:ls -ld 文件夹名称(所在目录)例如: drwxr-xr-x 2 root root 4096 2009-01-14 17 ...

  3. linux系统web日志分析脚本

    linux系统web日志分析这方面工具比较多,比如logwatch或awstats等使用perl语言开发,功能都非常强大.但这些软件都需要进行一些配置,很多朋友往往在技术方面没有投入太多力量,即便参照 ...

  4. Linux系统如何将某一程序设置为开机自启动

    文章来源:百度知道. Linux开机启动程序详解 我们假设大家已经熟悉其它操作系统的引导过程,了解硬件的自检引导步骤,就只从Linux操作系统的引导加载程序(对个人电脑而言通常是LILO)开始,介绍L ...

  5. 在linux系统中通过fw_printenv查看和设置u-boot中的环境变量

    uboot下可以通过命令访问(printenv)和修改环境变量(setenv),但是如果需要在Linux系统下访问这些数据该怎么办呢?其实uboot早就帮我们想好了.  1.编译fw_printenv ...

  6. 2.Linux系统之硬盘与分区基础知识

    我们是在虚拟机上安装的Linux系统.在安装的过程中,可能会遇到磁盘分区的问题,我们下面简单介绍一下分区的原理. 1.硬盘的基础知识 下面是一块空白的硬盘: 这是一块格式化后的硬盘: 格式化就是,在空 ...

  7. 虚拟机克隆linux系统后需要做的网络设置

    1.vim /etc/sysconfig/network-scripts/ifcfg-eth0删除HWMAC地址行,然后重新分配静态IP/掩码/网关/DNS 2.vim /etc/udev/rules ...

  8. Linux系统学习 三、网络基础—虚拟机网络配置

    Linux网络基础 Linux的ip地址配置 Linux网络配置文件 常用网络命令 虚拟机网络参数配置 1.配置Linux的IP地址 首先配置一个IP地址,让IP生效. ifconfig查看当前网络配 ...

  9. Linux系统学习笔记之 1 基础命令

    翻看日记,看到以前自己学习Linux是的笔记来了,温故而知新乎.   文件命名规则: 1.除了/之外,所有的字符都合法. 2.有些字符最好不要用,如空格符.制表符.退格符.和@ # & ( ) ...

随机推荐

  1. 吴裕雄 python 机器学习-NBYS(1)

    import numpy as np def loadDataSet(): postingList=[['my', 'dog', 'has', 'flea', 'problems', 'help', ...

  2. substring 比较(c#和Java)

    Java中 string str = "123456"; str .substring(5); 结果:6 Substring(A)表示从原字符串的指定索引号A开始截取直到原字符串的 ...

  3. 以字符串形式获取excel单元格中的内容

    public static String getCellValue(XSSFCell cell) { if (cell == null) { return ""; } switch ...

  4. 可上下拖动且有浮沉动画的View

    package com.ifenglian.superapp1; import android.animation.Animator;import android.animation.Animator ...

  5. Oracle中Null与空字符串' '的区别

    含义解释: 问:什么是NULL? 答:在我们不知道具体有什么数据的时候,也即未知,可以用NULL,我们称它为空,ORACLE中,含有空值的表列长度为零. ORACLE允许任何一种数据类型的字段为空,除 ...

  6. 学习Auxre记录

    1.下载地址:https://www.axure.com.cn/3510/(可以免费试用30天) 2.视频教程:https://huke88.com/course/6455.html 3.文字教程:h ...

  7. http://ctf.bugku.com/challenges#%E6%B8%B8%E6%88%8F%E8%BF%87%E5%85%B3--游戏过关

      做成功这道逆向题了,哈哈哈哈.   启程.   运行了一下子程序,发现它是要保证所有灯亮着才会给flag.如下图所示.   我聪明滴认为首先可以通过关键字符串找到关键代码位置哦. 1.找到关键代码 ...

  8. struct和union,enum分析

    空结构体占用的内存多大? struct d { }; int main() { struct d d1; struct d d2; printf("%d,%0x\n",sizeof ...

  9. stm32DMA

    源和目标地址必须按数据传输宽度对齐 支持循环的缓冲器管理 可编程的数据传输数目:最大为65536 每一个通道都有一组寄存器 DMA_CPARx.DMA_CMARx是没有差别的,它们都可以存放外设的地址 ...

  10. [剑指Offer]9-用两个栈实现队列

    题目链接 https://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6?tpId=13&tqId=11158&t ...