第四章 Web服务器(1)

1. www简介

Web网络服务也叫WWW(World Wide Web 全球信息广播)万维网服务,一般是指能够让用户通过浏览器 访问到互联网中文档等资源的服务

Web 网络服务是一种被动访问的服务程序,即只有接收到互联网中其他主机发出的请求后才会响应,最终 用于提供服务程序的 Web 服务器会通过 HTTP(超文本传输协议)或HTTPS(安全超文本传输协议)把请 求的内容传送给用户,如图:

1.1. 常见Web服务程序介绍:

Windows系统中默认Web服务程序是I I S(Internet Information Services),这是一款图形化的网站管 理工具,IIS程序不光能提供Web网站服务,还能够提供FTP、NMTP、SMTP等服务功能,但只能在 Windows系统中使用

2004 年 10 月 4 日,为俄罗斯知名门户站点而开发的 Web 服务程序 Nginx 横空出世。Nginx程序作为一 款轻量级的网站服务软件,因其稳定性和丰富的功能而快速占领服务器市场,但Nginx 最被认可的还当是 低系统资源占用、内存少且并发能力强,因此得到了国内诸如新浪、网易、腾讯等门户站的青睐

Apache------取自美国印第安人土著语Apache,寓意着拥有高超的作战策略和无穷的耐性,由于其跨平台和 安全性广泛被认可且拥有快速、可靠、简单的API扩展。目前拥有很高的Web服务软件市场占用率,全球使 用最多的Web服务软件,开源、跨平台(可运行于Unix,linux,windows中)

Tomcat------属于轻量级的Web服务软件,一般用于开发和调试JSP代码,通常认为Tomcat是Apache的扩 展程序

1.2. 服务器主机

网站是由域名、网页源程序和主机空间组成的,其中主机空间则是用于存放网页源代码并能够将网页内容 展示给用户,虽然本小节与Apache服务没有直接关系,但如果您想要在互联网中搭建网站并被顺利访问, 主机空间一定不能选错

虚拟主机:在一台服务器中分出一定的磁盘空间供用户放置网站、存放数据等,仅提供基础的网站访问、数 据存放与传输流量功能,能够极大的降低用户费用,也几乎不需要管理员维护除网站数据以外的服务,适 合小型网站

VPS(Virtual Private Server):在一台服务器中利用OpenVZ、Xen或KVM等虚拟化技术模拟出多个"主 机",每个主机都有独立的IP地址、操作系统,实现不同VPS之间磁盘空间、内存、CPU资源、进程与系统 配置间的完全隔离,管理员可自由使用分配到的主机中的所有资源,所以需要有一定的维护系统的能力, 适合小型网站

云服务器(ECS):是一种整合了计算、存储、网络,能够做到弹性伸缩的计算服务,其使用起来与VPS几乎一 样,但差别是云服务器建立在一组集群服务器中,每个服务器都会保存一个主机的镜像(备份),大大的 提升了安全稳定性,另外还具备了灵活性与扩展性,用户只需按使用量付费的即可,适合大中小型网站。

独立服务器:这台服务器仅提供给您使用,详细来讲又可以区分为租用方式与托管方式

租用方式:用户只需将硬件配置要求告知IDC服务商,服务器硬件设备由机房负责维护,运维管理员一 般需要自行安装相应的软件并部署网站服务,租期可以为月、季、年,减轻了用户初期对硬件设备的 投入,适合大中型网站。

托管方式:用户需要自行购置服务器后交给IDC服务供应商的机房进行管理(缴纳管理服务费用),用户 对服务器硬件配置有完全的控制权,自主性强,但需要自行维护、修理服务器硬件设备,适合大中型 网站。

另外有必要提醒,选择主机空间供应商时请一定要注意看口碑,综合分析再决定购买,某些供应商会 有限制功能、强制添加广告、隐藏扣费或强制扣费等恶劣行为,一定一定不要上当!

1.3. 主要数据

服务器所提供的最主要数据是超文本标记语言(Hyper Text Markup Language,HTML)、多媒体文件 (图片、影像、声音、文字等,都属于多媒体或称为超媒体),HTML只是一些纯文本数据,通过所谓的标 记来规范所要显示的数据格式

1.4. 浏览器

