Linux 第76天 http配置文件内容解析

Linux 第76天 http配置文件内容解析

时间: 20181018

        个人小站,欢迎访问: www.winthcloud.top


目录

httpd 常见配置

日志设定

虚拟主机(重点)

mod_deflate模块

https:http over ssl

总结


httpd 2.2常见配置

httpd配置文件的组成:

grep "Section" /etc/httpd/conf/httpd.conf

### Section 1: Global Environment

### Section 2: 'Main' server configuration

### Section 3: Virtual Hosts

配置格式:directive value

directive: 不区分字符大小写

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

ServerName 主机名


显示服务器版本信息

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


持久连接

Persistent Connection:连接建立,每个资源获取完成后不会断开连接,而是继续

等待其它的请求完成,默认关闭持久连接

断开条件: 

1)数量限制:100

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

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

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

设置:KeepAlive On|Off

KeepAliveTimeout 15

MaxKeepAliveRequests 100

测试:telnet WEB_SERVER_IP PORT

GET /URL HTTP/1.1

Host: WEB_SERVER_IP


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

prefork的默认配置:

<IfModule prefork.c>

StartServers 8

MinSpareServers 5

MaxSpareServers 20

ServerLimit 256 最多进程数,最大20000

MaxClients 256 最大并发

MaxRequestsPerChild 4000 子进程最多能处理的请求数量。在处理

MaxRequestsPerChild 个请求之后,子进程将会被父进程终止,这时候子进

程占用的内存就会释放(为0时永远不释放)

</IfModule>


worker的默认配置:

<IfModule worker.c>

StartServers 4

MaxClients 300

MinSpareThreads 25

MaxSpareThreads 75

ThreadsPerChild 25

MaxRequestsPerChild 0 无限制

</IfModule>



定义'Main' server的文档页面路径

DocumentRoot “/path”

文档路径映射:

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

示例:

DocumentRoot "/app/data“

http://HOST:PORT/test/index.html --> /app/data/test/index.html


定义站点主页面

DirectoryIndex index.html index.html.var


站点访问控制常见机制

可基于两种机制指明对哪些资源进行何种访问控制

访问控制机制有两种:客户端来源地址,用户账号

文件系统路径:

<Directory “/path">

...

</Directory>

<File “/path/file”>

...

</File>

<FileMatch "PATTERN">

...

</FileMatch>

<Directory>中“基于源地址”实现访问控制

(1) Options:后跟1个或多个以空白字符分隔的选项列表

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

常见选项:

Indexes:指明的URL路径下不存在与定义的主页面资源相符的资源

文件时,返回索引列表给用户

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

None:全部禁用

All: 全部允许

(2) AllowOverride

与访问控制相关的哪些指令可以放在指定目录下的.htaccess(由AccessFileName

指定)文件中,覆盖之前的配置指令

只对<directory>语句有效

AllowOverride All: .htaccess中所有指令都有效

AllowOverride None: .htaccess 文件无效

AllowOverride AuthConfig Indexes 除了AuthConfig 

和Indexes的其它指令都无法覆盖


(3) order和allow、deny  (http2.2配置)

放在directory, .htaccess中

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

示例:

<files "*.txt">

order deny,allow

deny from 172.16. 100.100

allow from 172.16

</files>

<filematch “.*\.(conf|ini)$">

order allow,deny

deny from 172.16.100.100

allow from 172.16

</filematch>


基于IP的访问控制(http2.4配置)

无明确授权的目录,默认拒绝

允许所有主机访问:Require all granted

拒绝所有主机访问:Require all denied

控制特定的IP访问:

Require ip IPADDR:授权指定来源的IP访问

Require not ip IPADDR:拒绝特定的IP访问

控制特定的主机访问:

Require host HOSTNAME:授权特定主机访问

Require not host HOSTNAME:拒绝HOSTNAME:

FQDN:特定主机

domin.tld:指定域名下的所有主机

不能有失败,至少有一个成功匹配才成功,即失败优先

<RequireAll>

Require all granted

Require not ip 172.16.1.1 拒绝特定IP

</RequireAll>

多个语句有一个成功,则成功,即成功优先

<RequireAny>

Require all denied

require ip 172.16.1.1 允许特定IP

</RequireAny>


URL路径:

<Location "">

...

</Location>

<LocationMatch "">

...

</LocationMatch>

示例:

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

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

<Location /status>

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


日志设定

日志类型:

访问日志

错误日志

错误日志:

