
本文共 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-manualhttpd配置文件的组成:
主要组成 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 Prod2、修改监听的IP和Port
Listen [IP:]PORT 省略IP表示为本机所有IP Listen指令至少一个,可重复出现多次示例:
Listen 192.168.1.10:80 Listen 80803、持久连接
Persistent Connection:连接建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成,默认关闭持久连接 断开条件:时间限制:以秒为单位, 默认5s,httpd-2.4 支持毫秒级 副作用:对并发访问量大的服务器,持久连接会使有些请求得不到响应 折衷:使用较短的持久连接时间 设置:KeepAlive On|Off KeepAliveTimeout 15测试:telnet WEB_SERVER_IP PORT
GET /URL HTTP/1.1 Host: WEB_SERVER_IP4、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 255、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.so6、定义’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.html8、站点访问控制常见机制
可基于两种机制指明对哪些资源进行何种访问控制 访问控制机制有两种:客户端来源地址,用户账号文件系统路径:
<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, GB1803012、定义路径别名
格式:Alias /URL/ “/PATH/”示例:
Alias /download/ “/www/txt/” DocumentRoot “/www/txt” 访问地址:http://www.test.com/download/a.txt 实际路径:/www/txt/a.txt13、基于用户的访问控制
认证质询: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 Any14、实现用户家目录的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.html15、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> 注意:任意目录下的页面只有显式授权才能被访问发表评论
最新留言
关于作者
