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 配置与编译安装的更多相关文章

  1. nginx php-fpm安装配置 CentOS编译安装php7.2

    CentOS编译安装php7.2 介绍: 久闻php7的速度以及性能那可是比php5系列的任何一版本都要快,具体性能有多好,建议还是先尝试下再说.如果你是升级或新安装,那你首先需要考虑php7和程序是 ...

  2. 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 ...

  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 ...

  4. centos6.3编译安装Apache2.4.3+PHP5.4.8+Mysql5.5.8

    以虚拟机VirtualBox 版本是4.1.20(内存设置为512M,centos安装是文本模式下安装),全新以最小化包安装了32位的 CentOS6.3系统,作为本地web环境,上次讲了在windo ...

  5. Debian GNU/Linux 8.4 (jessie)编译安装php.md

    编译遇到的问题很多.网上的文章往往是记录遇到的报错,贴上对应的解决. 而实际的环境,如操作系统,安装的软件必然有差异,所以,更重要的是,如何找到解决方法(不担保按步骤做可以编译成功),并将过程自动化. ...

  6. CentOS6.9编译安装Nginx1.12

    1:安装必要的库 Bash yum install gc gcc gcc-c++ pcre-devel zlib-devel openssl-devel 2:创建Nginx用户和组 Bash grou ...

  7. nginx入门之编译安装

    nginx是什么 nginx是一个开源的,支持高性能,高并发的www服务和代理服务软件.它是一个俄罗斯人lgor sysoev开发的,作者将源代码开源出来供全球使用. nginx比它大哥apache性 ...

  8. CentOS7 下编译安装 Samba,什么是 SMB/CIFS 协议

    目录 一.关于 Samba 1. SMB 2. Samba 二.yum 安装 Samba 1. 安装 Samba 2. 查看版本 3. 查看配置文件 4. 启动服务 5. 本地客户端验证 6. Win ...

  9. CentOS6.9 下编译安装MySQL5.7.19

    官网:https://www.mysql.com/ 下载地址:https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.19.tar.gz 一.准备工作 ...

随机推荐

  1. Gym 101047M Removing coins in Kem Kadrãn

    给定一个序列,只能拿走D,隔壁的会翻转,问能否全部拿走. 注意到如果能拿走的话,拿D的顺序是没关系的.模拟即可 #include <cstdio> #include <cstdlib ...

  2. Java中的Enum(枚举)用法介绍

    1. 关于Java Enum:学过C/C++等语言的人,应该都对Enum类型略知一二.Enum一般用来表示一组相同类型的常量.如性别.日期.月份.颜色等.对这些属性用常量的好处是显而易见的,不仅可以保 ...

  3. Unity GL 画圆

    Unity下GL没有画圆的函数,只能自己来了. 如果能帮到大家,我也很高兴. 虽然没有画圆的函数,但是能画直线,利用这一点,配合微积分什么的,就可以画出来了.反正就是花很多连在一起的直线,每条直线足够 ...

  4. java 整型相除得到浮点型

    public class TestFloatOrDouble { public static void main(String[] args) { Point num1 = new Point(84, ...

  5. 浅谈WebService的调用

    0.前言 前段时间,公司和电信有个合作,产品对接电信的某个平台,使用了WebService接口的调用,实现了业务受理以及单点登录.终于使用到了WebService,楼主还是比较兴奋的,目前功能已经上线 ...

  6. 【干货】JavaScript DOM编程艺术学习笔记4-6

    四.案例研究:JavaScript图片库 js: function showPic(whichpic){ //取得链接 var source=whichpic.getAttribute("h ...

  7. web开发模式小结:页面乱码和跳转

    本文由付老师总结书写 java开发模式: (1)第一种开始模式:javaBean+jsp : 优点:可以为web程序在jsp中减少java代码量 适用于该开发模式的jsp的动作元素:<jsp:u ...

  8. Android使用文件管理器打开指定文件夹,浏览里面的内容

    Android下可以打开一些文件,带有.doc 等后缀的文件网上一般都有解释,这个写一个使用文件管理器打开指定文件夹的 private void openAssignFolder(String pat ...

  9. 菜鸟 学注册机编写之 “MD5”

    测试环境  系统: xp sp3 调试器 :od 1.10 sc_office_2003_pro 高手不要见笑,仅供小菜玩乐,有不对或不足的地方还请多多指教,不胜感激! 一:定位关键CALL 1. 因 ...

  10. 【作业留存】根据IATF框架,设计的一种中小型企业安全拓扑