apache配置介绍、常见配置说明、虚拟主机配置
发布日期:2021-05-08 05:15:06 浏览次数:20 分类:精选文章

本文共 8161 字,大约阅读时间需要 27 分钟。

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>
注意:任意目录下的页面只有显式授权才能被访问

上一篇:APR、apache编译安装、LAMP、CGI、常见LAMP应用
下一篇:Socket套接字、HTTP协议简单介绍、URI、网站访问量、http请求处理过程、HTTPD介绍、MPM工作模式

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年04月11日 05时56分17秒