HTTP 配置与编译安装
HTTP 配置与编译安装
HTTP 相关配置
注意: 多个配置文件之间有冲突的话,排在后面的配置文件生效
DSO
加载动态模块配置
/etc/httpd/conf/httpd.conf
配置指定实现模块加载格式:
LoadModule <mod_name> <mod_path>
模块文件路径可使用相对路径:相对于ServerRoot(默认/etc/httpd)
示例:
# 要加载的模块名 模块路径
LoadModule auth_basic_module modules/mod_auth_basic.so
定义‘Main’ Server 的文档页面路径
**DocumentRoot “/path”**
文档路径映射:DocumentRoot指向的路径为URL路径的起始位置
示例:
DocumentRoot "/app/data“
访问该路径: http://HOST:PORT/test/index.html
对应实际linux中的路径为 --> /app/data/test/index.html
注意:SELinux和iptables的状态
定义站点主页面
DirectoryIndex index.html index.html.var
站点访问控制常见机制
可基于两种机制指明对哪些资源进行何种访问控制访问控制机制有两种:客户端来源地址,用户账号
在Apache2.2版本中,访问控制是基于客户端的主机名、IP地址以及客户端请求中的其他特征,使用Order(排序), Allow(允许), Deny(拒绝),Satisfy(满足)指令来实现。
在Apache2.4版本中,使用mod_authz_host这个新的模块,来实现访问控制,其他授权检查也以同样的方式来完成。旧的访问控制语句应当被新的授权认证机制所取代,即便Apache已经提供了mod_access_compat这一新模块来兼容旧语句。
注意,如果修改网站根目录后,发现没有权限,优先查看selinux和iptables是否关闭
Apache2.2
配置案例
#该路径指定我们要访问的路径
<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>
Apache2.4
基于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:指定域名下的所有主机
<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中填写,并且生效。
常见选项:
- Indexes:指明的URL路径下不存在与定义的主页面资源相符的资源文件时,返回索引列表给用户
- FollowSymLinks:允许访问符号链接文件所指向的源文件
- None:全部禁用
- All: 全部允许
示例
#表示该路径不存在主页时,返回索引列表,并且允许访问软连接文件指向源文件
<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指定)文件中,覆盖之前的配置指令 只对语句有效。使用该命令的话,你需要在指定的目录下创建.htaccess文件,并在其中编写配置。相当于把.htaccess的内容附加到Directiory语句块中去。
- AllowOverride All: 所有指令都有效
- AllowOverride None:.htaccess 文件无效
- AllowOverride AuthConfig Indexes 除了AuthConfig 和Indexes的其它指令都无法覆盖
示例
documentroot "/data/website"
<Directory "/data/website/admin">
AllowOverride authconfig
</Directory>
那么他就是读取 admin 这个目录下的 .htaccess 文件中的设置,然后根据AllowOverride 来应用
<Directory "/data/website">
AllowOverride options=FollowSymLinks
Require all granted
</Directory>
日志设定
日志类型:
- 访问日志 :记录用户的访问情况
- 错误日志 :记录语句执行,http服务相关的错误,用户的访问错误记录在访问日志中
错误日志:
- ErrorLog logs/error_log
- LogLevel warn
- LogLevel 可选值:debug, info, notice, warn,errorcrit, alert, emerg
访问日志
定义日志格式: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:客户端用户填入账号和密码后再次发送请求报文;认证通过时,则服务器发送响应的资源
安全域:需要用户认证后方能访问的路径;应该通过名称对其进行标识,以便于告知用户认证的原因
用户的账号和密码
- 虚拟账号:仅用于访问某服务时用到的认证标识
- 存储:文本文件,SQL数据库,ldap目录存储,nis等
定义指定目录认证方式 ,模式为 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 On | Off | EMail
当客户请求的网页并不存在时,服务器将产生错误文档,缺省情况下由于打开了 ServerSignature选项,错误文档的最后一行将包含服务器的名字、Apache的版本等信息
如果不对外显示这些信息,就可以将这个参数设置为Off,生产环境中建议修改为Off!!
设置为Email,将显示ServerAdmin 的Email提示
status
显示系统中的状态信息 用于监控服务器状态,这个页面一定不要开放给任意用户访问,通常只允许运维进行查阅
配置方法
curl 192.168.1.30/status 这样就可以显示服务器当前状态
<Location /status>
SetHandler server-status
#设置访问权限,只允许指定网段可以访问
Order allow,deny
Allow from 172.16
</Location>
HTTP 配置与编译安装的更多相关文章
- nginx php-fpm安装配置 CentOS编译安装php7.2
CentOS编译安装php7.2 介绍: 久闻php7的速度以及性能那可是比php5系列的任何一版本都要快,具体性能有多好,建议还是先尝试下再说.如果你是升级或新安装,那你首先需要考虑php7和程序是 ...
- net-snmp-5.7.3配置编译安装
net-snmp-5.7.3配置编译安装 [TOC] 先看一下系统环境 o@o-pc:~/work/_snmp/net-snmp-5.7.3$ uname -a Linux o-pc 3.16.0-3 ...
- Linux下编译安装Apache Http Server
Linux下编译安装Apache Http Server [TOC] 1.下载httpd-2.4.12.tar.bz2 wget http://mirror.bit.edu.cn/apache/htt ...
- centos6.3编译安装Apache2.4.3+PHP5.4.8+Mysql5.5.8
以虚拟机VirtualBox 版本是4.1.20(内存设置为512M,centos安装是文本模式下安装),全新以最小化包安装了32位的 CentOS6.3系统,作为本地web环境,上次讲了在windo ...
- Debian GNU/Linux 8.4 (jessie)编译安装php.md
编译遇到的问题很多.网上的文章往往是记录遇到的报错,贴上对应的解决. 而实际的环境,如操作系统,安装的软件必然有差异,所以,更重要的是,如何找到解决方法(不担保按步骤做可以编译成功),并将过程自动化. ...
- CentOS6.9编译安装Nginx1.12
1:安装必要的库 Bash yum install gc gcc gcc-c++ pcre-devel zlib-devel openssl-devel 2:创建Nginx用户和组 Bash grou ...
- nginx入门之编译安装
nginx是什么 nginx是一个开源的,支持高性能,高并发的www服务和代理服务软件.它是一个俄罗斯人lgor sysoev开发的,作者将源代码开源出来供全球使用. nginx比它大哥apache性 ...
- CentOS7 下编译安装 Samba,什么是 SMB/CIFS 协议
目录 一.关于 Samba 1. SMB 2. Samba 二.yum 安装 Samba 1. 安装 Samba 2. 查看版本 3. 查看配置文件 4. 启动服务 5. 本地客户端验证 6. Win ...
- CentOS6.9 下编译安装MySQL5.7.19
官网:https://www.mysql.com/ 下载地址:https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.19.tar.gz 一.准备工作 ...
随机推荐
- 一些有关PyCharm使用总结
目前在这里,你能看见 license server Python版本配置 添加另外版本的Python 设置字体大小 关于编码 关于模版 安装好之后,第一个问题就是 license server 问题, ...
- Android子线程更新UI成功
android子线程更新UI成功 今天在写demo的时候,在子线程中更新UI,发现更新成功,记录一下. protected void onCreate(Bundle savedInstanceStat ...
- 使用URLRewriter实现URL重写
优点 1)隐藏真实URL,提高安全性 2)更加友好的URL,好记(看博客园就行知道啦) 3)便于搜素引擎收录 ......... 可能的缺点 使用URL重写可能导致: 1)图片路径的问题 2)CSS路 ...
- WPF Virtualization
WPF虚拟化技术分为UI 虚拟化和数据虚拟化 第一种方法被称为"UI 虚拟化".支持虚拟化用户界面的控件是足够聪明来创建只显示的是实际在屏幕上可见的数据项目所需的 UI 元素.例如 ...
- 使用SpringSession管理分布式会话时遇到的反序列化问题
关于SpringSession相关的介绍和使用指南,可移步如下网址: [SpringSession管理分布式系统的会话Session] https://www.cnblogs.com/captaina ...
- json解析数组类型的数据
//微信里一个检测是否有发送模版消息的权限的方法//此处的openid代表的微信用户openid,templateId代表的是模版消息idpublic boolean checkIsSendTempM ...
- js重载的实现
在JavaScript高级程序设计书中看到 ECMAScript函数中不能想传统意义上那样实现重载.而在其他语句中(Java)中,可以为一个函数编写两个定义,只要两个定义的签名(接受的参 数的类型和数 ...
- SpringBoot的日志管理
SpringBoot的日志管理 SpringBoot关于日志的官方文档 1.简述 SpringBoot官方文档关于日志的整体说明 本博客基于SpringBoot_1.3.6大家请先简单看下这篇英文的官 ...
- 在Ubuntu中安装MySQL
在Ubuntu中安装MySQL Ubuntu实用工具系列文章,将介绍基于Linux ubuntu的各种工具软件的配置和使用.有些工具大家早已耳熟能详,有些工具经常用到但确依然陌生.我将记录我在使用操作 ...
- Hibernate笔记3--多表操作-导航查询
一.一对多操作 1.构造实体类及编写配置文件: 一方: // 一个Customer对应多个linkman private Set<Linkman> linkmans = new ...