客户端收到服务器的数据之后需要软件解析服务器所提供的数据,最后将效果呈现在用户的屏幕上。

那么著名的浏览器就有内建在Windows操作系统内的IE浏览器(淘汰)和Microsoft Edge,还有Firefox 浏览器和Google的chrome浏览器

1.5. 网址及HTTP简介

web服务器提供的这些数据大部分都是文件,那么我们需要在服务器端先将数据文件写好,并且放置在某 个特殊的目录下面,这个目录就是我们整个网站的首页,在redhat中,这个目录默认在 /var/www/html 。

浏览器是通过你在地址栏中输入你所需要的网址来取得这个目录的数据的

1.5.1. URL

Uniform Resource Locator,统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种 简洁的表示,是互联网上标准资源的地址

网址格式: ://[:port]/

协议::http、https、ftp等

主机地址或者主机名:主机地址就是服务器在因特网所在的IP地址。如果是主机名的话,那么就需要域名 解析了

端口号(port):http为80,https为443 (IANA:互联网数字分配机构)

0-1023:永久地分配给固定的应用程序使用

1024-41951:注册端口,但要求不是特别严格,分配给程序注册为某应用使用

41952-60000:客户端程序随机使用的端口,动态端口,或私有端口

1.5.2. http请求方法:

工作机制:

在http通信中,每个http请求报文都包含一个方法,用以告诉web服务器端需要执行哪些具体的动作,这 些动作包括:获取指定web页面、提交内容到服务器、删除服务器上资源文件等。

状态代码:由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值

1xx:指示信息 ------ 表示请求已接收,继续处理

2xx:成功 ------ 表示请求已被成功接收、理解

3xx:重定向 ------ 要完成请求必须进行更进一步的操作

4xx:客户端错误 ------ 请求有语法错误或请求无法实现

5xx:服务器端错误 ------ 服务器未能实现合法的请求

常见状态代码、状态描述的说明如下:

200 OK:客户端请求成功

400 Bad Request:客户端请求有语法错误,不能被服务器所理解

401 Unauthorized:请求未经授权,这个状态代码必须和 WWW-Authenticate 报头域一起使用

403 Forbidden:服务器收到请求,但是拒绝提供服务

404 Not Found:请求资源不存在,举个例子:输入了错误的URL

500 Internal Server Error:服务器发生不可预期的错误

503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常

1.5.3. HTTP协议请求的工作流程:

1.5.4. 特点

1.6. www服务器的类型

1.6.1. 静态网站

仅提供用户浏览的单向静态网页,单纯是由服务器单向提供数据给客户端,Server不需要与client端有互 动,可以浏览网站,但是无法数据上传。

1.6.2. 动态网站

该站可以让服务器与用户互动,常见的例如留言板,博客。这种类型的网站需要通过"网页程序语言"来实现 与用户互动的行为。常见的例如:PHP网页程序语言,配合数据库系统来进行数据的读、写。当你在向服 务器请求数据时,其实是通过服务器端同一个网页程序在负责将数据读出或写入数据库,变动的是数据库 的内容,网页程序并没有任何改变。

另外一种交互式的动态网页主要是在客户端实现。服务端将可执行的程序代码(JavaScript)传送给客户 端,客户端的浏览器如果提供JavaScript的功能,那么该程序就可以在客户端的计算机上面工作了;另外 一种可在客户端执行的就是flash动画格式,在这种动画格式内还可以进行程序设计

2. 使用nginx搭建web网站

2.1. nginx简介

2.1.1. 概念

2.1.2. 特点

注意:默认情况下,nginx会建立和服务器CPU核心数相等的worker进程,woker进程之间相互独立,若一 个进程故障不会影响其它进程

2.1.4. nginx关键工作机制

抢占机制:当客户端发起请求时,会激活accept_mutex互斥锁,那个worker抢占了该互斥锁,该客户端的 请求就由那个worker响应和处理

异步非阻塞模式:在传统事件处理模式下,如果所有的worker被客户端阻塞后,新来的客户就需要等待, 直到原来的客户端释放worker后才能被处理请求,在异步非阻塞模式下,底层使用了linux的epoll模型,就 算worker被阻塞,新的客户端请求也会被正常处理

