httpd配置内容

httpd2.2
配置文件:
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf
服务脚本:
/etc/rc.d/init.d/httpd
脚本配置文件:
/etc/sysconfig/httpd
主程序文件:
/usr/sbin/httpd
/usr/sbin/httpd.event
/usr/sbin/httpd.worker
日志文件:
/var/log/httpd:access_log:访问日志,error_log:错误日志
站点文档:
/var/www/html
模块文件路径:
/usr/lib64/httpd/modules
服务控制和启动:
chkconfig httpd on|off
service {start|stop|restart|status|configtest|reload} httpd
httpd2.4
配置文件:
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf
模块相关的配置文件:
/etc/httpd/conf.modules.d/*.conf
systemd unit file:
/usr/lib/systemd/system/httpd.service
主程序文件:
/usr/sbin/httpd(httpd-2.4支持MPM的动态切换)
日志文件:
/var/log/httpd: access_log:访问日志, error_log:错误日志
站点文档:
/var/www/html
模块文件路径:
/usr/lib64/httpd/modules
服务控制:
systemctl enable|disable httpd.service
systemctl {start|stop|restart|status} httpd.service

httpd的基础配置

1)修改监听的ip和port,在主配置文件/etc/httpd/conf/httpd.conf中修改,格式如:Listen  [IP:]PORT。需要注意的有3点:

  ①省略IP表示匹配本机全部ip;
  ②Listen指令可重复出现多次;
  ③修改监听socket,重启服务进程方可生效。

  示例:

[root@happiness ~]# vim /etc/httpd/conf/httpd.conf
Listen 80
Listen 192.168.4.50:8090
[root@happiness ~]# systemctl start httpd.service
[root@happiness ~]# ss -tan
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 192.168.4.50:8080 *:*
LISTEN 0 5 192.168.122.1:53 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 128 127.0.0.1:631 *:*
LISTEN 0 100 127.0.0.1:25 *:*
ESTAB 0 52 192.168.4.119:22 192.168.4.93:49948
LISTEN 0 128 :::80 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 128 ::1:631 :::*
LISTEN 0 100 ::1:25 :::*

2)长连接。tcp连续建立后,每个资源获取完成后不全断开连接,而是继续等待其它资源请求的进行。对并发访问量较大的服务器,长连接机制会使得后续某些请求无法得到正常响应,对这种情况,我们可以使用较短的持久连接时长,以及较少的请求数量。

  配置指令:

    KeepAlive On|Off        #是否启用长连接
    KeepAliveTimeout Seconds     #超时时长
    MaxKeepAliveRequests Number       #最多保持多少个长连接的请求

  示例:

[root@happiness ~]# vim /etc/httpd/conf.d/keepalive.conf  #新建
    KeepAlive On
    KeepAliveTimeout 30
    MaxKeepAliveRequests 200
[root@happiness ~]# systemctl restart httpd.service
[root@happiness ~]# telnet 192.168.4.50 8080
Trying 192.168.4.50...
Connected to 192.168.4.50.
Escape character is '^]'.
GET /index.html HTTP/1.1
HOST:192.168.4.50 #输入后连按两次Enter HTTP/1.1 200 OK
Date: Fri, 08 Jun 2018 04:25:03 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Fri, 08 Jun 2018 01:50:41 GMT
ETag: "17-56e17a0a33249"
Accept-Ranges: bytes
Content-Length: 23
Content-Type: text/html; charset=UTF-8
<h2>hello, world.</h2>
#注意:
此处因为启用了KeepAlive,连接没有断开,可以继续输入内容;如果没有启用KeepAlive则请求成功后会直接退出telnet

3)自定义web站点。在httpd服务的主配置文件中,默认情况下DocumentRoot "/var/www/html"定义了默认web站点目录的路径。如需自定义站点,需按如下格式进行添加:

  httpd-2.2:

    DocumentRoot   "/PATH/TO/FILE"
    <Directory "/PATH/TO/FILE">              
      Options Indexes FollowSymLinks
      AllowOverride None   #用于定义每个目录下.htaccess文件中的指令类型,但通常设置None
      Order allow,deny #定义默认的访问权限与Allow和Deny语句的处理顺序,此处先匹配allow再匹配deny
      Allow from all  #针对客户机的域名或IP地址进行访问限制,如:Allow from all或者Deny from 192.168等
    </Directory>

  httpd-2.4:

    DocumentRoot   "/PATH/TO/FILE"
    <Directory "/PATH/TO/FILE">
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted  #http-2.4中的允许所有人访问,如果要禁止某个IP或域名的访问,如:Require not ip 1.1.1.1、Require not host xxxx.com或者禁止所有人访问Require all denied
     </Directory>

其中options包括以下的可选参数:

参数 说明
Indexes 允许目录浏览,当客户仅指定要访问的目录,但没有指定要访问的文件,且目录下不存在默认文档时,显示该目录中的文件及子目录列表索引
MultiViews 允许内容协商的多重视图,允许返回指定的访问目录下的相关联的文件
All All包含了除MultiViews之外的所有特性,如没有指定options,默认为All
ExecCGI 允许在该目录下执行CGI脚本
FollowSymLinks 允许跟踪符号链接到源文件
Includes 允许服务器端包含功能
IncludesNoExec 允许服务器端包含功能,但禁止执行CGI脚本
None 不调用options参数

  示例:

[root@happiness ~]# mkdir -p /test/html
[root@happiness ~]# vim /test/html/test.html
   <h2>test web站点</h2>
[root@happiness ~]# chcon -R --reference /var/www/html /test/html #复制/var/www/html的selinux安全上下文到/data/html,如果没复制安全上下文可能会导致访问index.html出现403的提示
[root@happiness ~]# vim /etc/httpd/conf/httpd.conf
   #DocumentRoot "/var/www/html"  #注释默认的web根站点
   DocumentRoot "/test/html"  #定义要启用的web根站点
   <Directory "/test/html">
    Options None
     AllowOverride None
    Require all granted
   </Directory>
[root@happiness ~]# systemctl restart httpd.service
结果:

httpd的访问控制

1)在Directory中基于IP地址实现访问控制

  http-2.2中基于IP地址的访问控制是利用Allow和Deny来实现的,如:
      <Directory  "/PATH/TO/FILE">
          Options Indexes FollowSymLinks
          AllowOverride None
          Order allow, deny
          Allow  from  IP | NetAddr
          Deny  from  IP | NetAddr
      </Directory>
  其中NetAddr的格式可类似:172.16、172.16.0.0、172.16.0.0/16、172.16.0.0/255.255.0.0。

  httpd-2.4中基于Ip地址访问的控制是利用Require实现,如:
      <Directory  "/PATH/TO/FILE">
         AllowOverride none
         Options none
         <RequireAll>
            Require ip IP | NetAddr #允许访问的IP或网段
            Require not ip IP | NetAddr #拒绝访问的Ip或网段
         </RequireAll>
      </Directory>
  此外httpd-2.4版本中还可以利用host名来进行访问控制,如:
      <Directory  "/PATH/TO/FILE">
         AllowOverride none
         Options none
         <RequireAll>
           Require host google.com  #允许来自域名为google.com所有主机的访问
           Require not host www.xxxx.com  #不允许来自主机名为www.xxxx.com的访问
         </RequireAll>
      </Directory>

  示例:

[root@happiness ~]# mkdir /test/virtualhtml
[root@happiness ~]# vim /test/virtualhtml/virtualtest.html
 <h2>test for virtual</h2>
[root@happiness ~]# vim /etc/httpd/conf.d/virualhost.conf
  <VirtualHost 192.168.4.50:8080>
  DocumentRoot "/test/virtualhtml"
  <Directory "/test/virtualhtml">
   AllowOverride None
  Options None
  <RequireAll>
   Require all granted
  Require not ip 192.168.4.154 #禁止ip192.168.4.154的主机访问
   </RequireAll>
   </Directory>
  </VirtualHost>
结果:

  

2)在Directory中基于用户的访问控制

  在Directory中支持的认证方式有两种 basic明文认证和 digest消息摘要认证,不是所有浏览器都支持摘要认证,因此一般来说用的较多的是 basic明文认证。
  用htpasswd命令生成认证的配置文件:

[root@happiness ~]# htpasswd -cb /data/httpduser walter 123456
[root@happiness ~]# htpasswd -b /data/httpduser alex 123456
[root@happiness ~]# cat /data/httpduser
  walter:$apr1$CYZpqBy5$gxnNCiKSIX.qN8LRI809L.
  alex:$apr1$vGncT2dc$.S0TsnDFINqf5BhHP0Hvi.
[root@happiness ~]# chcon -R --reference /var/www /data/httpduser

  编辑主配置文件:

[root@happiness ~]# vim /etc/httpd/conf/httpd.conf
DocumentRoot "/test/html"
<Directory "/test/html">
Options None
AllowOverride None
AuthType Basic  #认证方式Basic
AuthName "user test" #授权机制名称
AuthUserFile "/data/httpduser"  #授权文件位置
Require user alex  #允许访问的用户
</Directory>
[root@happiness ~]# systemctl restart httpd.service
结果:

    

3)基于组的用户访问控制

  除了对用户做访问控制之外,还能将用户划分为相应的组从而根据组来做相应的访问控制,接着上一个例子中的用户来做组访问控制。
  创建组文件:

[root@happiness ~]# vim /data/httpdgroup
   groupA:walter
   groupB:alex
[root@happiness ~]# chcon -R --reference /var/www /data/httpdgroup

  编辑主配置文件:

[root@happiness ~]# vim /etc/httpd/conf/httpd.conf
DocumentRoot "/test/html"
<Directory "/test/html">
Options None
AllowOverride None
AuthType Basic  #认证方式Basic
AuthName "user test" #授权机制名称
AuthUserFile "/data/httpduser"  #授权用户文件位置
AuthGroupFile "/data/httpdgroup"  #授权用户组文件位置
Require group groupA  #允许访问的组
</Directory>
[root@happiness ~]# systemctl restart httpd.service
结果:

  

httpd的虚拟主机VirtualHost

  通常在一台服务器安装Apache后,我们只能访问一个web站点,如果我们需要在一台服务器访问多个web站点,则需要通过Apache的VirtualHost虚拟主机实现,其实就是通过VirtualHost实现访问同一个服务器上的不同目录。
  虚拟主机支持三种建立方式:

  • 基于ip的方式,需要为每个虚拟主机准备至少一个ip地址,配置格式如:

      <VirtualHost IP:PORT>
        ServerName  "www.xxx.cn"  #虚拟主机域名
        DocumentRoot  "/www/xxx"  #虚拟主机web目录
      </VirtualHost>

    示例:

#创建目录
  [root@happiness ~]# mkdir -p /data/Vip/test1
  [root@happiness ~]# mkdir -p /data/Vip/test2
  [root@happiness ~]# chcon -R --reference /var/www/html /data/Vip #复制安全上下文
#创建index.html文件
  [root@happiness ~]# vim /data/Vip/test1/index.html
  <h1>virtual test based on ip. one</h1>
  [root@happiness ~]# vim /data/Vip/test2/index.html
   <h1>virtual test based on ip. two</h1>
#注释/var/www/html作为根路径
  [root@happiness ~]# vim /etc/httpd/conf/httpd.conf
  #DocumentRoot /var/www/html
#添加virtualhost.conf配置文件(文件名自定义)
  [root@happiness ~]# vim /etc/httpd/conf.d/virtualhost.conf
    <VirtualHost 192.168.4.119:80>
     DocumentRoot "/data/Vip/test1"
     <Directory "/data/Vip/test1">
     AllowOverride None
     Options None
     Require all granted
    </Directory>
    </VirtualHost>     <VirtualHost 192.168.4.120:80>
     DocumentRoot "/data/Vip/test2"
    <Directory "/data/Vip/test2">
   AllowOverride None
   Options None
   Require all granted
     </Directory>
    </VirtualHost>
#启动httpd服务
  [root@happiness ~]# systemctl start httpd.service
#清空防火墙规则
  [root@happiness ~]# iptables -F
访问结果:
  • 基于port的方式,需要为每个虚拟主机配置一个独立的port,配置格式如:

      Listen 8080  #指定其它端口时,需要添加监听该端口
      <VirtualHost IP:PORT>
        ServerName  "www.xxx.cn"  #虚拟主机域名
        DocumentRoot  "/www/xxx"  #虚拟主机web目录
      </VirtualHost>

    示例:

#在上面的基础上直接修改virtualhost文件
[root@happiness ~]# vim /etc/httpd/conf.d/virtualhost.conf
Listen 8080
<VirtualHost 192.168.4.119:80>
DocumentRoot "/data/Vip/test1"
<Directory "/data/Vip/test1">
AllowOverride None
Options None
Require all granted
</Directory>
</VirtualHost> <VirtualHost 192.168.4.119:8080>
DocumentRoot "/data/Vip/test2"
<Directory "/data/Vip/test2">
AllowOverride None
Options None
Require all granted
</Directory>
</VirtualHost>
访问结果:
  • 基于FQDN的方式,需要为每个虚拟主机配置一个FQDN,配置格式如:

      NameVirtualHost 172.16.100.6:80  #httpd-2.2需要在配置文件中添加此句
      <VirtualHost 172.16.100.6:80>
        ServerName www.xxx.com #指定FQDN
        DocumentRoot "/www/xxxcom"
      </VirtualHost>
      <VirtualHost 172.16.100.6:80>
        ServerName www.xxx.cn #指定FQDN
        DocumentRoot "/www/xxxcn"
      </VirtualHost>

    示例:

#在上面的基础上直接修改virtualhost文件
[root@happiness ~]# vim /etc/httpd/conf.d/virtualhost.conf
<VirtualHost 192.168.4.119:80>
ServerName www.test1.cn
DocumentRoot "/data/Vip/test1"
<Directory "/data/Vip/test1">
AllowOverride None
Options None
Require all granted
</Directory>
</VirtualHost> <VirtualHost 192.168.4.119:80>
ServerName www.test2.cn
DocumentRoot "/data/Vip/test2"
<Directory "/data/Vip/test2">
AllowOverride None
Options None
Require all granted
</Directory>
</VirtualHost>
访问结果:
 

httpd虚拟主机、站点访问控制、基于用户的访问控制、持久链接等应用配置实例的更多相关文章

  1. 简述站点访问控制、基于用户的访问控制、httpd虚拟主机、持久链接等应用配置实例

    1 站点访问控制 可基于两种机制指明对哪些资源进行何种访问控制: 文件系统路径 URL路径 注意: 从上到下匹配,匹配到一个就立即执行 如果没有子目录的访问控制,但是有父目录的访问控制,则子目录继承父 ...

  2. centos LAMP第二部分apache配置 下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转 配置apache的访问日志 配置静态文件缓存 配置防盗链 访问控制 apache rewrite 配置开机启动apache tcpdump 第二十节课

    centos    LAMP第二部分apache配置  下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转  配置apache的访问日志  配置静态文件缓存  配置防盗链 ...

  3. Nginx三种模式的虚拟主机(附Apache基于域名的虚拟主机)

    1.安装nginx # pcre中文"perl兼容正则表达式",安装pcre库是为了让nginx支持具备URL重写功能 # 的Rewrite模块,rewrite可以实现动态页面转成 ...

  4. CentOS 7 配置虚拟主机站点

    1.进入/etc/httpd/conf 下 将httpd.conf 打开. 2.将DocumentRoot注释掉.(将ServerName 打开要不会有错误警告). 3.将虚拟主机站点配置包含进来:I ...

  5. 基于Apache在本地配置多个虚拟主机站点

    简单的说,打开httpd.conf 在最后加入如下内容: <VirtualHost 127.0.0.2:80>    DocumentRoot d:/AppServ/www2    Ser ...

  6. CentOS7配置httpd虚拟主机

    本实验旨在CentOS7系统中,httpd-2.4配置两台虚拟主机,主要有以下要求: (1) 提供两个基于名称的虚拟主机: www1.stuX.com,页面文件目录为/web/vhosts/www1: ...

  7. httpd 虚拟主机建立之访问机制及其日志定义

    注:关闭防火墙,selinux VirtualHost定义: 基于IP地址VirtualHost: 编辑httpd.conf文件: #DocumentRoot "/web/html" ...

  8. 配置httpd虚拟主机

    轻松配置httpd的虚拟主机 httpd使用VirtualHost指令进行虚拟主机的定义.支持三种虚拟主机:基于ip,基于端口和基于名称.其中基于端口的虚拟主机在httpd的术语上(例如官方手册)也属 ...

  9. Apache的虚拟主机功能(基于IP、域名、端口号)

    Apache虚拟主机就是在一个Apache服务器上配置多个虚拟主机,实现一个服务器提供多站点服务,其实就是访问同一个服务器上的不同目录. 主要有三种方法: 1.通过不同的IP地址 2.通过不同的域名 ...

随机推荐

  1. nyoj 1216——整理图书 CF 229D—— Towers——————【dp+贪心】

    整理图书 时间限制:3000 ms  |  内存限制:65535 KB 难度:5   描述 小明是图书鹳狸猿,他有很多很多的书堆在了一起摆在了架子上,每摞书是横着放的,而且每摞书是订好的 是一个整体, ...

  2. ssh设置别名

    通常我们在 Termianl 下用 ssh 链接远程主机的时候,每次都需要输入一长串的用户名加主机地址,是不是觉得很麻烦? 我们知道在 /etc/ssh/ 目录下通常都会有 ssh_config 和 ...

  3. oracle简单命令

    1.cmd 中 sqlplus /nolog 2.SQL> conn sys/password as sysdba

  4. 错误提示”void is an invalid type for the variable“

    今晚做android作业,出现错误提示:void is an invalid type for the variable, invalid:无效的  variable:变量,在网上找了一下后知道是 方 ...

  5. plupload2.1.2文件合并

    1.前端 (1)依赖文件: <link type="text/css" rel="stylesheet" href="~/Content/plu ...

  6. js跳转到邮箱登录

    做邮箱验证时为了用户体验,往往会有跳转到邮箱登录这一按钮,其中的js如下: $("#btnemail").click(function () { var userEmail = $ ...

  7. maven常用依赖

    HttpServletRequest HttpServletResponse <dependency> <groupId>javax.servlet</groupId&g ...

  8. Web前端开发规范(一)

    1.前言 网页开发技术从1989年开始至今已经走过了20余年,从最初纯粹的学术交流,到门户网站.电子商务网站.博客.E-mail.Web游戏.SNS网站等,以及到如今的移动Web网站(其实可以认为是P ...

  9. python模块详解 logging

    打印日志的五个级别: import logging logging.debug('test debug') logging.info('test info') logging.warning('tes ...

  10. rollback

    savepoint test; rollback to savepoint test;