ErrorLog logs/error_log

LogLevel warn

LogLevel 可选值: debug, info, notice, warn,error, crit, alert, emerg

访问日志:

定义日志格式:LogFormat format strings

LogFormat "%h %l %u %{%Y-%m-%d %H:%M:%S}t \"%r\" %>s %b

\"%{Referer}i\" \"%{User-Agent}i\"" testlog (与上一行一行内容)

使用日志格式:

CustomLog logs/access_log testlog

参考帮助: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”的值;即从哪个页面中的超链

接跳转至当前页面的

%{User-Agent}i 请求报文中首部“User-Agent”的值;即发出请求的

应用程序


设定默认字符集

AddDefaultCharset UTF-8 此为默认值

中文字符集:GBK, GB2312, GB18030


定义路径别名

格式:Alias /URL/ "/PATH/"

DocumentRoot "/www/htdocs"

http://www.winthcloud.com/download/bash.rpm

==>/www/htdocs/download/bash.rpm


Alias /download/ "/rpms/pub/"

http://www.winthcloud.com/download/bash.rpm

==>/rpms/pub/bash.rpm

http://www.winthcloud.com/images/logo.png

==>/www/htdocs/images/logo.png


基于用户的访问控制

认证质询:WWW-Authenticate:响应码为401,拒绝客户端请求,并说明要求

客户端提供账号和密码

认证:Authorization:客户端用户填入账号和密码后再次发送请求报文;认证

通过时,则服务器发送响应的资源

认证方式两种:

basic:明文

digest:消息摘要认证,兼容性差

安全域:需要用户认证后方能访问的路径;应该通过名称对其进行标识,以便

于告知用户认证的原因

用户的账号和密码

虚拟账号:仅用于访问某服务时用到的认证标识

存储:文本文件,SQL数据库,ldap目录存储,nis等


ServerSignature On | Off | EMail

当客户请求的网页并不存在时,服务器将产生错误文档,缺省情况下由于打开了

ServerSignature选项,错误文档的最后一行将包含服务器的名字、Apache的版本

等信息

如果不对外显示这些信息,就可以将这个参数设置为Off

设置为Email,将显示ServerAdmin 的Email提示


status页面

LoadModule status_module modules/mod_status.so

<Location /server-status>

SetHandler server-status

Order allow,deny

Allow from 172.16

</Location>

ExtendedStatus On 显示扩展信息


虚拟主机(重点)

站点标识: socket

IP相同,但端口不同

IP不同,但端口均为默认端口

FQDN不同: 请求报文中首部 Host: www.winthcloud.com

有三种实现方案:

基于ip:为每个虚拟主机准备至少一个ip地址

基于port:为每个虚拟主机使用至少一个独立的port

基于FQDN:为每个虚拟主机使用至少一个FQDN

注意:一般虚拟机不要与main主机混用;因此,要使用虚拟主机,一般先禁用main主机

禁用方法:注释中心主机的DocumentRoot指令即可


虚拟主机的配置方法:

<VirtualHost IP:PORT>

ServerName FQDN

DocumentRoot “/path"

</VirtualHost>

建议:上述配置存放在独立的配置文件中

其它可用指令:

ServerAlias:虚拟主机的别名;可多次使用

ErrorLog: 错误日志

CustomLog:访问日志

<Directory “/path"> </Directory>

Alias

基于IP的虚拟主机示例:

<VirtualHost 172.16.100.6:80>

ServerName www.a.com

DocumentRoot "/www/a.com/htdocs"

</VirtualHost>

<VirtualHost 172.16.100.7:80>

ServerName www.b.net

DocumentRoot "/www/b.net/htdocs"

</VirtualHost>

<VirtualHost 172.16.100.8:80>

ServerName www.c.org

DocumentRoot "/www/c.org/htdocs"

</VirtualHost>

基于端口的虚拟主机:可和基于IP的虚拟主机混和使用

listen 808

listen 8080

<VirtualHost 172.16.100.6:80>

ServerName www.a.com

DocumentRoot "/www/a.com/htdocs"

</VirtualHost>

<VirtualHost 172.16.100.6:808>

ServerName www.b.net

DocumentRoot "/www/b.net/htdocs"

</VirtualHost>

<VirtualHost 172.16.100.6:8080>

ServerName www.c.org

DocumentRoot "/www/c.org/htdocs"

</VirtualHost>


基于FQDN的虚拟主机:

NameVirtualHost *:80 httpd2.4不需要此指令

