httpd2.4版本的葵花宝典

httpd用来实现http协议的,可用来搭建web服务器的应用程序。下面就针对搭建web服务器的各类配置进行一一描述。html

使用的操做系统为centos7.2web


修改监听的ip端口数据库

Listen [ip:]portapache

注意: 1>. Listen 默认监听在本机上的全部ip地址之上vim

  2>. 可定义多个接听端口。centos

编辑地方:安全

Listen 127.0.0.1:80

测试结果:  192.168.203.157为服务器另一个ip地址bash

[root@centos 7 html]# curl http://192.168.203.157  
curl: (7) Failed connect to 192.168.203.157:80; Connection refused
[root@centos 7 html]# curl http://127.0.0.1
magedu.com


编辑地方:服务器

Listen 80
Listen 8080

测试结果:dom

[root@centos 7 html]# curl http://192.168.203.157
magedu.com
[root@centos 7 html]# curl http://192.168.203.157:8080
magedu.com


设置是否持久链接:

判断是否为持久链接:

1>. 首先telnet命令使用验证服务器当前支持的链接状态:

[root@centos6 ~]# telnet 192.168.203.157 80
Trying 192.168.203.157...
Connected to 192.168.203.157.
Escape character is '^]'.
GET /index.htmlhttp/1.1
Host: 192.168.203.157
 
HTTP/1.1 200 OK
Date: Thu, 29 Sep 2016 12:57:50 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Thu, 29 Sep 2016 12:36:35 GMT
ETag: "b-53da4ba7495b0"
Accept-Ranges: bytes
Content-Length: 11
Content-Type: text/html; charset=UTF-8
 
magedu.com
Connection closed by foreign host.

客户端接收到数据后,等待一会时间链接关闭,说明当前服务器支持的是长链接,只是有时间限制。


修改配置文件:

第一种状况:

]# vim /etc/httpd/conf.d/keepalive.conf
KeepAlive off


第二种状况:

]# vim /etc/httpd/conf.d/keepalive.conf
KeepAlive on


第三种状况(第二种状况的扩展):

]# vim keepalive.conf 
KeepAlive on
KeepAliveTimeout 20   //  请求时间超过20秒,则断开链接,默认秒为单位
MaxKeepAliveRequests 10 // 请求资源数量超过10个的话,则断开连接


DSO(动态的装载和卸载模块文件)

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

