apache配置介绍、常见配置说明、虚拟主机配置

apache配置介绍

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

检查配置语法:
httpd –t

服务单元文件: /usr/lib/systemd/system/httpd.service
配置文件:/etc/sysconfig/httpd

服务控制和启动:
systemctl enable|disable httpd.service
systemctl {start|stop|restart|status} httpd.service

站点网页文档根目录:
/var/www/html

模块文件路径:
/etc/httpd/modules
/usr/lib64/httpd/modules

主程序文件:
/usr/sbin/httpd

主进程文件:
/etc/httpd/run/httpd.pid

日志文件目录:
/var/log/httpd
access_log: 访问日志
error_log:错误日志

帮助文档包:
httpd-manual

httpd配置文件的组成:
主要组成
Global Environment
Main server configuration
virtual host

配置格式:directive value
directive 不区分字符大小写
value 为路径时,是否区分大小写,取决于文件系统

常见配置说明

1、显示服务器版本信息
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
建议使用:ServerTokens Prod

2、修改监听的IP和Port
Listen [IP:]PORT
省略IP表示为本机所有IP
Listen指令至少一个,可重复出现多次

示例:
Listen 192.168.1.10:80
Listen 8080

3、持久连接
Persistent Connection:连接建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成,默认关闭持久连接
断开条件:时间限制:以秒为单位, 默认5s,httpd-2.4 支持毫秒级
副作用:对并发访问量大的服务器,持久连接会使有些请求得不到响应
折衷:使用较短的持久连接时间
设置:KeepAlive On|Off
KeepAliveTimeout 15

测试:telnet WEB_SERVER_IP PORT
GET /URL HTTP/1.1
Host: WEB_SERVER_IP

4、MPM( Multi-Processing Module)多路处理模块
prefork, worker, event

切换使用的MPM
/etc/httpd/conf.modules.d/00-mpm.conf
启用要启用的MPM相关的LoadModule指令即可

查看静态编译的模块
httpd -l

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

动态模块加载:不需重启即生效
动态模块路径
/usr/lib64/httpd/modules/

prefork的配置:
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256 最多进程数,最大20000
MaxClients 256 最大并发连接数
MaxRequestsPerChild 4000 子进程最多能处理的请求数量。
MaxRequestsPerChild 个请求之后,子进程将会被父进程终止,这时候子进程占用的内存就会释放(为0时永远不释放)

worker的配置:
ServerLimit 16
StartServers 2
MaxRequestWorkers 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25

5、DSO: Dynamic Shared Object