<VirtualHost *:80>

ServerName www.a.com

DocumentRoot "/www/a.com/htdocs"

</VirtualHost>

<VirtualHost *:80>

ServerName www.b.net

DocumentRoot "/www/b.net/htdocs"

</VirtualHost>

<VirtualHost *:80>

ServerName www.c.org

DocumentRoot "/www/c.org/htdocs"

</VirtualHost>


mod_deflate模块

使用mod_deflate模块压缩页面优化传输速度

适用场景:

(1) 节约带宽,额外消耗CPU;同时,可能有些较老浏览器不支持

(2) 压缩适于压缩的资源,例如文本文件

LoadModule deflate_module modules/mod_deflate.so

SetOutputFilter DEFLATE

# Restrict compression to these MIME types

AddOutputFilterByType DEFLATE text/plain

AddOutputFilterByType DEFLATE text/html

AddOutputFilterByType DEFLATE application/xhtml+xml

AddOutputFilterByType DEFLATE text/xml

AddOutputFilterByType DEFLATE application/xml

AddOutputFilterByType DEFLATE application/x-javascript

AddOutputFilterByType DEFLATE text/javascript

AddOutputFilterByType DEFLATE text/css


Level of compression (Highest 9 - Lowest 1)

DeflateCompressionLevel 9

排除特定旧版本的浏览器,不支持压缩

Netscape 4.x 只压缩text/html

BrowserMatch ^Mozilla/4 gzip-only-text/html

Netscape 4.06-08三个版本 不压缩

BrowserMatch ^Mozilla/4\.0[678] no-gzip

Internet Explorer标识本身为“Mozilla / 4”,但实际上是能够处理请求的压缩。

如果用户代理首部匹配字符串“MSIE”(“B”为单词边界”),就关闭之前定

义的限制

BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html


https:http over ssl

SSL会话的简化过程

(1) 客户端发送可供选择的加密方式,并向服务器请求证书

(2) 服务器端发送证书以及选定的加密方式给客户端

(3) 客户端取得证书并进行证书验证

如果信任给其发证书的CA

(a) 验证证书来源的合法性;用CA的公钥解密证书上数字签名

(b) 验证证书的内容的合法性:完整性验证

(c) 检查证书的有效期限

(d) 检查证书是否被吊销

(e) 证书中拥有者的名字,与访问的目标主机要一致

(4) 客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发

送给服务器,完成密钥交换

(5) 服务用此密钥加密用户请求的资源,响应给客户端

注意:SSL是基于IP地址实现,单IP的主机仅可以使用一个https虚拟主机


https实现

(1) 为服务器申请数字证书

测试:通过私建CA发证书

(a) 创建私有CA

(b) 在服务器创建证书签署请求

(c) CA签证

(2) 配置httpd支持使用ssl,及使用的证书

yum -y install mod_ssl

配置文件:/etc/httpd/conf.d/ssl.conf

DocumentRoot

ServerName

SSLCertificateFile

SSLCertificateKeyFile

(3) 测试基于https访问相应的主机

openssl s_client [-connect host:port] [-cert filename] 

[-CApath directory] [-CAfile filename]


重定向

Redirect [status] URL-path URL

status状态:

Permanent: 返回永久重定向状态码 301

Temp:返回临时重定向状态码302. 此为默认值

示例:

Redirect temp / https://www.winthcloud.com/

http重定向https

将http请求转发至https的URL


HSTS

HSTS:HTTP Strict Transport Security

服务器端配置支持HSTS后,会在给浏览器返回的HTTP首部中携带

HSTS字段。浏览器获取到该信息后,会将所有HTTP访问请求在

内部做307跳转到HTTPS。而无需任何网络过程

HSTS preload list

是Chrome浏览器中的HSTS预载入列表,在该列表中的网站,使用

Chrome浏览器访问时,会自动转换成HTTPS。Firefox、Safari、

Edge浏览器也会采用这个列表

实现HSTS示例:

vim /etc/httpd/conf/httpd.conf

Header always set Strict-Transport-Security "max-age=31536000"

RewriteEngine on

RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=302]


总结

1. alias 用来定义将web地址后边跟的路径连接至服务器的真正文件系统路径

2. redirect 将内部连接重定向至其它url并通知客户端去新的url去取资源

3. 实现https时要不将80的虚拟主机重定向至https要不就将端口改为443(推荐前一种)


猜你喜欢

转载自blog.51cto.com/winthcloud/2308003