栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

计算机网路基础7--http web服务器搭建

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

计算机网路基础7--http web服务器搭建

4.3 http web服务器

web服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务:向发出请求的浏览器提供文档的程序。最常用的Web服务器是Apache、Nginx和Microsoft的Internet信息服务器(Internet Information Services,IIS)。

4.3.1 提供http web服务的应用程序

客户端:IE、火狐、Chrome等浏览器,属于http web服务的客户端应用程序。
服务器端:httpd – Apache开发的一款服务器端web服务应用程序。其他服务器端应用程序比如nginx、lighttpd、IIS等。

httpd、nginx只能处理静态页面(html),如需解析动态页面(jsp),可以通过反向代理将请求发送到后端的服务器完成动态页面处理,例如tomcat、IIS等。
tomcat擅长解析动态页面(JSP),tomcat本身也支持html,只是性能不如httpd。
流行的动态页面有:JSP、ASP、PHP、PERL等。
IIS:微软开发的服务器端http web服务应用程序。只支持windows系统,付费。
apache httpd、nginx:开源的,支持linux、windows等。
web服务器市场占有率统计:www.netcraft.com


4.3.2 httpd

1995开源社区发布Apache(a patchy server),后来发展状态成立了ASP(apache software foundation)。

1、httpd特性:

  • 高度模块化:core + modules。需要用什么模块加载什么模块。
  • DSO: Dynamic Shared Object 动态加/卸载。
  • MPM:multi-processing module多路处理模块。 MPM有三种工作模式,不同模式对应了不同的web响应模型。

2、MPM工作模式小结:
prefork模式:多进程I/O模型,每个进程响应一个请求,默认模型。

一个主进程:生成和回收n个子进程,创建套接字,不响应请求;
多个子进程:工作work进程,每个子进程处理一个请求;系统初始时,预先生成多个空闲进程,等待请求,最大不超过1024个。

prefork模式

worker模式:复用的多进程I/O模型,多进程多线程,IIS使用此模型。

一个主进程:生成m个子进程,每个子进程负责生个n个线程,每个线程响应一个请求,并发响应请求:m*n。

worker模式

event模式:事件驱动模型(worker模型的变种)。

一个主进程:生成m个子进程,每个进程直接响应n个请求,并发响应请求:m*n,有专门的线程来管理这些keep-alive类型的线程,当有真实请求时,将请求传递给服务线程,执行完毕后,又允许释放。这样增强了高并发场景下的请求处理能力。
event模式httpd-2.4才成为稳定版。

event模式

处理请求中,进程角色切换模型:

进程角色切换

3、httpd功能概述

  • 虚拟主机,一个主机可以创多个虚拟机,从而支持多个web网站。可以通过IP、Port、FQDN区分。

FQDN:(Fully Qualified Domain Name)完全限定域名:同时带有主机名和域名的名称。(通过符号“.”)例如:主机名是bigserver,域名是mycompany.com,那么FQDN就是bigserver.mycompany.com。

-CGI:Common Gateway Interface,通用网关接口。

html网页动态内容,需要在服务器端执行脚本后返回执行结果,则需要CGI转换。

  • 反向代理:httpd服务器可以作为反向代理服务器(一个调度器),根据客户端请求类型,调度后台服务器完全请求处理。不是httpd擅长的,nginx性能更好。
  • 负载均衡:httpd不擅长,有这个功能。

4、httpd安装
使用使用centos7发行版自带的httpd版本rpm方式安装:yum install -y httpd。 如有特殊需求需要装指定版本,可采用编译方式安装。

rpm -q httpd:查看httpd是否已安装。
rpm -ql httpd:装完后,查看httpd的文件列表。
rpm -qi httpd:查询httpd的概要信息。
httpd -M:查看哪些模块已经被加载了,分为静态编译模块和动态加载模块,动态加载模块不需要重启即时生效。 查看静态编译模块:httpd -l。
模块文件路径: /etc/httpd/modules,/usr/lib64/httpd/modules
动态加载的模块路径:/usr/lib64/httpd/modules。

  • 启动服务:service httpd start。启动服务后,查看端口监听ss -ntl,有80端口,说明服务启动了。