2.1.5. nginx正向代理功能

分析:它的工作原理就像一个跳板,简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务 器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法 访问网站的内容,代理服务器去取回来,然后返回给我,从网站的角度,只在代理服务器来取内容的时候有一 次记录,有时候并不知道是用户的请求,也隐藏了用户的资料,这取决于代理告不告诉网站。

结论:正向代理 是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内 容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容 返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。就像要访问google用 访问(用户知道要访问真正的服务器)

2.1.6. nginx反向代理功能

分析:反向代理正好相反,它也是在客户端和服务器端的一个代理服务器,但是这个代理服务器的目的是 用来保护服务器端的,当外网客户端来访问我们的服务器时为了避免暴露应用服务器的实际ip地址,我们会 让客端访问代理服务器,然后代理服务器再根据客户端的请求去实际的应用服务器获取响应内容并返回客 户端

2.1.7. 代理的总结

2.1.8. nginx负载均衡功能

2.2. 部署Nginx

复制代码
[root@server ~]# setenforce  0           
[root@server ~]# systemctl stop  firewalld
[root@server ~]# systemctl disable  firewalld
[root@server ~]# yum  install  nginx  -y
[root@server ~]# nginx  -V  # 查看版本,编译器、配置参数等信息
[root@server ~]# systemctl start  nginx   # 启动httpd
[root@server ~]# systemctl enable  nginx  # 设置开机启动
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → 
/usr/lib/systemd/system/nginx.service.
[root@server ~]# systemctl status  nginx    
1690       
/usr/sbin/nginx
nginx       
nginx       
# 查看状态,q键退出查看
[root@server ~]# ps  -ef  |  grep  nginx  # 查看进程
root        
1  0 13:57 ?        
1691    
1692    
1690  0 13:57 ?        
1690  0 13:57 ?        
00:00:00 nginx: master process 
00:00:00 nginx: worker process
00:00:00 nginx: worker process
22
23
24
root        
1726    
1510  0 14:00 pts/0    
# 测试,Windows中打开浏览器输入服务器IP地址
00:00:00 grep --color=auto nginx

2.3. 常用命令

2.3.1. systemctl系列

复制代码
systemctl  start  nginx   # 启动服务
systemcctl restart  nginx  # 重启服务
systemctl  enable  nginx   # 开机启动
systemctl  stop  nginx     # 停止服务
systemctl  disable  nginx  # 取消开机启动
systemctl  status   nginx  # 查看状态

2.3.2. nginx自带命令

复制代码
nginx    # 启动nginx
nginx   restart  # 重启服务
nginx  -s  reload  # 重新加载配置文件
nginx  -s  stop    # 强行停止服务
nginx  -v  # 查看版本号       
nginx  -s  quit    # 优雅停止服务,即所有请求处理完后退出服务
nginx -t         # 检查配置文件的语法错误,无错返回ok

2.4. nginx配置文件

复制代码
[root@server ~]# cd  /etc/nginx     
# 服务目录
[root@server nginx]# yum  install  tree  -y
[root@server nginx]# tree
.
├── conf.d                 
├── default.d           
├── fastcgi.conf
├── fastcgi.conf.default
├── fastcgi_params
├── fastcgi_params.default
├── koi-utf               
├── koi-win               
├── mime.types             
├── mime.types.default     
├── nginx.conf             
├── nginx.conf.default     
├── scgi_params            
├── scgi_params.default
├── uwsgi_params
├── uwsgi_params.default
└── win-utf                
2 directories, 15 files
网页默认目录:/usr/share/nginx/html
访问日志:/var/log/nginx/access.log
错误日志:/var/log/nginx/error.log

2.5. 主配置文件

复制代码
[root@server ~]# vim  /etc/nginx/nginx.conf

2.5.1. 结构

2.5.2. 分析

2.5.3. 注意

server_name指令一般用于指定虚拟主机的域名,在匹配时有以下四中写法

精确匹配:server_name http://www.nginx.com ;

左侧匹配:server_name *. http://nginx.com ;

右侧匹配:server_name www.nginx.* ;

正则匹配:server_name ~^www.nginx.*$ ;

注:匹配优先级:精确匹配 > 左侧通配符匹配 > 右侧通配符匹配 > 正则表达式匹配