模块文件都被写入到/etc/httpd/conf.modules.d/*.conf文件中

httpd2.4版本管理模块的的配置文件都放在/etc/httpd/conf.modules.d/*.conf文件,而httpd2.2配置文件则放到/etc/httpd/modules/*.so文件

好比:

vim /etc/httpd/conf.modules.d/00-lua.conf
LoadModule lua_module modules/mod_lua.so

httpd默认是加载lua这个模块的。

[root@centos 7 conf.modules.d]# httpd -M | grep lua
 lua_module (shared)

/etc/httpd/conf.modules.d/00-lua.conf中这一条目注释后,再去查看。

vim /etc/httpd/conf.modules.d/00-lua.conf
#LoadModule lua_module modules/mod_lua.so

从新加载httpd程序。

systemctl reload httpd
httpd -M | grep lua

httpd并无加载mod_lua这一模块。


日志文件配置

日志文件有两种类型:错误日志error_log、访问日志access_log

error_log   错误日志文件被定义在/etc/httpd/conf/httpd.conf文件中,且日志的级别为warn

access_log  文件的特别有用,在生产坏境下,能够分析到访问源的ip地址、从哪里跳转来等.

access_log很是有用,因此在实际生产坏境下,常常要本身特定日志的格式.


官方站点解析:http://httpd.apache.org/docs/2.4/mod/mod_log_config.html#logformat

access_log日志中各参数表示的意思:

%h:访问源ip地址

%l:.....

%u:.....

%t: time 访问的时间

\  \为转移字符,表示

%r: First line of request.

%>s:  记录最后一次的状态码    

%s: 第一次状态码

%{VARNAME}i:......

%{Referer}i: 从哪里跳转来。


使用本地官方站点文件

1>. 安装httpd-manual安装包。

2>. 重载服务。

经过http://ip/manual  来实现对官方文档的访问


DocumentRoot的配置

在httpd2.4版本,指定新的DocumentRoot后,必须再去指定相应目录的参数选项才能够。

DocumentRoot "/website/html"
<Directory "/website/html">
    AllowOverride None
    # Allow open access:
    Require all granted
</Directory>

在httpd2.2版本,指定新的DocumentRoot后,不须要指定目录的参数选项。

 

目录中经常使用选项总结:

(1) Options:用于定义资源的展现方式; 后跟以空白字符分隔的“选项”列表

子选项:

        Indexes (Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews)

        None

        All

注意:

1>.Indexes当系统没有给定相应的首页文件的话,会将DocumentRoot指定的目录中文件以列表的形式展现出来。

2>.Indexes有必定的安全的漏洞,在生产坏境下建议使用None功能将此功能关闭

 

(2) AllowOverride:httpd容许在网页文档的各目录下使用隐藏文件.htaccess来各自的访问控制;此指令定义哪此指令能够在.htaccess中定义

AllowOverride的各个选项:

FileInfo AuthConfig Limit

None

All

注意: Options也有安全漏洞,建议使用None选项将此功能关闭


(3) Require:

容许全部客户端访问:Require all granted

拒绝全部客户端访问:Require all denied


另一种表示的方法:

<RequireAll>

Require ip 10.1.0.0/16

Require all denied

</RequireAll>


控制特定的客户端访问:

Require ip IP|NETWORK

Require not ip IP|NETWORK


Require host HOSTNAME

Require not  host HOSTNAME

HOSTNAME的表示方法:FQDN.或则是domain.tld.


定义站点主页面:

<IfModule dir_module>
    DirectoryIndex default.html
</IfModule>


路径别名

编辑配置文件/etc/httpd/conf/httpd.conf

 Alias /myweb/ /website/myweb/
 <Directory "/website/myweb/">
    AllowOverride None
    Require all granted
</Directory>

 测试:

wKioL1fzUfzDMz9GAAAyfUkk0zQ514.png


虚拟主机:

虚拟主机的实现能够基于ip、端口、主机名称实现虚拟主机。

第一种: 基于ip地址实现虚拟主机.

步骤: 给网卡添加一个别名地址

#ip a add 192.168.203.200 dev eno33554984
#ip a
inet 192.168.203.157/24 brd 192.168.203.255 scope global eno33554984
     valid_lft forever preferred_lft forever
inet 192.168.203.200/32 scope global eno33554984
     valid_lft forever preferred_lft forever


修改配置文件: vhost_ip.conf

<VirtualHost 192.168.203.157:80>
    DocumentRoot "/vhost/www1/html"
    ServerName www1.magedu.com
    <Directory "/vhost/www1/html">
        Options None
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>
 
<VirtualHost 192.168.203.200:80>
    DocumentRoot "/vhost/www2/html"
    ServerName www2.magedu.com
    <Directory "/vhost/www2/html">
        Options None
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>

测试结果:

wKiom1fzUt-ThG9pAAA***kH4to308.png

wKioL1fzUu3Cl9Y5AAAtwlmh4Ig676.png


第二种状况:基于端口实现虚拟主机:

修改配置文件:

<VirtualHost 192.168.203.157:80>
    DocumentRoot "/vhost/www1/html"
    ServerName www1.magedu.com
    <Directory "/vhost/www1/html">
Options None
        AllowOverride None
Require all granted
    </Directory>
</VirtualHost>
 
<VirtualHost 192.168.203.157:8080>
    DocumentRoot "/vhost/www3/html"
    ServerName www1.magedu.com
    <Directory "/vhost/www3/html">
Options None
        AllowOverride None
Require all granted
    </Directory>
</VirtualHost>


测试结果:

wKioL1fzU1Gi3B18AAArmOWCvtc536.png

wKiom1fzU16Qc8IBAAAwILkaYdI635.png


第三种状况: 基于ServerName实现虚拟主机(这个是最经常使用的)

配置文件的修改:

<VirtualHost *:80>
    DocumentRoot "/vhost/www1/html"
    ServerName www1.magedu.com
    <Directory "/vhost/www1/html">
        Options None
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>
<VirtualHost *:80>
    DocumentRoot "/vhost/www2/html"
    ServerName www2.magedu.com
    <Directory "/vhost/www2/html">
        Options None
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>
 
<VirtualHost *:80>
    DocumentRoot "/vhost/www3/html"
    ServerName www3.magedu.com
    <Directory "/vhost/www3/html">
        Options None
        AllowOverride None

测试结果:

wKiom1fzU6PCnHaUAAAPtkFVQlE336.png



status页面 (查看服务器的状态页面信息)

[root@centos 7 conf.d]# vim status.conf

<Location /status>

SetHandler server-status

Requireall granted

</Location>

测试页面:

wKioL1fzVB6B5P0TAAB3JFCYzr8144.png


MPM: prework worker event ...

httpd主要的工做模式prework.

由于Linux系统下进程和线程的轻量级差很少。因此worker模式效果并非很好

event还不是很稳定,因此生产线上使用prework工做模式。


如何修改httpd的工做模式.

这三种模式被修改成被作成内核模块。 只要加载相应的内核模块就OK了。

/etc/httpd/conf.modules.d/00-mpm.conf 模块中有三种模式。 注释或则起做用就OK了。
# Select the MPM module which should be used by uncommenting exactly
# one of the following LoadModule lines:
 
# prefork MPM: Implements a non-threaded, pre-forking web server
# See: http://httpd.apache.org/docs/2.4/mod/prefork.html
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
 
# worker MPM: Multi-Processing Module implementing a hybrid
# multi-threaded multi-process web server
# See: http://httpd.apache.org/docs/2.4/mod/worker.html
#
#LoadModule mpm_worker_module moules/mod_mpm_worker.so
 
# event MPM: A variant of the worker MPM with the goal of consuming
# threads only for connections with active processing
# See: http://httpd.apache.org/docs/2.4/mod/event.html
#
#LoadModule mpm_event_module modules/mod_mpm_event.so


这三种模式有许多参数:

prefork
ServerLimit      主进程最多可开启进程数
StartServers     服务开启后, 开启多少个子进程
MinspareServers   至少有多少个进程空闲
MaxSpareServers   最多有多少个进程空闲
MaxConnectionsPerchild    一个进程处理多少个请求后,杀掉,产生一个新的进程
MaxRequestWorkers   最多有多少个链接请求


worker:
ServerLimit
StartServers
MinSpareThreads
MaxSpareThreads
MaxRequestWorkers
ThreadsPerChild


event:
ThreadsPerChild
MaxRequestWorkers
AsyncRequestWorkerFactor


修改配置文件:

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

StartServers 5

MinspareServers 3

MaxSpareServers 15

MaxConnectionsPerChild 0

MaxRequestWorkers 50


用户认证:

httpd认证分为表单认证和http协议的认证。

表单认证就是咱们互联网上浏览网页常常遇到的,须要提供帐号和密码。由服务器端的应用程序提供。


http协议认证:

认证质询:

WWW-Authenticate:响应码为401,拒绝客户端请求,并说明要求客户提供帐号和密码;

认证:

Authorization:客户端填入帐号和密码后再次发送请求报文 ,认证经过后,服务端将响应请求的资源;

认证的方式有两种:

basic:明文

digest:摘要

虚拟帐号:仅用于访问某服务使用。

用户信息存储于何处:文本文件、SQL数据库、ldap目录中。

 

基于basic认证明例:

基于用户身份认证:
<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    AuthType basic
    AuthName "Admin Area, Enter your name/password."
    AuthUserFile "/etc/httpd/.htpasswd"
    Require valid-user
</Directory>


认证文件的生成:

htpasswd -c -m /etc/httpd/.htpasswd jack

htpasswd -m /etc/httpd/.htpasswd bob

 

基于组的认证:

配置文件:

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    AuthType basic
    AuthName "Admin Area, Enter your admin,admin_user"
    AuthUserFile "/etc/httpd/.htpasswd"
    AuthGroupFile "/etc/httpd/.grouppasswd"
    Require group admin
</Directory>


组认证是否是单纯的验证组信息,而是要结合用户验证来进行。


worker进程的运行者身份的验证:

User apache
Group apache


进程运行者和运行的所属组都是apache, 这样其实也比较好。

即便***截获了httpd的服务, 也只能得到httpd用户的权限,对整个系统构成不了毁灭性的破坏。

也不介意将网页文件的所属组或则所属者修改成httpd。这样通常文件能够随意删除网页文件,这样其实也很差。

相关文章
相关标签/搜索