目录html
注意: 多个配置文件之间有冲突的话,排在后面的配置文件生效linux
加载动态模块配置
/etc/httpd/conf/httpd.confweb
配置指定实现模块加载格式:
LoadModule
模块文件路径可以使用相对路径:相对于ServerRoot(默认/etc/httpd)
示例:
# 要加载的模块名 模块路径 LoadModule auth_basic_module modules/mod_auth_basic.so
**DocumentRoot “/path”**
文档路径映射:DocumentRoot指向的路径为URL路径的起始位置
示例:apache
DocumentRoot "/app/data“ 访问该路径: http://HOST:PORT/test/index.html 对应实际linux中的路径为 --> /app/data/test/index.html 注意:SELinux和iptables的状态
DirectoryIndex index.html index.html.varvim
可基于两种机制指明对哪些资源进行何种访问控制访问控制机制有两种:客户端来源地址,用户帐号安全
在Apache2.2版本中,访问控制是基于客户端的主机名、IP地址以及客户端请求中的其余特征,使用Order(排序), Allow(容许), Deny(拒绝),Satisfy(知足)指令来实现。bash
在Apache2.4版本中,使用mod_authz_host这个新的模块,来实现访问控制,其余受权检查也以一样的方式来完成。旧的访问控制语句应当被新的受权认证机制所取代,即使Apache已经提供了mod_access_compat这一新模块来兼容旧语句。服务器
注意,若是修改网站根目录后,发现没有权限,优先查看selinux和iptables是否关闭app
配置案例
#该路径指定咱们要访问的路径 <Directory "/data/website"> Order allow,deny #排序,先容许后拒绝 Allow from all #容许全部 </Directory> allow from 192.168.30.6 deny from 192.168.30.0/24 当定义的域冲突的时候,在后面的那个权限生效,因此这里是拒绝访问,allow和deny的次序很重要 #这样最终的结果是:禁止100.100.*.* 容许172.16.*.* <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的访问控制:
无明确受权的目录,默认拒绝
控制特定的IP访问:
控制特定的主机访问:
HOSTNAME:
<Directory "/data/website"> Require all granted #容许全部 </Directory> #表示不容许访问目录下全部conf为后缀的文件 <Files "*.conf"> Require all denied </Files> <FilesMatch "\.(gif|jpe?g|png)$"> </FileMatch> #URL 写法,表示限制用户在网址栏中输入的url地址权限的控制 好比www.magedu.com/test/ 这个 /test/就属于url <Location /status> Require all denied </Location> #表示在URL匹配路径中使用表达式 <LocationMatch "/(extra|special)/data"> ... </LocationMatch> 不能有失败,至少有一个成功匹配才成功,即失败优先 <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>
(1) Options:后跟1个或多个以空白字符分隔的选项列表在选项前的+,- 表示增长或删除指定选项。这种方式就等于直接在Directory中填写,而且生效。
常见选项:
示例
#表示该路径不存在主页时,返回索引列表,而且容许访问软链接文件指向源文件 <Directory /web/docs> Options +Indexes +FollowSymLinks </Directory> <Directory /web/docs/spec> Options +FollowSymLinks </Directory> <Directory /web/docs/spec> Options +Includes -Indexes </Directory> #该目录下禁止软链接功能 <Directory "/data/website"> Options -FollowSymLinks Require all granted </Directory>
(2) AllowOverride
与访问控制相关的哪些指令能够放在指定目录下的.htaccess(由AccessFileName指定)文件中,覆盖以前的配置指令 只对
示例
documentroot "/data/website" <Directory "/data/website/admin"> AllowOverride authconfig </Directory> 那么他就是读取 admin 这个目录下的 .htaccess 文件中的设置,而后根据AllowOverride 来应用 <Directory "/data/website"> AllowOverride options=FollowSymLinks Require all granted </Directory>
日志类型:
错误日志:
定义日志格式:LogFormat format strings
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
使用日志格式:
CustomLog logs/access_log combined
参考帮助:
http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats
参数详解
%h 客户端IP地址 %l 远程用户,启用mod_ident才有效,一般为减号“-” %u 验证(basic,digest)远程用户,非登陆访问时,为一个减号“-” Httpd 2.2常见配置 %t 服务器收到请求时的时间 %r First line of request,即表示请求报文的首行;记录了这次请求的“方法”,“URL”以及协议版本 %>s 响应状态码 %b 响应报文的大小,单位是字节;不包括响应报文http首部 %{Referer}i 请求报文中首部“referer”的值;即从哪一个页面中的超连接跳转至当前页面的,可是这个参数检测到的不必定是真实跳转链接,是能够伪造的。咱们能够经过分析这个值,来分析用户是从哪些路径来访问咱们的网址的 %{User-Agent}i 请求报文中首部“User-Agent”的值;即发出请求的应用程序
修改日志文件日期格式
%{%F %T}t
修改完成后,要经过下面的 customlog 来调用 ,最后的参数为 这个logformat 最后的名字参数
优先设置,建议搭建完服务就确认好字符集,不然后期乱码麻烦。
AddDefaultCharset UTF-8 中文字符集:GBK, GB2312, GB18030
定义路径别名, 须要注意一点,定义的目录路径,是从linux上相对于根开始的绝对路径,而不是相对于DocumentRoot的路径。
格式: Alias /URL/ "/PATH/"
DocumentRoot "/www/htdocs" http://www.magedu.com/download/bash.rpm ==>/www/htdocs/download/bash.rpm Alias /download/ "/rpms/pub/" http://www.magedu.com/download/bash.rpm ==>/rpms/pub/bash.rpm http://www.magedu.com/images/logo.png ==>/www/htdocs/images/logo.png
认证质询:WWW-Authenticate:响应码为401,拒绝客户端请求,并说明要求客户端提供帐号和密码
认证:Authorization:客户端用户填入帐号和密码后再次发送请求报文;认证经过时,则服务器发送响应的资源
安全域:须要用户认证后方能访问的路径;应该经过名称对其进行标识,以便于告知用户认证的缘由
用户的帐号和密码
定义指定目录认证方式 ,模式为 basic:明文,表示若是用户访问该路径,须要输入正确的帐户密码后,才能访问,不然没法访问。
#认证模式 AuthType Basic #登陆时的提示语句 AuthName "String" #指定用户名密码文件,使用命令htpasswd来建立该文件 AuthUserFile "/PATH/HTTPD_USER_PASSWD_FILE" #指定使用该文件中的哪些用户名是能够访问的 每一个用户用空格隔开,而且不能有多余的空格!!! Require user username1 username2 ... #建立访问用户帐户 该文件名称路径不限,只要配置中指定便可 htpasswd -s /etc/httpd/conf.d/.httpuser user1 user2 user3 定义安全域 <Directory “/path"> Options None AllowOverride None AuthType Basic AuthName "String“ AuthUserFile "/PATH/HTTPD_USER_PASSWD_FILE" Require user username1 username2 ... </Directory> 容许帐号文件中的全部用户登陆访问: Require valid-user
提供帐号和密码存储(文本文件),使用专用命令完成此类文件的建立及用户管理
htpasswd [options] /PATH/HTTPD_PASSWD_FILE username
-c:自动建立文件,仅应该在文件不存在时使用
-p:明文密码
-d:CRYPT格式加密,默认
-m:md5格式加密
-s: sha格式加密
-D:删除指定用户
#首先建立认证配置文件 <Directory "/path"> AuthType Basic AuthName "visit wang home" AuthUserFile "/etc/httpd/conf.d/.httpuser" AuthGroupFile "/etc/httpd/conf.d/.httpgroup" Require group g1 g2 g3 </Directory > cd /etc/httpd/conf.d #建立认证文件 第一次建立的时候能够加c 后面都不要加c 不然会覆盖全部的旧帐户 htpasswd -c .httpuser httpwang htpasswd .httpuser httpmage htpasswd .httpuser httpzhang vim .httpgroup g1:httpwang,httpmage g2:httpmage g3:httpzhang,httpmage
实现用户家目录的http共享
基于模块mod_userdir.so实现
SELinux: http_enable_homedirs
相关设置:
vim /etc/httpd/conf/httpd.conf <IfModule mod_userdir.c> #UserDir disabled #指定共享目录的名称,只要在用户的家目录下建立该文件夹,以后这个家目录赋予apache acl 权限,那么http就能够访问用户家目录。每一个用户的家目录,均可以进行共享 UserDir public_html </IfModule> 准备目录 su – wang;mkdir ~/public_html setfacl –m u:apache:x ~wang 访问 http://localhost/~wang/index.html
当客户请求的网页并不存在时,服务器将产生错误文档,缺省状况下因为打开了 ServerSignature选项,错误文档的最后一行将包含服务器的名字、Apache的版本等信息
若是不对外显示这些信息,就能够将这个参数设置为Off,生产环境中建议修改成Off!!
设置为Email,将显示ServerAdmin 的Email提示
显示系统中的状态信息 用于监控服务器状态,这个页面必定不要开放给任意用户访问,一般只容许运维进行查阅
配置方法
curl 192.168.1.30/status 这样就能够显示服务器当前状态 <Location /status> SetHandler server-status #设置访问权限,只容许指定网段能够访问 Order allow,deny Allow from 172.16 </Location>