加载动态模块配置
/etc/httpd/conf/httpd.conf
Include conf.modules.d/*.conf
配置指定实现模块加载格式:
LoadModule <mod_name> <mod_path>
模块文件路径可使用相对路径:
相对于ServerRoot(默认/etc/httpd)

示例:
LoadModule auth_basic_module modules/mod_auth_basic.so

6、定义’Main’ server的文档页面路径
DocumentRoot “/path”
文档路径映射:
DocumentRoot指向的路径为URL路径的起始位置

示例:
DocumentRoot "/app/data“
http://HOST:PORT/test/index.html --> /app/data/test/index.html
注意:SELinux和iptables的状态

7、定义站点主页面
DirectoryIndex index.html test.html

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

文件系统路径:
<Directory “/path"> 目录访问控制

</Directory>
<File “/path/file”> 文件访问控制

</File>
<FileMatch “PATTERN”> 正则表达式的文件访问控制

</FileMatch>

URL路径:
<Location “”>

</Location>
<LocationMatch “”>

</LocationMatch>

示例:
<FilesMatch “.(gif|jpe?g|png)$”>
<Files “?at.*”> 通配符
<Location /ttta> 此时http://192.168.1.10/ttta 可被控制
<LocationMatch “/(extra|special)/data”>

9、<Directory>中“基于源地址”实现访问控制
Options
Options后跟1个或多个以空白字符分隔的选项列表,在选项前的+,- 表示增加或删除指定选项
常见选项:
Indexes:指明的URL路径下不存在与定义的主页面资源相符的资源文件时,返回索引列表给用户
FollowSymLinks:允许访问符号链接文件所指向的源文件
None:全部禁用
All: 全部允许

示例:
<Directory /web/test>
Options Indexes FollowSymLinks
</Directory>

<Directory /web/test/a>
Options FollowSymLinks
</Directory>

<Directory /web/test>
Options Indexes FollowSymLinks
</Directory>

<Directory /web/test/a>
Options +Includes -Indexes
</Directory>

AllowOverride
与访问控制相关的哪些指令可以放在指定目录下的.htaccess(由AccessFileName指定)文件中,覆盖之前的配置指令
只对<directory>语句有效
AllowOverride All: .htaccess中所有指令都有效
AllowOverride None: .htaccess 文件无效
AllowOverride AuthConfig Indexes 除了AuthConfig 和Indexes的其它指令都无法覆盖

基于IP的访问控制:
无明确授权的目录,默认拒绝
允许所有主机访问: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 192.168.1.11 拒绝特定IP
</RequireAll>

<RequireAny>
Require all denied
require ip 192.168.1.11 允许特定IP
</RequireAny>

10、日志设定
日志类型:
访问日志
错误日志

错误日志:
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

参考:
%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”的值;即发出请求的应用程序

11、设定默认字符集
AddDefaultCharset UTF-8 此为默认值
中文字符集:GBK, GB2312, GB18030

12、定义路径别名
格式:Alias /URL/ “/PATH/”

示例:
Alias /download/ “/www/txt/”
DocumentRoot “/www/txt”
访问地址:http://www.test.com/download/a.txt
实际路径:/www/txt/a.txt

13、基于用户的访问控制
认证质询:WWW-Authenticate:响应码为401,拒绝客户端请求,并说明要求客户端提供账号和密码

认证:Authorization:客户端用户填入账号和密码后再次发送请求报文;认证通过时,则服务器发送响应的资源

认证方式两种:
basic:明文
digest:消息摘要认证,兼容性差

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

用户的账号和密码
虚拟账号:仅用于访问某服务时用到的认证标识
存储:文本文件,SQL数据库,ldap目录存储,nis等

basic认证配置示例:

方法一:
定义安全域
<Directory “/path">
Options None
AllowOverride None
AuthType Basic
AuthName "String“ 提示信息
AuthUserFile “/etc/httpd/passwd” 储存账号密码的文件
Require user test
</Directory>
允许账号文件中的所有用户登
Require valid-user

方法二:
<Directory “/path">
AllowOverride authconfig
</Directory>
编辑目录里的.htaccess文件
AuthType Basic
AuthName "String“
AuthUserFile “/etc/httpd/passwd”
Require user test

账号和密码存储文件
使用专用命令完成此类文件的创建及用户管理
htpasswd [options] /PATH/HTTPD_PASSWD_FILE username
-c 自动创建文件,仅应该在文件不存在时使用
-p 明文密码
-d CRYPT格式加密,默认
-m md5格式加密
-s sha格式加密
-D 删除指定用户
如果不是第一次使用加上C会重新覆盖文件

基于组账号进行认证
定义安全域
<Directory “/path">
AuthType Basic
AuthName "String“
AuthUserFile “/etc/httpd/passwd”
AuthGroupFile “/etc/httpd/group”
Require group testgroup
</Directory>

创建用户账号和组账号文件
组文件:每一行定义一个组
GRP_NAME: a b

组文件格式:
vim /etc/httpd/group
a: test
b: test2
a组里有test b组里有test2

远程客户端和用户验证的控制
Satisfy ALL|Any
ALL 客户机IP和用户验证都需要通过才可以
Any 客户机IP和用户验证,有一个满足即可

示例:
Require valid-user
Order allow,deny
Allow from 192.168.1
Satisfy Any

14、实现用户家目录的http共享
基于模块mod_userdir.so实现
SELinux: http_enable_homedirs

相关设置:
vim /etc/httpd/conf/httpd.conf
<IfModule mod_userdir.c>
#UserDir disabled 屏蔽
UserDir html #指定共享目录的名称
</IfModule>

准备目录
su – test;mkdir ~/html
setfacl –m u:apache:x ~test

添加路径配置文件
<Directory “/home/test/html">
Options None
AllowOverride None
AuthType Basic
AuthName "String“
AuthUserFile “/etc/httpd/passwd”
Require user test
</Directory>

访问
http://localhost/~test/index.html

15、ServerSignature On | Off | EMail
当客户请求的网页并不存在时,服务器将产生错误文档,缺省情况下由于打开了 ServerSignature选项,错误文档的最后一行将包含服务器的名字、Apache的版本等信息如果不对外显示这些信息,就可以将这个参数设置为Off设置为Email,将显示ServerAdmin 的Email提示

16、status页面
LoadModule status_module modules/mod_status.so
<Location “/status”>
SetHandler server-status
</Location>
ExtendedStatus On 显示扩展信息

添加访问权限:
<Location “/status”>
SetHandler server-status
<requireany>
require all denied
require ip 192.168.1.0/24
</requireany>
</Location>

虚拟主机配置

站点标识: socket
IP相同,但端口不同
IP不同,但端口均为默认端口
FQDN不同: 请求报文中首部 Host: www.test.com

有三种实现方案:
基于ip:为每个虚拟主机准备至少一个ip地址
基于port:为每个虚拟主机使用至少一个独立的port
基于FQDN:为每个虚拟主机使用至少一个FQDN

虚拟主机的配置方法:

ServerName FQDN
DocumentRoot “/path"

建议:上述配置存放在独立的配置文件中,每个虚拟主机要有自己的日志

其它可用指令:
ServerAlias:虚拟主机的别名;可多次使用
ErrorLog: 错误日志
CustomLog:访问日志
<Directory “/path"> </Directory>
Alias

基于IP的虚拟主机
<VirtualHost 192.168.1.10:80>
ServerName www.a.com
DocumentRoot “/www/a/doc”
</VirtualHost>

<VirtualHost 192.168.1.11:80>
ServerName www.b.com
DocumentRoot “/www/b/doc”
</VirtualHost>

<VirtualHost 192.168.1.12:80>
ServerName www.c.com
DocumentRoot “/www/c/doc”
</VirtualHost>

基于端口的虚拟主机
可和基于IP的虚拟主机混和使用
listen 8080
listen 8081
<VirtualHost 192.168.1.10:80>
ServerName www.a.com
DocumentRoot “/www/a/doc”
</VirtualHost>

<VirtualHost 192.168.1.10:8080>
ServerName www.b.com
DocumentRoot “/www/b/doc”
</VirtualHost>

<VirtualHost 192.168.1.10:8081>
ServerName www.c.com
DocumentRoot “/www/c/doc”
</VirtualHost>

基于FQDN虚拟主机
基于FQDN的虚拟主机不再需要NameVirutalHost指令
<VirtualHost *:80>
ServerName www.b.com
DocumentRoot “/www/b/doc”
<Directory “/www/b/doc”>
Options None
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
注意:任意目录下的页面只有显式授权才能被访问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值