首页 > 代码库 > web server简介
web server简介
web server
本质就是通过网络调用其他网站的资源。
分类
-
web :WWW可以让Web客户端(常用浏览器)访问浏览Web服务器上的页面。 是一个由许多互相链接的超文本组成的系统,通过互联网访问。在这个系统中,每个有用的事物,称为一样“资源”;并且由一个全局“统一资源标识符”(URI)标识;这些资源通过超文本传输协议(Hypertext Transfer Protocol)传送给用户,而后者通过点击链接来获得资源。
-
html :是用来描述网页的一种标记语言。
-
http :超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。
-
httpd :HTTP 服务器的主程序。被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程的池。主要用来传输html的内容。
httpd
分类介绍
-
程序版本
httpd 1.3:官方已经停止维护;
httpd 2.0;
httpd 2.2:;
httpd 2.4:目前最新稳定版;
-
功能特性
CGI:Common Gateway Interface古老的动态网接口通用网关接口
虚拟主机:IP,PORT, FQDN,一台虚拟服务器可以同时n个网站站点。
反向代理
负载均衡
路径别名
丰富的用户认证机制
basic
digest
支持第三方模块
......尽量不要编译安装, 编译安装:定制新功能,或其它原因;
-
安装
帮助手册 --> httpd-manual.noarch
安装包组 --> httpd.x86_64
开发包组 --> httpd-tools.x86_64
安装httpd: yum install httpd -y
-
程序环境
-
Centos6 httpd-2.2
配置文件:
/etc/httpd/conf/httpd.conf /etc/httpd/conf.d/*.conf 把welconm.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默认被当做根文件系统路径indes.htmlt测试页
模块文件路径:
/usr/lib64/httpd/modules 模块相关的配置文件:/etc/httpd/cong.modules.d/*.conf
服务控制和启动:
chkconfig httpd on|off service {start|stop|restart|status|configtest|reload} httpd
-
CentOS 7:httpd-2.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
-
高度模块化
core + modules
DSO:dynamic shared object ##动态共享对象
MPM:Multipath processing Module(多路处理模块)实现用户多路响应请求的
MPM:prefork, worker, event
prefork:两级进程模型,父进程管理子进程,每个子进程响应一个请求;
worker:三级模型,父进程管理子进程,子进程通过线程响应用户请求;每线程处理一个用户请求;
event:两级模型,父进程管理子进程,子进程通过event-driven事件驱动机制直接响应n个请求;
httpd-2.2:event仍为测试使用模型;
httpd-2.4:event可生产环境中使用;
重要区别:
2.2在编译时选那个就是哪个不可更改
2.4可以直接更改,更改后重启生效
- 配置方式
MPM配置:三个都有提供但是不能同时生效在centos7中想生效哪个取消注释重启服务就可以
prefork的配置
worker的配置大致相同这里省略
event只有2.4才会用到
<IfModule prefork.c>
StartServers 8 ##服务启动后立即创建多少子进程使用ps -aux可以查看
MinSpareServers 5 ##最少空闲进程数
MaxSpareServers 20 ##最大空闲进程数
ServerLimit 256 ##最大允许启动的服务器子进程数量
MaxClients 256 ##允许同时活跃的服务器进程最大值
MaxRequestsPerChild 4000 ##一个子进程最多连续处理多少请求
</IfModule>
centos6生效方式
修改文件/etc/sysconfig/httpd启用模块就可以
centos7生效方式
修改文件/etc/httpd/conf.modules.d/00-mpm.conf 把需要的启用不需要的注释。
reload重启生效
http
由于http是文本传输,传输过程是明文,为了避免传输过程资料被窃取、伪造、修改等等,在URL前面加上https,表明是用SSL加密的。你的电脑与服务器之间收发的信息传输将更加安全。
URL:统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的简洁表示。
分类介绍
用户上网过程
用户-->fstab-->DNS-->web(默认使用80端口)
IANA:
- 0-1023:众所周知,永久地分配给固定的应用使用,特权端口;
1024-41951:亦为注册端口,但要求不是特别严格,分配给程序注册为某应用使用;3306/tcp, 11211/tcp;
41952+:客户端程序随机使用的端口,动态端口,或私有端口;其范围定义在/proc/sys/net/ipv4/ip_local_port_range;
工作模式:
http请求报文:http request
http响应报文: http response
一次http事务:请求<-->响应
客户端由内核每层封装内容发送到服务端,服务端每层打开封装由服务器应用层打开。一次http协议的交互就结束了
客户端请求服务端响应时需要把自己的需求说明白,比如传输什么文件或者视频,什么格式,大小,传输过程是否需要压缩等等。
一次完整的http请求处理过程:
(1) 建立或处理连接:接收请求或拒绝请求; (2) 接收请求:接收来自于网络上的主机请求报文中对某特定资源的一次请求的过程; (3) 处理请求:对请求报文进行解析,获取客户端请求的资源及请求方法等相关信息; (4) 访问资源:获取请求报文中请求的资源; (5) 构建响应报文: (6) 发送响应报文: (7) 记录日志:##记录服务端服务一个客户端的过程,比如时长,内容。
日志很重要。对于电商来说,一个客户端的日志可以总结出来他需要什么,喜欢什么。通过超链接访问统计在哪里的广告投放效果比较好,等等。
因为早些年能使用互联网的人非常少,后来某些网站访问量越来越大,出现了C10K(一万个并发连接)的问题,下面解决办法
并发访问响应模型:
单进程I/O模型:启动一个进程处理用户请求;这意味着,一次只能处理一个请求,多个请求被串行响应;
多进程I/O结构:由父进程并行启动多个子进程,每个子进程响应一个请求;
复用的I/O结构:一个进程响应n个请求;
多线程模式:一个进程生成n个线程,一个线程处理一个请求;线程之间是有缺憾的,比如一个线程占用这个资源第二个线程就无法访问,而且线程数量也是有限的
事件驱动(event-driven):一个进程直接处理n个请求;比较新的,虽然比上面的方法优秀但是也是有限的。
复用的多进程I/O结构:启动多个(m)个进程,每个进程生成(n)个线程
响应的请求的数量:m*n
web server
定义‘Main‘ server的文档页面路径
http有两种形式
中心主机
虚拟主机
2.2不能同时启用 必须注释掉中心主机虚拟主机才能启用
2.4只要启动虚拟服务器主服务器自动失效,不用手动配置
定义中心服务的方式
ServerName服务器名称 此处的名字主要用来标识当前服务器自己主要服务于谁,跟真正的主机名没有关系,如果没有定义,httpd启动的时候试图反解本地的IP地址,如果解析失败localhost localdomain为servername当做servername,如果怕解析失败直接吧本机地址写进fstab文件中 加上域名,把主机名记得也要改。正常情况下没有权限访问,这是因为httpd会对站点资源映射的URL或目录路径做访问控制。这是2.4 特性。2.2没有限制
语法格式: ServerName [scheme://]fully-qualified-domain-name[:port] DocumentRoot ""用来标识自己主要服务于谁 serveralias:别名对中心主机不可用 文档路径映射: DoucmentRoot指向的路径为URL路径的起始位置 其相当于站点URL的根路径; URL PATH与FileSystem PATH不是等同的,而是存在一种映射关系;这时候仅仅只是改地址是没有权限访问的,还需要设定在/etc/httpd/conf/httpd.conf目录下实现访问控制权限。
站点访问控制常见机制
可基于两种机制指明对哪些资源进行何种访问控制
/etc/httpd/conf/httpd.conf
文件系统路径: <Directory ""> ##单独针对某个目录下的文件控制 Options FollowSymLinks AllowOverride None </Directory>
<File ""> ##如果只针对一个文件或者一组文件,可以使用通配符 ... </File> <FileMatch "PATTERN"> ##能够使用正则表达式匹配的文件路径, ... </FileMatch>
URL路径: <Location ""> ##用来指明Location中都应该给定的是URL ... </Location> <LocationMatch "PATTERN"> ##使用模式匹配,正则匹配出来的路径 ... </LocationMatch>
<Directory>中“基于源地址”实现访问控制:限制用户登录方法
- httpd-2.2:
order和allow、deny
order:定义allow和deny的 生效次序;写在后面的表示默认法则;allow表示允许那些地址访问,deny表示拒绝那些用户地址。
Allow from, Deny from
来源地址:172.16 ##匹配范围
- httpd-2.4
基于IP控制:
Require ip +IP地址或网络地址
Require not ip +IP地址或网络地址
举例:
<Requireall>
Require not ip 172.16.0.200 ##拒绝这个IP,由上往下匹配范围小的写上面。
Require ip 172.16 ##允许这个网段
</Requireall>
基于主机名控制:
Require host 主机名或域名
Require not host 主机名或域名
http -t 检查语法错误
日志设定
访问日志
错误日志
访问日志 ##日志很重要
LogFormat 格式 "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
%h:客户端IP地址;
%l:Remote User, 通常为一个减号(“-”);远程登录的用户的名字,使用identd登录的才记录
%u:Remote user (from auth; may be bogus if return status (%s) is 401);非为登录访问时,其为一个减号;
%t:服务器收到请求时的时间;
%r:First line of request,即表示请求报文的首行;记录了此次请求的“方法”,“URL”以及协议版本;
%>s:响应状态码;4开头表示客户端出错,5开头表示服务端出错,如果说请求报文原始被重定向了,表示这仅仅是第一次发请求的状态码。
%b:响应报文的大小,单位是字节;不包括响应报文的http首部;如果是0用-代替
%{Referer}i:请求报文中首部“referer”的值;即从哪个页面中的超链接跳转至当前页面的;
错误日志
Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
基于用户的访问控制
认证质询:
WWW-Authenticate ##进行身份认证 :响应码为401,拒绝客户端请求,并说明要求客户端提供账号和密码;
认证:
Authorization:客户端用户填入账号和密码后再次发送请求报文;认证通过时,则服务器发送响应的资源;认证通过后会形成缓存,通常是客户端不关闭缓存一直存在,避免重复输入密码
认证方式有两种:
basic:明文
digest:消息摘要认证 ##有的浏览器版本比较低的不支持
定义安全域:需要用户认证才能访问的路径,应通过名称对其进行表示,便于告知户认证的原因。
basic认证配置示例:
(1) 定义安全域
<Directory "">
Options None ##是否允许索引
AllowOverride None ##不允许覆盖
AuthType Basic ##认证类型“basic | digest”
AuthName "String“ ##提示用户为什么要做认证,“string”是我们自己给定的
AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE" ##用户密码路径
Require user username1 username2 ... ##要想访问成功得这些用户认证成功才可以,这是用户名
</Directory>
允许账号文件中的所有用户登录访问:
Require valid-user
提供账号和密码存储(文本文件)
使用专用命令完成此类文件的创建及用户管理
htpasswd [options] /PATH/TO/HTTPD_PASSWD_FILE username
-c:自动创建此处指定的文件,因此,仅应该在此文件不存在时使用;
-m:md5格式加密
-s: sha格式加密
-D:删除指定用户
-b:批模式添加用户 最后一个字符串默认是密码
[root@localhost /]# htpasswd -c /tmp/test.users tom ##默认使用md5加密算法
New password: ##静默输出密码
Re-type new password: ##重复输入密码
Adding password for user tom
[root@localhost /]# cat /tmp/test.users ##查看文件中密码已经生成
tom:$apr1$0yGFYwys$ZNfZY6g5bofBscsncCjAe0
html
html:hyper text mark language, 编程语言,超文本标记语言,用来编写一个网站的页面,下面是网页的格式
- css :(Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化,实现网站排版,使网站更漂亮。
- .js : JavaScript的语言的后缀类似于.html。
- images: 一般是网页资源中存放图片的文件。
web server简介