WEB应用之httpd基础入门(二)
前文我们聊了下httpd的一些基础设置,聊了下httpd的配置文件格式,长连接、mpm的配置以及访问控制基于文件路径和URL管控,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12551518.html;今天我们继续来聊一聊余下的一些常用配置;
1、定义路径别名:定义路径别名需要用到alias指令语法格式是alias /URL/ “PATH/TO/SOMEDIR/”;什么意思呢?通常情况用户访问/images/这个目录,对应文件系统路径应该是documentroot指令指定的路径下的images;如果使用了路径别名,用户访问/images这个URI就不一定是documentroot指令指定的路径下的images了;它相当于把文件系统上的一个路径映射成URL路径;该指令可以用在server配置块中,虚拟主机,和directory中;
示例:
提示:以上示例表示把文件系统路径“/usr/local/apache/icons/” 映射成URL路径“/icons/”,同时明确授权允许所有人访问“/usr/local/apache/icons/”目录;也就是说用户访问/icons/目录就相当于访问文件系统路径“/usr/local/apache/icons/”目录;
提示:这里需要注意一点的是如果我们映射的URL路径是以“/”结尾,那么对应文件系统路径也必须是“/”结尾,以上面的示例如果我们访问的URL是/icons将提示我们访问不到,如下图
提示:其实很好理解,上图的URL会去找documentroot指令指定的文件系统路径中找icons文件,如果能够找到就把对应文件内容响应给用户,如果是在documentroot指令指定的文件系统路径下icons是目录的话,我们访问/icons就会被/icons/匹配,从而访问到别名路径上去;因为我们访问目录默认会把目录下的文件给以索引的方式罗列出来,所以我们访问某个目录,其URL最后会填上一个“/”,这样一来就会被对应的别名路径匹配;
2、设定默认字符集:AddDefaultCharset charset 此指令表示添加默认字符集,可以用在server配置块中、虚拟主机、directory、和.htaccess中;默认是off的
3、日志设定;web服务日志类型有两种类型,一种是访问日志,记录用户访问站点的日志,另一中类型就是错误日志,记录服务端程序出错等日志;
errorlog:此指令表示定义错误日志存放路径及名称,该指令可以用在server配置段中,表示记录中心主机错误日志,同样也可以放在各虚拟主机中,表示记录各虚拟主机的错误日志;其语法格式为:errorlog file-path |syslog [:[facility] [:tag]] ;从语法格式看我们就知道错误日志除了可以在本地指定文件来记录外还可以将其发送给syslog;
示例:
提示:以上配置表示把错误日志存放在logs/error_log文件中,这里的相对路径是相对于serverroot指定的路径;
loglevel :此指令表示指定错误日志级别,我们知道日志是有级别的,这个指令的作用就是告诉服务器,什么级别或该级别以上的日志信息记录到错误日志中;
示例:
提示:以上表示记录日志级别为warn以及以上级别的日志;
访问日志:logformat:此指令表示指定访问日志格式,并给该格式取一名字,在后续的使用中可以通过customlog指令来调用该名字即可把访问日志格式记录成我们想要的格式;日志格式中有很多httpd内建的宏,每个宏都有不同的意义,我们定义访问日志格式也是通过组合这些宏来定义的;常见的宏以及对应的意思如下
%h:客户端IP地址;
%l:Remote User, 通常为一个减号(“-”);该用户指identd方式认证的用户;
%u:Remote user (from auth; may be bogus if return status (%s) is 401);非为登录访问时,其为一个减号;该用户指authenticated认证的用户;
%t:服务器收到请求时的时间;
%r:First line of request,即表示请求报文的首行;记录了此次请求的“方法”,“URL”以及协议版本;
%>s:响应状态码;记录最后一次响应状态码,如果没有">"号就表示记录第一次状态码信息;如果在重定向中这种状态码就不是很准确了;
%b:响应报文的大小,单位是字节;不包括响应报文的http首部;
%{Referer}i:请求报文中首部“referer”的值;即从哪个页面中的超链接跳转至当前页面的;
%{User-Agent}i:请求报文中首部“User-Agent”的值;即发出请求的应用程序;
更多宏指令说明,请参考官方文档http://httpd.apache.org/docs/2.4/mod/mod_log_config.html#logformat
示例:
提示:以上配置表示定义了两个格式的日志格式,分别叫combined 和common
customlog:此指令表示指定访问日志路径及名称以及日志格式名称
示例:
提示:以上配置表示指定访问日志为logs/access_log,并且使用combined的格式记录访问日志;同样的这里的日志路径也是相对于serverroot指定的路径;我们定义的访问日志格式到底是什么样呢?如下:
4、基于用户的访问控制
首先我们来了解下几个概念;
认证质询:客户端访问服务端时,如果我们对客户端访问的资源提前配置了需要认证才可访问,这时客户端访问服务端对应资源时,服务端会向客户端响应一个状态码为401,响应首部叫www-authenticate,明确的拒绝客户端访问,并告诉客户端,访问此资源需要认证提供用户名和密码;这个过程叫认证质询,意思就是告诉客户端访问的资源需要提供用户名和密码;如下
认证:当客户端收到服务端的认证质询响应后,此时浏览器上会有一个对话框,提示用户输入用户名和密码,用户把对应的用户名和密码输入到对话框中,点击确定,此时客户端的用户名和密码会通过authorization请求首部发送给服务端,服务端拿到客户端的用户名和密码,就会去比对客户端提供的用户名和密码是否正确,如果正确,则服务端把对应资源内容响应给客户端;这样的一个过程叫认证的过程,简单点说就是客户端提供用户名和密码,服务端进行验证是否正确,正确就响应对应资源内容,不正确就不响应;如下图所示
安全域:所谓安全域就是用户访问的资源路径,我们需要明确的通过名称对其进行表示,以便明确告知用户认证的原因;
了解了以上三个概念,我们不难理解,要想认证,首先得需要要用户名和密码,这个用户名和密码怎么存放?我们知道登录Linux系统时会提示我们输入用户名和密码,登录成功后我们就可以正常的输入命令操作Linux系统了,在Linux里我们把登录系统的用户名和密码信息存放在/etc/passwd和/etc/shadow文件中;但httpd认证的账号和密码怎么存放的呢?其实存放账号密码的工具有很多,我们可以存放在数据库中,也可以借鉴Linux系统账号密码的存放方式,把用户名和密码存放在文件中,只不过存放在数据库中,我们还需要考虑httpd怎么去数据库找对应的用户名和密码;通常情况下我们在登录某宝的网站,也是需要账号和密码的,这里的账号和密码不是通过这种方式验证的,像我们说的认证质询是http协议内部实现的访问控制机制,我们在登录某宝网站提供的用户名和密码认证的方式和这里说的认证不是一回事;通常情况下如果账号和密码的数量比较大时,我们通常会把账号密码信息存放在数据库里;如果用户名和密码的数量极少,我们用数据库存放账号和密码就显得不那么高效了;
在httpd程序中,提供了一个工具就可以用来创建存放用户名和密码的文件的工具,它叫htpasswd;我们来了解下它的使用法吧;
[root@test_node1-centos7 conf]# htpasswd --help
Usage:
htpasswd [-cimBdpsDv] [-C cost] passwordfile username
htpasswd -b[cmBdpsDv] [-C cost] passwordfile username password htpasswd -n[imBdps] [-C cost] username
htpasswd -nb[mBdps] [-C cost] username password
-c Create a new file.
-n Don't update file; display results on stdout.
-b Use the password from the command line rather than prompting for it.
-i Read password from stdin without verification (for script usage).
-m Force MD5 encryption of the password (default).
-B Force bcrypt encryption of the password (very secure).
-C Set the computing time used for the bcrypt algorithm
(higher is more secure but slower, default: 5, valid: 4 to 31).
-d Force CRYPT encryption of the password (8 chars max, insecure).
-s Force SHA encryption of the password (insecure).
-p Do not encrypt the password (plaintext, insecure).
-D Delete the specified user.
-v Verify password for the specified user.
On other systems than Windows and NetWare the '-p' flag will probably not work.
The SHA algorithm does not use a salt and is less secure than the MD5 algorithm.
[root@test_node1-centos7 conf]#
提示:-c表示第一次创建存放用户名和密码的文件,-m表示使用md5方式加密存放密码(默认加密方式),-s表示使用sha方式加密密码,-B表示强制使用bcrypt方式加密密码,-p表示不加密密码,明文存放;-D表示删除一个用户和密码;-b表示使用模式,直接在命令行指定用户名和密码,直接创建,不需要手动输入密码;-i表示从标准输入获取密码通常用于脚本中;
了解了htpasswd工具的选项后,我们再来说说认证方式,在httpd中基于用户的认证有两种,basic明文认证和digest消息摘要认证,通常basic认证是不安全的,很容易泄露用户名和密码,但是digest认证相对是比较安全的,但是需要客户端支持才行;了解了以上httpd的认证过程后,我们来看看httpd是怎么配置认证的;
authtype:此指令表示指定认证类型;
authname “string”:此指令表示告诉用户为什么认证,通常用于提示用户输入用户名和密码;
authuserfile:指定存放用户名和密码的文件路径已经文件名称;
require user:指定允许认证的用户,没有被指定的用户是不能够被认证的,即便authuserfile文件中存放的有对应用户名和密码;
以上指令只能用于directory或.htaccess中使用,通常用于定义安全域;
示例:
创建虚拟用户用于httpdbasic认证
[root@test_node1-centos7 conf]# htpasswd -c /etc/httpd/conf.d/.htpasswd tom
New password:
Re-type new password:
Adding password for user tom
[root@test_node1-centos7 conf]# htpasswd /etc/httpd/conf.d/.htpasswd jerry
New password:
Re-type new password:
Adding password for user jerry
[root@test_node1-centos7 conf]# cat /etc/httpd/conf.d/.htpasswd
tom:$apr1$xLIN6FgB$tQbKDzRRMyx/ahUGHhtN10
jerry:$apr1$5gjGaRfC$hK0MOgR6/dYpU5HBDH1nC/
[root@test_node1-centos7 conf]#
提示:我们创建了/etc/httpd/conf.d/.htpasswd文件来存放用户名和密码;并创建了两个虚拟用户tom和jerry
提示:以上配置表示用户访问根路径需要用户认证,认证用户是tom,认证类型是basic
提示:可以看到我们用tom用户数可以正常登录的,我们用jerry用户是否可以登录呢?如下
提示:可以看到没有写在require user 里的用户是不能登录的,即便是authuserfile里有的用户名和密码;
require valid-user:此指令表示允许authuserfile中的所有用户登录访问
提示:以上配置表示允许/etc/httpd/conf.d/.htpasswd文件中的所有用户可以登录访问
提示:可以看到authuserfile里的用户都可以登录访问
以上是基于用户帐号进行认证的配置实例演示,接下来我们在来说说基于组账号认证
authgroupfile:此指令表示指定组文件,这个文件的格式是组名:用户名1 用户名2……
require group :此指令表示指定允许认证的组名
示例:
首先创建一个authguoupfile
[root@test_node1-centos7 conf.d]# htpasswd /etc/httpd/conf.d/.htpasswd xiaoming
New password:
Re-type new password:
Adding password for user xiaoming
[root@test_node1-centos7 conf.d]# htpasswd /etc/httpd/conf.d/.htpasswd xiaohong
New password:
Re-type new password:
Adding password for user xiaohong
[root@test_node1-centos7 conf.d]# cat /etc/httpd/conf.d/.htpasswd
tom:$apr1$xLIN6FgB$tQbKDzRRMyx/ahUGHhtN10
jerry:$apr1$5gjGaRfC$hK0MOgR6/dYpU5HBDH1nC/
xiaoming:$apr1$xA1lDL.b$frhycSz3Ainlm4kktPn5A1
xiaohong:$apr1$HhAZCYJE$C/75gZ0k9x/5cw47Udooz1
[root@test_node1-centos7 conf.d]# cat > /etc/httpd/conf.d/.htgroup <<EOF
> group1:xiaohong xiaoming
> group2:tom jerry
> EOF
[root@test_node1-centos7 conf.d]# cat /etc/httpd/conf.d/.htgroup
group1:xiaohong xiaoming
group2:tom jerry
[root@test_node1-centos7 conf.d]#
提示:以上新增了两个用户小明和小红,然后在/etc/httpd/conf.d/创建了一个authgroupfile 名为.htgroup,并在组文件中明确定义了两个组group1里面有两个成员xiaoming和xiaohong ;group2中定义了两个成员tom和jerry,接下来我们配置只允许group1里的用户访问;
提示:以上配置表示group1组里的成员允许认证访问
提示:可以看到group1里的xiaoming和xiaohong用户都是可以正常的认证访问;那么对应的group2里的成员是否可以访问呢?
提示:可以看到没有被允许的组成员是不能够认证访问的
WEB应用之httpd基础入门(二)的更多相关文章
- WEB应用之httpd基础入门(四)
前文我们聊到了httpd的虚拟主机实现,状态页的实现,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12570900.html:今天我们来聊一聊后面的常用基础配 ...
- WEB应用之httpd基础入门(一)
前文我们聊了下http协议web服务的一些常识和httpd服务器软件三种响应模型的简单介绍,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12515075.ht ...
- WEB应用之httpd基础入门(五)
前文我们聊到了httpd的启动用户和相关权限的说明,资源压缩配置.https的实现,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12593675.html:今 ...
- WEB应用之httpd基础入门(三)
前文我们聊到了httpd的路径别名.访问日志定义.basic认证配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12561236.html:今天我们来聊一聊 ...
- Swift语法基础入门二(数组, 字典, 字符串)
Swift语法基础入门二(数组, 字典, 字符串) 数组(有序数据的集) *格式 : [] / Int / Array() let 不可变数组 var 可变数组 注意: 不需要改变集合的时候创建不可变 ...
- C#基础入门 二
C#基础入门 二 循环语句 与C语言中用法相同. continue:结束本次循环(continue)后面的代码不再执行,进入下次循环(通常与if连用). 数组 一维数组定义:int[] intArra ...
- 从零开始学习 asp.net core 2.1 web api 后端api基础框架(二)-创建项目
原文:从零开始学习 asp.net core 2.1 web api 后端api基础框架(二)-创建项目 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.ne ...
- Web安全之Web 安全介绍与基础入门知识
web安全介绍与基础入门知识 安全与安全圈 甲方与乙方 甲方:如腾讯,阿里等需要安全服务的公司 乙方:提供安全服务产品的服务型安全公司 web与二进制 web,研究web安全 二进制,研究如客户端安全 ...
- Linux系统WEB服务之Nginx基础入门
一.Nginxi简介 Nginx是什么?它是一个开源.高性能的WEB服务器软件和代理服务器软件,由俄罗斯人Igor Sysoev 开发实现.它的功能主要分三类,第一是它作为一个WEB服务软件使用:第二 ...
随机推荐
- 吴裕雄--天生自然 R语言开发学习:时间序列(续三)
#-----------------------------------------# # R in Action (2nd ed): Chapter 15 # # Time series # # r ...
- Vuex安装使用
vuex是以插件的方式存在的. 安装:打开项目的根目录,即package.json所在目录,执行以下命令: npm install vuex --save-dev 背景:小型应用里的每个组件维护着自有 ...
- 数据库中慎用float数据类型(转载)
数据库中慎用float数据类型 大多数编程语言都支持float或者double的数据类型.而数据库中也有相同关键字的数据类型,因此很多开发人员也自然而然地在需要浮点数的地方使用float作为字段类 ...
- 我们一起学React Native(一):环境配置
最近想在项目中实现跨平台,对比一下主流的实现方式,选用了React Native.参考网上的教程,对于一直都是原生移动端开发,对前端的知识不是很了解的,感觉入门不是特别简单.于是打算把学习React ...
- http2.0与WebSocket的关系是怎么样的
按照OSI网络分层模型,IP是网络层协议,TCP是传输层协议,而HTTP是应用层的协议.在这三者之间,SPDY和WebSocket都是与HTTP相关的协议,而TCP是HTTP底层的协议.WebSock ...
- ckeditor 捕获键代码
<!--<script type="text/javascript"> var ctrlKey = false; var shiftKey = false; if ...
- Leetcode 206题 反转链表(Reverse Linked List)Java语言求解
题目描述: 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 迭代解 ...
- 等效燃油消耗ECMS与庞德里亚金最小值原理PMP中协同状态的关系
今儿阅读了一篇文献——<车联网环境下并联混合动力客车控制策略优化研究>,是北理的博士所写的,内容比较翔实.主要是里面的关于ECMS和庞德里亚金最小值原理(PMP)的关系推导很让人印象深刻, ...
- 安装Kubernetes集群时遇到的问题及解决方法
在搭建Kubernetes集群时遇到一些问题,记录在这里. 搭建过程在另一篇文章:VirtualBox上使用kubeadm安装Kubernetes集群 1. 虚拟机安装完CentOS7登录时遇到war ...
- JAVA 中的反射(reflact)
获取反射加载类(获取类的字节码)的3种方式: Class class1=Class.forName("lession_svc.lession_svc.reflact.Person" ...