root指令与alias指令区别

root指令用于静态资源目录位置,它可以写在 http 、 server 、 location 等配置中,root指令定义的 路径会与 URI 叠加产生最终访问路径,如:

复制代码
location /image {
root /opt/nginx/static;
}
# 当用户访问 www.test.com/image/1.png 时,实际在服务器找的路径是 
/opt/nginx/static/image/1.png

alias也是指定静态资源目录位置,但只能访问指定的绝对路径,不会叠加目录,只能写在 location 中 且末尾一定要添加 / , 如:

复制代码
location /image {
alias /opt/nginx/static/image/;
}
#当用户访问 www.test.com/image/1.png 时,实际在服务器找的路径是 
/opt/nginx/static/image/1.png

location匹配路径

格式:

复制代码
location   [ = | ~ | ~* | ^~ ] uri {
...
}

匹配规则:

= 精确匹配;

~ 正则匹配,区分大小写;

~* 正则匹配,不区分大小写;

^~ 匹配以某个字符串开头,不是正则匹配;

/ 通用匹配,如果没有其它匹配,任何请求都会匹配到

注:匹配优先级:= > ^~ > ~ > ~* > 不带任何字符。

2.5.4. nginx.conf 配置文件的语法规则

配置文件由指令与指令块构成

每条指令以 ";" 分号结尾,指令与参数间以空格符号分隔

指令块以 {} 大括号将多条指令组织在一起

include 语句允许组合多个配置文件以提升可维护性

通过 # 符号添加注释,提高可读性

通过 $ 符号使用变量

部分指令的参数支持正则表达式,例如常用的 location 指令

3.4. 基于域名的虚拟主机

3.4.1. 原理

当服务器无法给每个网站都分配一个独立的IP地址时,可以通过用户请求的域名不同实现传输不同的网页 数据

3.4.2. 域名解析:

功能:域名 IP地址

浏览器如何通过域名去查询URL对应的IP(对应服务器地址):

浏览器缓存:浏览器会按照一定的频率缓存DNS记录

操作系统缓存:如果浏览器缓存中找不到需要的DNS记录,那就去操作系统中的hosts文件找。 hosts是一个没有扩展名的系统文件,其作用就是将一些常用的网址域名与其对应的IP地址建立一个 关联"数据库",当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找 对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交DNS域 名解析服务器进行IP地址的解析。

windows下的hosts文件路径:C:\Windows\System32\drivers\etc\hosts

Linux下的hosts文件路径:/etc/hosts

路由缓存:路由器也有DNS缓存。

ISP的DNS服务器:ISP是互联网服务提供商(Internet Service Provider)的简称,ISP有专门的DNS 服务器应对DNS查询请求

根服务器:ISP的DNS服务器还找不到的话,它就会向根服务器发出请求,进行查询(DNS服务器先 问根域名服务器.com域名服务器的IP地址,然后再问.com域名服务器,依次类推)

相关推荐
ALM专业人士1 小时前
【ALM】Polarion Project Templating and Updating功能升级,多项目批量更新一键搞定!
运维·汽车
jimy11 小时前
Oracle的always free oci实例,standard em2.1.micro,保活脚本
服务器·oracle
LinuxGeek10241 小时前
Linux 内核 “Copy Fail” 漏洞(CVE-2026-31431)修复方案
linux·运维·服务器
minji...1 小时前
Linux 网络基础(三)HTTP的请求方法(GET/POST),HTTP表单、临时和永久重定向状态码、Cookie、查询参数、Web根目录
linux·运维·服务器·网络·c++·http
小茬粥1 小时前
COLT_CMDB_nvidia_gpu_20260508.sh
linux·服务器·windows
fuquxiaoguang1 小时前
从监控面板到自主修复:AI智能体正在重新定义中间件运维
运维·人工智能·中间件·opsai
流浪0011 小时前
Linux基础篇(二)轻松掌握入门级指令
linux·运维·服务器
瀚高PG实验室1 小时前
postgresql因在从库备份时间长而失败
运维·数据库·postgresql·瀚高数据库
遇见火星1 小时前
Nginx 缓存配置:动静分离,快如闪电
运维·nginx·缓存