启动服务后,pstree -p| grep httpd查看系统中httpd服务进程,可以看到已经跑了8个worker进程和一个主进程,支持用户响应,占光了再生成新的进程。
ll /proc/进程id/fd可以查看这个进程打开了多少个文件。

httpd服务进程

  • httpd服务控制和启动配置:

配置2、3、4、5模式开机服务是否启动:chkconfig httpd on|off;查看当前配置状态:chkconfig --list httpd。
开机状态服务控制:service {start|stop|restart|status|configtest|reload} httpd

-站点网页文档根目录:/var/www/html。在该目录下新建一个index.html文件,则在浏览器输入本机IP,就初始化创建了一个网站。

  • 服务脚本:/etc/rc.d/init.d/httpd。脚本配置文件:/etc/sysconfig/httpd。

http2.2通过/etc/sysconfig/httpd配置脚本,可切换MPM模式,重启服务生效。如下图切换为worker模式。Httpd2.4通过动态模块方式配置:/etc/httpd/conf.modules.d/00-mpm.conf,重启服务生效。
如下图切换为worker模式的进程树(pstree -p| grep httpd)。prefork是一个进程响应一个请求。而worker模式,一个master进程生成若干个子进程,一个子进程再生产若干个线程处理请求,
查看httpd进程:ps aux | grep httpd


httpd脚本切换worker模式


worker_模式进程树

  • 主程序文件: 对应MPM三种模式,默认/usr/sbin/httpd,prefork模式。更改配置文件可切换MPM模式。

/usr/sbin/httpd – 默认主程序
/usr/sbin/httpd.worker。worker模式下的主程序。
/usr/sbin/httpd.event。event模式下的主程序。

  • 主进程文件:cat /etc/httpd/run/httpd.pid查看httpd主进程编号

  • 日志文件目录: /var/log/httpd

  • 帮助文档包:httpd-manual。本地安装帮助文档包方便在未联网状态下查看帮助。

  • 配置文件:

主配置文件: /etc/httpd/conf/httpd.conf。个人配置不建议在主配置文件修改。
个人配置:/etc/httpd/conf.d/。对于个人的配置,建议在/etc/httpd/conf.d/目录下新增,只要是.conf结尾的就行。如果有Include conf.d/*.conf行,说明是支持这种操作的。
检查配置语法是否正确:httpd -t。


支持个人配置文件


5、常见配置:/etc/httpd/conf/httpd.conf。PS:修改配置后重新加载服务生效service httpd reload
httpd配置文件的组成:directive value,类似于key-value对,一个配置项对应一个配置。directive不区分字符大小写,value为路径时,是否区分大小写,取决于文件系统。

  • 配置端口监听: 格式-Listen [IP:]PORT,表示监听指定IP的指定端口,如果不指定IP,表示监听本机的所有端口。注意:Listen指令至少一个,可监听多个(即可定义多行Listen,监听多个端口)。

例如:Listen 80,监听本机所有IP的80端口。配置完成后,通过ss -ntl查看80端口是否处于监听状态。

  • 显示httpd版本信息:grep "ServerTokens" /etc/httpd/conf/httpd.conf查看当前配置。

可设置为ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full。一般设置为ServerTokens Prod隐藏具体的版本。

  • 配置持久连接:KeepAlive off|on。当一个请求三次握手建立连接后,是否请求完成,连接就马上断开。如果请求需要获取多个资源的场景很多,打开长连接效率较高。当然还可以配置最大连接时间KeepAliveTimeout和最大请求次数MaxKeepAliveRequests后断开连接。

测试:使用telnet测试httpd的开启和关闭长连接,获取资源的差异:yum install telnet。

请求:telnet WEB_SERVER_IP PORT
头部信息:
GET /URL HTTP/1.1
Host: WEB_SERVER_IP

telnet 198.168.8.102 80  # 连接主机198.168.8.102的80端口。
  GET /index.html HTTP/1.1  
  host: 8.8.8.8  # 通过端口访问,host字段的值没用,随便填
...
  GET /test.html HTTP/1.1    
  host: 8.8.8.8  
  • 配置文档路径映射: DocumentRoot /path。很重要,DocumentRoot指向的路径为URL路径的起始位置。例如:
DocumentRoot "/app/data“
"https://HOST:PORT/test/index.html"  --> /app/data/test/index.html
  • 定义站点主页: DirectoryIndex index.html index.html.var

  • 访问|错误日志配置:

错误日志目录:Errorlog logs/error_log。logs是配置的httpd root目录。
日志级别:LogLever warn
日志格式: LogFormat。配置中给定了多个日志格式对应的变量。需要的时候直接参考apache的帮助文档说明。


日志配置


4.3.3 虚拟主机配置方法

默认一个主机上只有一个网站,即当前主机IP对应的网站。虚拟主机:即一个主机配置多个虚拟的主机,对应多个网站。不同主机通过唯一标识进行区分。有三种方式配置虚拟主机:

IP区分,PORT端口相同。
PORT区分,IP相同。
FQDN不同。请求报文首部。FQDN比较普遍的方法。


方法一:IP区分,建立三个虚拟主机

1、准备IP:
按前述nmcli方法,在一个网卡上配三个IP:192.168.8.11,192.168.8.12,192.168.8.13

2、准备数据:

  • 配置站点主页路径,假设在/app下创建三个目录,对应三个网站。mkdir website1;mkdir website2;mkdir website3;
  • 在各站点下创建各自的首页:echo "website1 Main page" > website1/index.html,echo "website2 Main page" > website2/index.html,echo "website3 Main page" > website3/index.html

3、配置虚拟主机配置项:
注意,还是之前说的原则,在个人配置文件/etc/httpd/conf.d/目录下创建配置文件进行配置,假设创建的个人配置文件为my_vhost.conf。参考主配置文件/etc/httpd/conf/httpd.conf配置虚拟主机的格式,一般在主配置文件末尾:tail -f /etc/httpd/conf/httpd.conf。如果没有grep VirtualHost /etc/httpd/conf/httpd.conf。

配置虚拟主机格式

vim /etc/httpd/conf.d/my_vhost.conf;按下图示例配置虚拟主机:


IP区分方式配置三个虚拟主机示例

配置完成后:重新加载服务service httpd reload,ss -ntl,查看端口监听。
登陆其他主机使用curl命令测试三个网站是否可以访问:curl 192.168.8.11;curl 192.168.8.12;curl 192.168.8.13。默认都是80端口,所以不需要指定端口号。


方法二:端口区分,建立三个虚拟主机

很简单,方法一的配置基础上,在配置文件把IP改为*,增加端口,并增加端口监听即可,vim /etc/httpd/conf.d/my_vhost.conf,如下图所述:


端口区分方式配置三个虚拟主机

修改完成后重新加载服务service httpd reload,ss -ntl,查看端口监听。
登陆其他主机使用curl命令测试三个网站是否可以访问:curl 192.168.8.11:8001;curl 192.168.8.11:8002;curl 192.168.8.11:8003。

实际生产环境中,不可能让用户输入不同的非默认端口号来区分访问不同的网站,更习惯用名字区分。所以FQDN方法应该更广泛。


方法三:FQDN区分,建立三个虚拟主机

1、首先,解决DNS问题: 搭建三个网站,比如:www.test1.com,唯一限定名/域名,域名需要DNS来解析,还要搭建DNS服务器。测试使用/etc/hosts模拟DNS解析,如下图,配置三个域名www.a.com,www.b.net,www.c.org。


模拟配置DNS域名

2、配置文件: 打开基于名称的虚拟主机开关,主配置文件默认是注释掉的:cat /etc/httpd/conf.d/my_vhost.conf |grep VirtualHost查看。


打开使用基于名称的虚拟主机开关
把这一行粘贴到个人配置文件中,并取消注释。FQDN区分,则不需要端口监听、不需要IP,要增加域名配置,最终配置如下图。


FQDN配置虚拟主机

3、修改完成后重新加载服务service httpd reload,登陆其他主机使用curl命令测试三个网站是否可以访问:curl www.a.com;curl www.b.net;curl www.c.org。

4、使用telnet测试不同主机名获取资源,注意,使用域名区分虚拟主机,这个时候请求头的host必须对应为确定的主机名了:


使用telnet测试host

注意:FQDN,如果仍然按IP访问,则在配置文件中配置在最前面的是默认的访问网站


  • 站点访问控制配置:
    参考链接
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/985276.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号