web基础及http协议、

news2024/11/28 16:01:48

⼀、web基本概念和常识

  1. Web:为⽤户提供的⼀种在互联⽹上浏览信息的服务,Web 服 务是动态的、可交 互的、跨平台的和图形化的。
  2. Web 服务为⽤户提供各种互联⽹服务,这些服务包括信息浏览 服务,以及各种交互式服务,包括聊天、购物、学习等等内容。

3、Web 应⽤开发也经过了⼏代技术的不断发展,⽬前 Web 开发依 然是最重要的开发内容之⼀。Web 基础的技术包括超⽂本标记 语⾔(HTML)和 HTTP 协议,HTML 是⼀种呈现数据的⽅式 (给⼈看的),⽽ HTTP 则是⼀组通信的标准(语法、语义、 时许),可以简单的理解为 HTTP 携带 HTML。

4、web 应⽤:⽹站(⼴义上的PC,⼿机app)

浏览器(Browser):也称⽤户代理,web客户端,主要有IE、Edge、Chrome、

Firefox、腾讯浏览器,360浏览器等。

5、web服务器(web server):也称HTTP服务器(HTTPserver),主要有 Nginx、Apache、Tomcat 等。

二、网站基础

1、域名

域名是⼀个IP地址的“⾯具” ,⽬的是便于记忆和访问⼀个或⼀组服务器的地

址(⽹站,电⼦邮件,FTP 等)。

2、域名解析

本地HOSTS解析、DNS服务器解析Apache服务

3、⽹站的基本概念

⽹站、⽹⻚、主⻚;

HTTP、URL、HTML、超链接

4、web ⽹站

web1.0(以编辑为特征)  web2.0(侧重⽤户交互)

5、动态⻚⾯与静态⻚⾯的差别

(1)URL不同

静态⻚⾯链接⾥没有“?”  动态⻚⾯链接⾥包含“?”

(2)后缀不同 (开发语⾔不同)

静态⻚⾯⼀般以 .html .htm .xml 为后缀  动态⻚⾯⼀般以 .php .jsp .py等为缀

(3)内容不同

静态⻚⾯的内容是固定的;动态⻚⾯的内容会因⽤户、浏览器、时间、地点等⽽

发⽣变化。

6、域名格式

http://(协议头)www.bing.com(域名)/(URI资源:路径/⽂件名)

示例:https://www.bilibili.com/v/game/?spm_id_from=333.85

1.b_7072696d6172794368616e6e656c4d656e75.21

三、HTTP 协议

HTTP协议是超⽂本传输协议的缩写,英⽂是Hyper TextTransfer Protocol。它是从

WEB服务器传输超⽂本标记语⾔(HTML) 到本地浏览器的传送协议。

1、HTTP 原理

HTTP是⼀个基于TCP/IP通信协议来传递数据的协议,传输的数据类型为HTML

⽂件,图⽚⽂件,查询结果等。HTTP协议⼀般⽤于B/S架构。浏览器作为HTTP

客户端通过URL向HTTP服务端即web服务器发送所有请求,web服务器收到客

户端请求后进⾏响应。

2、HTTP 特点

1) http协议⽀持客户端/服务端模式,也是⼀种请求/响应模式的协议。

2)简单快速:客户向服务器请求服务时,只需传送请求⽅法和路径。请求⽅法常

⽤的有GET、HEAD、POST。

3)灵活:HTTP 允许传输任意类型的数据对象。传输的类型由Content-Type 加以

标记。除开可以响应字符串之外,还可以上传和下载⼆进制⽂件。

4)⽆连接:限制每次连接只处理⼀个请求。服务器处理完请求,并收到客户的应

答后,即断开连接,但是却不利于客户端与服务器保持会话连接,为了弥补这不

⾜,产⽣了两项记录 http 状态的技术,⼀个叫做 Cookie,⼀个叫做 Session。

5)⽆状态:⽆状态是指协议对于事务处理没有记忆,后续处理需要前⾯的信息,

则必须重传。

3、URI 和 URL 的区别

(1)HTTP使⽤统⼀资源标识符(Uniform Resource Identifiers,

URI)来传输数据和建⽴连接。

URI:Uniform Resource Identifier 统⼀资源标识符

URL:Uniform Resource Location 统⼀资源定位符

(2)URI 是⽤来标识⼀个具体的资源的,我们可以通过 URI 知道⼀个资源是什

么,使⽤它就能够唯⼀地标记互联⽹上资源。

(3)URL 则是⽤来定位具体的资源的,标识了⼀个具体的资源位置。互联⽹上

的每个⽂件都有⼀个唯⼀的。

(4)URL,也就是我们俗称的⽹址,它实际上是 URI 的⼀个⼦集。

(5)URI 不仅包括 URL,还包括 URN(统⼀资源名称)

4、HTTP 报⽂组成

(1)客户端发出请求:

GET /index.php HTTP/1.5/ Host:zgod.cn

(2)客户端浏览器发送出来的请求格式:

GET:这个部分只声明了请求⽅式,除了get ⽅式可能还有 post

等⽅式。GET 表示请求,POST 表示邮寄。

/index.php:这⾥是⼀个URL,表示了我们要访问的资源是哪

个。

HTTP/1.5/:这⾥表示的是客户端浏览器使⽤的协议版本是1.5。

Host:zgod.cn:这是请求是交给主机zgod.cn的。

(3)服务器反馈的响应:

(4)服务器反馈的响应报⽂的具体含义:

HTTP/1.5:部分表示服务器回馈的对应http版本 (刚才客户端的

请求⾥⾯带有版本号,对⽅使⽤的1.5,服务器回馈的也是1.5)

200 ok:这⾥表示的是处理结果的状态码和状态的简单描述(ok)

Date:Mon,5 sep 2022 08:49:45 GMT:响应的具体时间

Content-Length:254:响应内容的⻓度

Content-Type:text/html:响应内容的类型

响应报⽂中打了⼀个空⾏(换⾏),当看到响应报⽂中有换⾏时,

它的下⾯开始就是客户机要访问的具体资源了。

5、HTTP 状态码

2xx:成功,200成功、201已经创建

3xx:重定向,304未修改

4xx:请求错误,404未找到⽂件、408请求超时

5xx:服务器错,500服务器内部错误、502⽹关错误

  • 基础知识:

1、概述:最早的 web 服务程序,基于 http 协议提供⽹⻚浏览服务。

2、特点:模块化设置、开放源代码、跨平台应⽤、支持多种 web 编程语言、

运行稳定。

3、工作模式

(1)Prefork:使⽤进程处理请求,在该模式中⽐较消耗内存,但稳

定性⾼,如某个进程出现问题,不会影响其他请求。

(2)Worker:属于多进程模式,每个进程生成多个进程;在该模式下

消耗的资源比较⼩,适合高并发请求,但稳定性没有 Prefork 模式稳

定。

(3)Event:该模式与 Worker 模式较为相似,不同之处在于在该模

式下可以解决keepalive ⻓连接时占⽤线程资源导致浪费的问题。

(4)keep-alive ⻓连接:TCP连接在发送后将仍然保持打开状态,

于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为

每个请求建⽴新连接所需的时间,还节约了带宽。实现长连接要客户端和服务端、

都支持长连接。

4、静态资源——根据开发者保存在项目资源目录中的路径访问静态资源文件

静态文件如果无法在浏览器上访问,就一定无法加载在页面上

[root@web ~]# cd /opt/

[root@web opt]# ls

问题.png

[root@web opt]# cp -r 问题.png /var/www/html/

[root@web opt]# cd /var/www/html/

[root@web html]# ls

index.html  问题.png

[root@web html]# ls -lh

总用量 52K

-rw-r--r--. 1 root root  26 7月  29 09:40 index.html

-rw-r--r--. 1 root root 48K 7月  29 10:04 问题.png

[root@web html]# tree

.

├── index.html

└── \351\227\256\351\242\230.png

[root@web ~]# cd /var/www/html

[root@web html]# ls

[root@web html]# echo "我是静态的html文件" > index.html

[root@web html]# systemctl restart httpd

[root@web html]#systemctl stop firewalld

浏览器测试:

⼆、搭建apache服务器

常用命令

 # 查看华为云主机的所有打开的端口

[root@web html]# firewall-cmd --list-ports

#查看防⽕墙是否启⽤,若启⽤则设置apache服务可通⾏规则

[root@web html]# systemctl status firewalld.service

# 可以停用防火墙,也可以指定端口打开

[root@web ~]#firewall-cdm --zone=public --add-port=80/tcp --permanent

[root@web ~]#firewall-cdm --zone=public --add-service=httpd --permanent

# 查看防火墙的打开端口

[root@web html]# firewall-cmd --list-all

# 防⽕墙开放http服务

[root@web ~]#filewall-cmd -addservice=http

# 查看防⽕墙的所有规则,发现ssh服务和http的服务都打开了

[root@web ~]#filewall-cmd --list-all

# 重载防火墙规则,重载之后前⾯的设置才会生效

[root@web ~]#firewall-cmd --reload

具体搭建过程

1、安装:

[root@lq ~]#yum -y install httpd    # httpd服务和nginx服务都是使⽤80端⼝

2、查看安装的资源文件

[root@lq ~]# rpm -ql httpd

[root@lq ~]# ls /etc/httpd

conf  conf.d  conf.modules.d  logs  modules  run

3、修改配置文件

#  yum 安装的 apache,配置⽂件在 /etc/httpd/conf/httpd.conf

#  如果是编译安装的 apache,那么配置⽂件在⾃⼰编译安装的安装⽬录下

[root@lq ~]# vim /etc/httpd/conf/httpd.conf   # 修改虚拟主机或端口号

45 Listen 80 #默认的httpd监听端⼝,可在下⾯添加其他自设端⼝

98 ServerName www.example.com:80 #指定httpd服务域名和该域名的端⼝,可以

⼿动修改其他域名

/Listen    # 80附近的端⼝不要随便修改,使⽤1023之后的端⼝

[root@lq ~]# ls /var/www/html/  # 重装的目录下没内容

4、启动服务

[root@lq ~]# systemctl start httpd.service  # 如果有其他占⽤80端⼝的应⽤需要

停⽤

5、查看云主机上所有打开的端口

[root@lq ~]# ss -antlp|grep http  # 查看端⼝使⽤情况,确认开启端⼝的是http

服务以及端⼝号是多少

LISTEN     0      128         :::80                      :::*                   

users:(("httpd",pid=1667,fd=4),("httpd",pid=1666,fd=4),("httpd",pid=1665,fd=4),("ht

tpd",pid=1664,fd=4),("httpd",pid=1663,fd=4),("httpd",pid=1662,fd=4))

6、不能直接停用防火墙,可以单独打开某些端口或服务

[root@lq ~]# firewall-cmd --zone=public --add-port=80/tcp --permanent

[root@lq ~]# firewall-cmd --zone=public --add-service=http --permanent  #设置防

⽕墙放⾏apache

7、打开服务不会马上生效,需要重启服务

[root@lq ~]# firewall-cmd --reload

[root@lq ~]# sed -n '/^Listen/s/80/8081' /etc/httpd/conf/httpd.conf

[root@lq ~]# sed -n '/^Listen/p' /etc/httpd/conf/httpd.conf

Listen 80

[root@lq ~]# sed -i '/^Listen/s/80/8081/' /etc/httpd/conf/httpd.conf   #修改端口

[root@lq ~]# ls -a /var/www/html/

[root@lq ~]# touch /var/www/html/index.html

8、apache 索引⽂件:当在资源目录中添加index.html之后,http服务会自动找

到index文件。在⼀般的前段服务器中http nginx tomcat,在没有指定文件路径

的时候,默认先访问资源文件夹中的index.xxx。

./html/index.html

1)httpd 使⽤ yum 安装时,默认的站html文件在/var/www/html/index.html,如

果 index.html ⽂件不存在,需要手动创建

2)在网站方面,index通常是指主⽬录的意思,index.html是目录下默认打开的⻚

⾯。⽐如,网站的域名是www.abc.com,如果设置了 index.html 是默认主⻚,

那么打开 http://www.abc.com 和打开页面 http://www.abc.com/index.html 就

是⼀样的。他们打开的都是网站首页,因为index.html是网站默认的主页。

3)在 index.html 写⼊如下内容,可以让主页显示一个圆形,圆⼼处显示文字“这

就是主页”。

测试1:

[root@lq ~]# vim /var/www/html/index.html

<!doctype html>

<html>

        <head>

                <meta charset="utf-8">

                <title>正方形</title>

                <style>

                        div{

                                background-color:red;

                                width:120px;

                                height:120px;

                        }

                </style>

        </head>

        <body>

                <div>正方形</div>

                <img src="img/问题.png" />

        </body>

</html>

[root@lq ~]# mkdir /var/www/html/img/

[root@lq ~]# cp /opt/问题.png /var/www/html/img/

[root@lq ~]# ls /var/www/html/

img  index.html

浏览器访问:

测试2:

[root@server2 ~]# vim /var/www/html/index.html

<!DOCTYPE html>

<html>

 <head>

 <meta charset="utf-8">

 <title>ssjie's page</title>

 <style type="text/css">

 .bigMom{

 margin:0 auto;

 width:600px;

#圆的半径宽度

 height:600px;

#圆的半径⾼度

 line-height:600px;

#⾏间距

 text-align:center;

#⽂字位置:居中

 color:black;

#文字颜色:黑色

 border-radius:50%;

#圆角率,50%是圆

 backgroundcolor:cyan; #圆的颜色:青色

 }

 </style>

 </head>

浏览器内输⼊搭建好的 httpd 服务器 IP 地址或域名(当前服务器地址为

192.168.2.28)

 <body>

 <div class="bigMom">

 欢迎来到主⻚!

 </div>

 </body>

</html>

9、IP不同,域名相同的虚拟主机:

(1)修改主配置

设置 IP 相同,域名不同的虚拟主机,配置⽂件在

/etc/httpd/conf/httpd.conf

.htaccess ⽂件:可以实现,⽂件夹密码保护、⽤户自动重定向、错误⻚⾯、改

变你的⽂件扩展名、封禁特定IP地址的⽤户、只允许特定IP地址的⽤户、禁止

目录列表,以及使⽤其他文件作为index⽂件等⼀些功能。

[root@server2 ~]# vim /etc/httpd/conf/httpd.conf

45 Listen 80

46

47 ServerName www.yh666.com:80 #添加

如下内容,域名⾃起,IP地址为⾃⼰的主机

48

49 NameVirtualHost 192.168.33.110

50 <VirtualHost 192.168.33.110>

51 DocumentRoot /var/www/html/yang #标明

索引⽂件路径,所以还需⾃⼰在该路径创建新的索引⽂件

52 ServerName www.yh666.com #域名

⾃起

53 <directory /var/www/html/yang>

(2)创建索引⽂件

索引⽂件:index.html,⼀般为⽹站的⾸⻚。

54 allowoverride None #确定

是否被允许读取.htaccess⽂件内容

55 require all granted #允许

所有⽤户访问指定的(/var/www/html)⽂档或⽬录

56 </directory>

57 </virtualhost>

58

59 <virtualhost 192.168.33.110>

60 documentroot /var/www/html/hong #同上

61 servername www.hong777.com

62 <directory /var/www/html/hong>

63 allowoverride none

64 require all granted

65 </directory>

66 </virtualhost>

[root@server2 html]# systemctl reload httpd.service

#重载服务

[root@server2 ~]# cd /var/www/html/ #移动

到索引⽂件所在位置

[root@server2 html]# ls #当前

⽬录下有个索引⽂件模板

(3)修改本地 hosts

1)本地 hosts:将⼀些常⽤的网址域名与其对应的IP地址建⽴⼀个关联“数据库”,

当⽤户在浏览器中输⼊⼀个需要登录的网址时,系统会首先自动从Hosts文件中

寻找对应的IP地址,⼀旦找到,系统会立即打开对应网页,如果没有找到,则

系统会再将网址提交DNS域名解析服务器进行IP地址的解析。

2)如果该文件需要权限,那么右键该文件,进⼊“属性”,点击“安全”选项卡,找

到自己电脑的主用户,点编辑,然后再根据图示给予用户权限。

3)以记事本或 notepad ⽅式打开本地 hosts ⽂件,最下⾏输⼊IP和域名,记得

要与 httpd 的配置⽂件内的对应。

4)域名访问测试:

Ⅰ.浏览器输⼊配置好的域名www.yh666.com

Ⅱ. 浏览器输⼊ www.hong777.com

10、IP 相同,端⼝不同的虚拟主机

(1)修改主配置:编辑 /etc/httpd/conf/httpd.conf 配置文件

[root@server2 ~]# vim /etc/httpd/conf/httpd.conf

45 Listen 80

46 Listen 88 #添加⼀个88端⼝

60 <virtualhost 192.168.33.110:88> #修改

hong777.com的虚拟主机端⼝为88,其余内容不变

使用源码编译安装nginx服务

⼀、Nginx

1、Nginx 简介

1)Nginx(engine X):开源、轻量级、⾼性能的 HTTP 和反向代理服务器,可以

代理 HTTP、IMAP/POP3/SMTP 和 TCP/UDP协议。

2)基本特点:占⽤内存少、并发能⼒强,采⽤ C 语⾔编写,在性能⽅⾯有⼀定

保证。

3)Nginx 可以⽤来做负载均衡及反向代理使⽤,⽬前使⽤最多的是负载均衡。

4)与 Nginx 同类的 Web 服务有 Apache、Tomcat等。

5)官方网站:nginx news

2、Nginx 服务器特点

(1)模块化设计

Nginx 将模块分为核⼼模块、HTTP 模块、事件模块和邮件模块

四类。每个模块都有特定的职责,从⽽实现了整个 Web 服务器

的功能。

(2)低内存消耗,高并发

Nginx 使⽤ epoll and kqueue 作为开发⼯具,能够⽀持最⼤50000 个并发连接数

的响应;不论是系统资源开销还是 CPU使⽤效率都很优秀。

(3)事件驱动

nginx 采⽤异步⽅式处理请求。

同步:指在发送⽅发出消息后,需要等待接收到接收⽅发回的响应,或者通过回

调函数来接收到对⽅响应信息。

异步:指在发送⽅发出请求后,接收⽅不需要返回消息或者不等待返回消息,直

接提供响应请求机制。

(4)⾼可靠性,master 与 worker 架构

⼀个主进程和多个⼯作进程。⼯作进程是单线程的,且不需要特

殊授权即可运⾏;

master进程:主要⽤来监控worker进程⼯作状态进⾏相应重

启、停⽌等操作。

worker进程:进⾏具体提供服务,接受请求和处理请求。

(5)⽀持热更新配置、⽇志⽂件滚动、平滑升级

/usr/local/nginx/sbin/nginx -s reload

html⽬录中的⽂件发上修改之后,不需要nginx服务。

可向 master 发送 USR1、QUIT 等信号,⽆需强制停⽌服务即可完成热更新。

向 master 发送的 USR1,可实现⽇志⽂件滚动。

向 master 发送的 USR2,可实现平滑升级。

(6)丰富的扩展模块

可在编译安装 nginx 时指定拓展模块,例如:nginx-stickymodule 模块(基于

cookie 来进⾏负载转发)。

3、Nginx 和 Apache 区别

(1)架构

Apache 采⽤多进程架构,每个请求都由⼀个独⽴的进程处理;⽽Nginx采⽤异步

事件驱动的架构,可以处理更多的并发连接。

(2)性能

由于Nginx的架构设计,它可以处理更多的并发连接,⽽且在⾼负载情况下表现

更加稳定和可靠。因此,Nginx通常被认为是比Apache更⾼效的Web服务器。

(3)配置

Apache 的配置⽂件⽐较复杂,需要⼀定的学习和经验才能正确配置;⽽ Nginx

的配置⽂件⽐较简洁和可读性强,更容易理解和配置。

(4)功能

ngin x有许多模块可以扩展其功能,例如 mod_rewrite ⽤于URL 重写,mod_ssl

⽤于 SSL 加密等;⽽apach 的功能⽐较简单,但是可以通过第三⽅模块扩展其

功能。

4、Nginx 基本功能

(1)静态资源 Web 服务器

nginx 可实现动静资源分离

动态资源:需要程序处理或者从数据库中读数据,能根据不同的条件在⻚⾯显示

不同的数据。

静态资源:前端的固定⻚⾯,这⾥⾯包含HTML、CSS、JS、图⽚、⾳乐等等,不

需要查数据库也不需要程序处理,直接就能够显示的⻚⾯。

动静分离:当使⽤ nginx 处理静态⻚⾯时,可将⽤户的动态请求转发给后端的

tomcat 或 PHP 处理动态⻚⾯。

前后端:前端就是完全的静态资源,

(2)基于域名/IP/端⼝的虚拟主机

虚拟主机:在Web服务⾥就是⼀个独⽴的⽹站站点,这个站点对应独⽴的域名(也

可能是IP或端⼝),具有独⽴的程序及资源⽬录,可以独⽴地对外提供服务供⽤

户访问。

⼀个 nginx 主进程,指定⼀个配置⽂件,配置⽂件内有多个虚拟主机。如果不

⽤虚拟机,⼀个域名就要对应⼀个服务器,浪费资源。

Ⅰ.基于域名的虚拟主机

以不同的多个域名区分不同的虚拟主机(IP 相同),放在⼀个nginx服务上,能

够让⽤户有序访问⽣产⽤途,例如:www.jd.com 和diannao.jd.comchannel.jd.com。

Ⅱ.基于端⼝的虚拟主机

以不同的端⼝,来区分多个虚拟主机,也是放在⼀个nginx服务上,能够让⽤户

有序访问,例如:192.168.33.110:8080、www.baidu.com:8080。

Ⅲ.基于 IP 的虚拟主机

以不同 IP 区分不同的虚拟主机。

(3)HTTP/HTTPS、SMTP、POP3 和 TCP/UDP 反向代理

客户端代理,增强客户端的作⽤;反向代理是保护服务器;反向代理是⼀种代理

服务器的配置模式,它代表服务器向客户端提供服务。客户端发送请求到反向代

理服务器,然后代理服务器将请求转发到后端的真实服务器上,并将响应返回给

客户端。简单理解为⽤户直接访问反向代理服务器就可以获得⽬标服务器

的资源。

(4)负载均衡

所谓负载均衡,就是 Nginx 把请求均匀的分摊给上游的应⽤服务器,这样即使

某⼀个服务器宕机也不会影响请求的处理,或者当应⽤服务器扛不住了,可以随

时进⾏扩容。

(5)⻚⾯缓存

Nginx 不仅仅是⼀个 Web 服务器,它还可以作为⼀个缓存服务器使⽤。

通过 Nginx 缓存,可以对⼀些静态资源或者数据更新频率较低的后端服务做缓

存,降低静态资源或后端服务的响应时间,同时也会降低后端的负载。⽐如对⼀

些图⽚,css或js做⼀些缓存,那么在每次刷新浏览器的时候,就不会重新请求

了,⽽是从缓存⾥⾯读取。这样就可以减轻服务器的压⼒。

(6)⽀持代理 FastCGI、uWSGI 等应⽤服务器

1)CGI:描述了服务器(nginx,apache)和请求处理程序(django,flask,springboot web

框架)之间传输数据的⼀种标准。定义了客户端与服务器之间如何传输数据。

2)FastCGI:快速通⽤⽹关接⼝(Fast Common GatewayInterface/FastCGI)是⼀种

让交互程序与Web服务器通信的协议。FastCGI是早期通⽤⽹关接⼝(CGI)的

增强版本。

3)WSGI:为Python定义的 web 服务器和 web 框架之间的接⼝标准。

4)uwsgi:uWSGI 服务器实现的独有的协议,定义传输信息的类型,是⽤于前端

服务器与 uwsgi 的通信规范(uWSGI 服务器自由的⼀个协议)。

5)uWSGI:⼀个Web Server(web服务器),即⼀个实现了WSGI协议的服务器,

处理发来的请求及返回响应。

6)web 服务器:

客户端(浏览器,app)跟服务器(web框架)之间的东⻄,服务器中间件

# nginx apache 是⼀类东⻄,就是做请求转

发,符合fastcgi服务器

# uWSGI,gunicorn 只针对于python的web框架

# tomcat,jboss,weblogic 只针对java的web框架

# php-fpm 针对于php的框架

(7)⽀持 gzip、expires

当运维⼈员将要锁包放到html中,会⾃动部署nginx ⽀持资源压缩和缓存控制。

(8)URL Rewrite

192.168.1.3/abc

192.168.1.3/a/b/c/

Rewrite 主要实现url地址重写,以及重定向,就是把传⼊web的请求重定向到

其他 url的过程。

(9)路径别名:资源路径的别名(root 和 alias)。

(10)基于 IP、⽤户的访问控制 nginx 可对指定 IP ⽹段或某个特定 IP 做访

问控制(allow:允 许;deny:拒绝)。

支持访问速率、并发限制。

5、Nginx 架构

(1)主进程(master process)

主要与外界通信和⼯作进程管理。

读取 nginx 配置⽂件并验证有效性。

建⽴、绑定和关闭 socket(套接字,IP地址:端⼝号)。

按照配置⽂件⽣成、管理和结束⼯作进程。

nginx 重启、停⽌、重载配置⽂件、平滑升级、管理⽇志⽂件

等。

(2)工作进程(worker process)

接受客户端请求,将请求交给各个功能模块处理。

接收主进程的指令并执⾏。

与后端服务器通信,接收后端服务器处理的结果,发送结果给客户端。

数据缓存管理。

访问缓存索引、重建、查询和调⽤缓存数据。cache 模块,主要由缓存索引重建

和缓存索引管理两个进程完成,缓存索引重建进程是在进程 nginx 服务启动⼀

段时间之后,由主进程⽣成,对本地磁盘的索引⽂件在内存中建⽴元数据库,包

括扫描、过期更新等操作,完成后退出。

系统 IO 调⽤,获取响应数据,发送响应给客户端。

⼆、Nginx ⽀持⾼并发的原因

  1. 事件驱动模型:Nginx采⽤了异步事件驱动模型,它使⽤⼀个单独的⼯作进

程来处理多个连接,每个连接都是异步的,不会阻塞其他连接。这种模型使得

Nginx能够处理⼤量并发连接,⽽不会消耗过多的系统资源。

2、 ⾼效的内存管理

Nginx使⽤内存池来管理内存分配,避免了频繁的内存分配和释放操作,从⽽提

⾼了效率。此外,Nginx还采⽤了零拷⻉技术,减少了数据在内存和磁盘之间的

复制次数,进⼀步提⾼了性能。

3、 负载均衡

Nginx可以作为反向代理,将请求分发给多个后端服务器,从⽽实现负载均衡。

这样⼀来,每个后端服务器只需要处理部分请求,整个系统的负载得到了均衡,

提⾼了系统的并发能⼒。

4、⾼度可定制化

Nginx⽀持动态模块加载,⽤户可以根据⾃⼰的需求选择需要的模块进⾏编译和

加载,从⽽提⾼了灵活性和可扩展性。

niginx企业实战

1、修改配置

1)进⼊ nginx 主配置⽂件(yum 和编译安装的⽂件路径不⼀样)。

2)找到“server { }”,添加⼀个“location { }”,也就是虚拟主机。

[root@web ~]# vim /usr/local/nginx/conf/nginx.conf

......省略部分内容......

 server {

 listen 80; #监听端⼝

 server_name localhost; #服务器名称

 charset utf-8; #字符集,utf-8为中⽂字符集

#access_log logs/host.access.log main;

 location /status { #nginx状态的监听模块

 stub_status on;

 access_log off;

 }

 }

......省略部分内容......

:wq #保存并退出

[root@web ~]# systemctl restart nginx.service   #重启nginx

2、访问测试

浏览器访问 192.168.33.110/status,查看 nginx 状态信息。

3、nginx 虚拟主机配置

⼀个“location”相当于⼀个虚拟主机,也就是⽤户访问⽹站时,点击跳转的另

⼀个⻚⾯。location 内可以添加 nginx 各种功能模块。

[root@web ~]#vim /usr/local/nginx/conf/nginx.conf

......省略部分内容......

 server {

 listen 80; #监听端⼝

 server_name localhost;

 charset utf-8;

#access_log logs/host.access.log main;

 location /status {

 stub_status on;

 access_log off;

 }

 location / {

 root html; #⽹站在服务器上的⽬

录,默认为/usr/local/nginx/html

 index index.html index.htm; #跳转到

的⽹站⾸⻚

}

 }

......省略部分内容......

[root@web ~]# systemctl restart nginx.service   #重启nginx

  1. nginx 反向代理配置

反向代理:⽤户直接访问反向代理服务器就可以获得⽬标服务器(后端服务器)

的资源。

1)修改配置:在配置⽂件中添加⼀⾏反向代理块指令(proxy_pass),表示

当访问本机地址 192.168.33.110 的 80 端⼝时即可跳转到后端

服务器 192.168.33.11 的 80 端⼝上。

[root@web ~]# vim /usr/local/nginx/conf/nginx.conf

......省略部分内容......

 server {

 listen 80;

 server_name localhost;

 charset utf-8;

#access_log logs/host.access.log main;

 location /status {

 stub_status on;

 access_log off;

 }

 location / {

 root html;

 index index.html index.htm;

 proxy_pass http://192.168.33.11:80;

#添加⼀个反向代理模块

 }

......省略部分内容......

[root@web ~]# systemctl reload nginx.service   #重载nginx配置

2)建⽴后端服务器

使⽤另⼀台虚拟机,安装 nginx ,然后进⼊/usr/share/nginx/html/ ⽬录,修改

其中的 index.html ⽂件,随便写⼊⼀条内容进⾏测试。

[root@web ~]# vim /usr/share/nginx/html/index.html

这里是192.168.33.11

3)访问测试

浏览器输⼊本机地址 192.168.33.110,将会⾃动跳转到后端服务器

192.168.33.11 上。

5、nginx 访客 IP ⿊名单

1)修改配置

作为运维⼈员,我们可以选择允许哪些⽤户 IP 来访问我们的服务器,也可以选

择允许哪个⽹段的⽤户。

allow:允许

deny:拒绝

在 nginx 配置⽂件的 server 模块内可以添加下⾯的内容。

当访问被拒绝时,会显示 403 错误⻚⾯。

[root@web ~]# vim /usr/local/nginx/conf/nginx.conf

......省略部分内容......

 server {

 listen 80;

 server_name localhost;

 charset utf-8;

 allow 192.168.33.22; #允许192.168.33.22

⽤户访问

 deny 192.168.33.0/24; #拒绝33.0⽹段的⽤户访

 deny all; #拒绝所有

......省略部分内容.....

[root@web ~]#vim /usr/local/nginx/conf/nginx.conf

......省略部分内容......

 server {

 listen 80;

 server_name localhost;

 charset utf-8;

 allow 192.168.33.22; #允许192.168.33.22

⽤户访问

 deny 192.168.33.0/24; #拒绝33.0⽹段的⽤户访

 deny all; #拒绝所有

......省略部分内容......

2)访问测试

因为当前服务器拒绝了 33.0 ⽹段的⽤户访问,⽽本机浏览器

正是通过 33.1 ⽹关与服务器建⽴连接,所以浏览器被拒绝访问了,

显示 403 错误信息。

使⽤也是 192.168.33.0 ⽹段的 33.11 的 YH1 主机访问服务器

进⾏测试。

[root@web ~]# curl 192.168.33.110 #访问33.110服务器进⾏测试

<html>

<head><title>403 Forbidden</title></head> #可以看

到403错误,说明访问同样被拒

<body>

<center><h1>403 Forbidden</h1></center>

<hr><center>nginx/1.24.0</center>

</body>

</html>

使⽤之前允许的 192.168.33.22 的 YH2 主机进⾏访问服务器测试

[root@web ~]# ip a #查看当前主机的IP

2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu

1500 qdisc fq_codel state UP group default qlen

1000

 link/ether 00:0c:29:10:45:e6 brd

ff:ff:ff:ff:ff:ff

 altname enp2s0

 inet 192.168.33.22/24 brd 192.168.33.255 scope

global noprefixroute ens32

[root@web ~]# curl 192.168.33.110 #访问33.110服务器进⾏测试

欢迎访问!

这⾥是 192.168.33.110 服务器! #测试成功,可以访问

6、为 server 主机配置访问和错误⽇志

控制⽇志参数

(1)nginx 访问⽇志主要控制参数

log_format:⽤来定义记录⽇志的格式(可以定义多种⽇志格式,取不同名字即

可)

access_log:⽤来指定⽇志⽂件的路径及使⽤何种⽇志格式记录⽇志

(2)log_format ⽇志格式变量

$remote_addr:记录访问⽹站的客户端地址。

$remote_user:远程客户端⽤户名。

$time_local:记录访问时间与时区。

$request:⽤户的http请求起始⾏信息。

$status:http状态码,记录请求返回的状态码,例如:200、301、404等。

$body_bytes_sent:服务器发送给客户端的响应body字节数。

$http_referer:记录此次请求是从哪个连接访问过来的,可以根据该参数进⾏防

盗链设置。

$http_user_agent:记录客户端访问信息,例如:浏览器、⼿机客户端等。

$http_x_forwarded_for:当前端有代理服务器时,设置web节点记录客户端地址

的配置,此参数⽣效的前提是代理服务器也要进⾏相关的x_forwarded_for设置。

[root@web ~]#vim /usr/local/nginx/conf/nginx.conf

......省略部分内容......

#log_format main '$remote_addr -

$remote_user [$time_local] "$request" '

# '$status $body_bytes_sent

"$http_referer" '

# '"$http_user_agent"

"$http_x_forwarded_for"';

......省略部分内容......

(3)access_log 访问⽇志

(4)error_log 错误⽇志

[root@server2 ~]# vim

/usr/local/nginx/conf/nginx.conf

......省略部分内容......

#error_log logs/error.log;

#error_log logs/error.log notice;

#error_log logs/error.log info;

错误⽇志 错误⽇志⽂件路径 错误⽇志级别

7、nginx 错误⻚⾯

nginx 的错误⻚⾯与访问⾸⻚⼀样,都有⾃⼰的索引⽂件,⼀般

⽤户访问的⽹站都是对应的索引⽂件。

[root@server2 ~]# vim

/usr/local/nginx/conf/nginx.conf

......省略部分内容......

 error_page 500 502 503 504 /50x.html;

#500~504错误代码,不论哪个代码,错误⻚⾯都是50x.html

 location = /50x.html { #错误⽂件所在路径

 root html; #该⽹站的根⽬录

 }

8、location 块的匹配规则和优先级

1、location⼤致可以分为三类

精准匹配:location = / {...}

正则匹配:location ~ / {...}

⼀般匹配:location / {...}

2、location常⽤的匹配规则

= :进⾏普通字符精确匹配,也就是完全匹配。

^~ :表示普通字符匹配。使⽤前缀匹配。如果匹配成功,则不再匹

配其它 location。

[root@server2 ~]# vim

/usr/local/nginx/conf/nginx.conf

......省略部分内容......

 error_page 500 502 503 504 /50x.html;

#500~504错误代码,不论哪个代码,错误⻚⾯都是50x.html

 location = /50x.html { #错误⽂件所在路径

 root html; #该⽹站的根⽬录

 }

~ :区分⼤⼩写的匹配。

~* :不区分⼤⼩写的匹配。

!~ :区分⼤⼩写的匹配取⾮。

!~* :不区分⼤⼩写的匹配取⾮。

3、location优先级

⾸先精确匹配 =

其次前缀匹配 ^~

其次是按⽂件中顺序的正则匹配 或*

然后匹配不带任何修饰的前缀匹配

最后是交给 / 通⽤匹配

精确>前缀>正则>⼀般>通⽤

(location = 完整路径) > (location ^~ 完整路径) > (location ~* 完整路径) > (location ~ 完整路径) >(location 部分起始路径) > (location /)

9、rewrite 重写和⽹站跳转

1)301 永久跳转

301 永久跳转:当⽤户或搜索引擎向⽹站服务器发起浏览请求时,服务器返回的

HTTP 数据流中头信息(index.html 等)中的状态码的⼀种,表示本⽹⻚永久性

地转移到了另⼀个地址。

rewrite 重写跳转规则

http://www.yang1314/$1:跳转到的⽬标地址,后⾯的$1代表链参数也⼀起跳转。

⽐如访问 www.yh666.com/123 就会跳转到

www.yang1314/123 没有的话。就会直接跳转到 www.yang1314.com

permanent:301 永久跳转

[root@server2 ~]# vim

/usr/local/nginx/conf/nginx.conf

.......省略部分内容.......

 server {

 listen 80;

 server_name www.yh666.com;

 charset utf-8;

#access_log logs/host.access.log main;

rewrite^/(*) 1](http://www.lei

ge.com/$1) redirect;

 location / {

 root html;

 index index.html index.htm;

 rewrite ^/(.*)$

http://www.yang1314.com/$1 permanent; #添加此参数

 }

 }

2、302 临时跳转

跟 301 永久跳转相⽐,302 就是⼀个参数的差别。

配置规则按着 301 配置⾛即可找到域名配置⽂件的Server或者

location段,适当位置添加下⾯代码:

[root@server2 ~]# vim

/usr/local/nginx/conf/nginx.conf

.......省略部分内容.......

 server {

 listen 80;

 server_name www.yh666.com;

 charset utf-8;

#access_log logs/host.access.log main;

 location / {

 root html;

 index index.html index.htm;

 rewrite ^/(.*)$

http://www.yang1314.com/$1 redirect;

 }

 }

常用指令

# 指令之所以能在命令行使用是因为在$PATH目录中能找到这个可执行文件

# 启动和关闭nginx

[root@web ~]# ./nginx   

[root@web ~]# ./nginx -s stop

# 修改了配置文件后,重载nginx服务

[root@web ~]# ./nginx -s reload

# 脚本启动nginx服务

[root@web ~]# vim ~/nginx.sh

#!/bin/bash

/usr/local/sbin/nginx &> /dev/null

ss -lnput|grep nginx

if [ $? -eq 0 ];then

        echo "nginx正在执行,或者是80被占用"

fi

[root@web ~]# ls /usr/lib/ssytemd/system

[root@web ~]# vim /usr/lib/systemd/system/nginx.service

# 如果直接使用sbin目录下的nginx,就无法直接使用systemctl

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1961525.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue3警告 `markRaw` or using `shallowRef` instead of `ref`.

百度翻译&#xff1a;Vue收到了一个组件&#xff0c;该组件被制成了一个反应对象。这可能会导致不必要的性能开销&#xff0c;应该通过用“markRaw”标记组件或使用“shallowRef”而不是“ref”来避免。 消除办法是 使用markRaw或者shallowRer代替ref

从原理到实践:开发视频美颜SDK与主播美颜工具详解

本篇文章&#xff0c;笔者将深入探讨视频美颜SDK的开发原理和实践应用&#xff0c;重点介绍如何打造一款功能强大的主播美颜工具。 一、视频美颜的基本原理 视频美颜的核心在于图像处理技术&#xff0c;主要包括面部识别、图像增强和特效处理。 1.面部识别 常见的面部识别算…

设计结构——循环结构

循环结构 什么是循环 代码的重复执行&#xff0c;就叫做循环。 循环的分类 无限循环&#xff1a;程序设计中尽量避免无限循环。(程序中的无限循环必须可控) 有限循环&#xff1a;循环限定循环次数或者循环的条件。 循环的构成 循环体循环条件 循环实现的三要素 循环变量…

深度学习项目 -7-使用 Python 的手写数字识别

一、前言 该文章仅作为个人学习使用 二、正文 项目源代码&#xff1a;深度学习项目 - 使用 Python 进行手写数字识别 - DataFlair (data-flair.training) 数据集&#xff1a;​​​​​​​https://drive.google.com/open?id1hJiOlxctFH3uL2yTqXU_1f6c0zLr8V_K Python 深…

AB安全产品详解Guard master Safety Products

AB安全产品详解Guard master Safety Products

程序员面试中的“八股文”:是助力还是阻力?

“八股文”在实际工作中是助力、阻力还是空谈&#xff1f; 作为现在各类大中小企业面试程序员时的必问内容&#xff0c;“八股文”似乎是很重要的存在。但“八股文”是否能在实际工作中发挥它“敲门砖”应有的作用呢&#xff1f;有IT人士不禁发出疑问&#xff1a;程序员面试考…

深入浅出mediasoup—拥塞控制

拥塞控制对于不同网络条件下保证音视频传输质量非常重要。mediasoup 移植了 WebRTC 的 GCC 模块&#xff0c;嵌入到服务器&#xff0c;使得 mediasoup 具备了和 WebRTC 客户端一样的拥塞控制能力。为了使 GCC 能够与 mediasoup 框架良好交互&#xff0c;mediasoup 做了很多适配…

Large Models for Time Series and Spatio-Temporal Data: A Survey and Outlook

基本信息 博客贡献人 谷雨 作者 Ming Jin, Qingsong Wen, et al. 标签 大语言模型、预训练基础模型、大模型、时间序列、时空数据、时态数据 摘要 时态数据&#xff0c;包括时间序列和时空数据&#xff0c;在现实世界的应用中极为广泛。这些数据类型记录了动态系统随时…

2024电赛H题可能用到的代码——自动行驶小车

目录 前言 一、MPU6050零漂处理 二、MPU6050的Yaw&#xff08;180&#xff09;误差处理 三、PID算法&#xff08;增量式位置式&#xff09; 四、灰度传感器&#xff08;以8路为例&#xff09; 1、获取黑线偏差 2、判断ABCD点&#xff08;有无黑线交点&#xff09; 五、总结 前言…

内存原生CRAM技术将会颠覆计算存储的未来?

近期&#xff0c;一项刚刚发布的最新研究表明&#xff0c;一种名为计算随机存取存储器&#xff08;Computational Random-Access Memory, CRAM&#xff09;的新技术能够极大地减少人工智能&#xff08;AI&#xff09;处理所需的能量消耗。这项技术由明尼苏达大学双城分校的一组…

SmartInitializingSingleton和InitializingBean的区别

SmartInitializingSingleton&#xff1a;接口里面就一个方法afterSingletonsInstantiated&#xff0c;它是spring容器将所有bean都初始化完成之后&#xff0c;才会去调用&#xff0c;要求实现它接口的bean必须是单例的。 应用场景&#xff1a;可以在服务启动之后去处理一些逻辑…

红酒与电影:银幕上的醉人瞬间

在光影交织的银幕世界里&#xff0c;红酒不仅是品味生活的象征&#xff0c;更是情感交流的媒介。当定制红酒与电影相遇&#xff0c;它们共同编织出一个个醉人的瞬间&#xff0c;让观众在品味红酒的同时&#xff0c;也沉醉于电影的魅力之中。今天&#xff0c;就让我们一起走进红…

JS小应用:从图床获取的html代码中提取IMG标签并提取图片复制到剪贴板

JS小应用&#xff1a;从图床获取的html代码中提取IMG标签并提取图片复制到剪贴板 问题产生 自己做站长&#xff0c;为了节省银子&#xff0c;难免要用到图床。有的图床可以直接给你URL&#xff0c;这当然是最好的情况&#xff1a; 而有的图床&#xff0c;却禁用了鼠标右键&am…

“论数据分片技术及其应用”写作框架软考高级论文系统架构设计师论文

论文真题 数据分片就是按照一定的规则&#xff0c;将数据集划分成相互独立、正交的数据子集&#xff0c;然后将数据子集分布到不同的节点上。通过设计合理的数据分片规则&#xff0c;可将系统中的数据分布在不同的物理数据库中&#xff0c;达到提升应用系统数据处理速度的目的…

FP分数规划在无线通信中的应用(II)

3. 具体例子 3.1-3.3都只需要用第一章concave-convex方法求解&#xff0c;3.4-3.6需要用到第二章的拉格朗日对偶变换&#xff0c;而且具体解 x \mathbf{x} x时需要对离散变量单独开发算法。 3.1 多小区SISO能量分配 第一个例子是具有一组单天线基站&#xff08;BSs&#xff…

Python面向对象浅析

目录 面向对象基本概念 一、类和对象 类和对象是面向对象骗程的两个核心概念。 在程序开发中&#xff0c;要设计一个类&#xff0c;通常需要满足一下三个要素: self详解&#xff1a; 对象&#xff08;Object&#xff09; 魔法方法&#xff1a; 类里的一些特殊方法 __in…

RK3568笔记四十八:ADC驱动开发测试

若该文为原创文章&#xff0c;转载请注明原文出处。 一、ADC介绍 RK3568集成了一个逐次逼近模数转换器&#xff08;Successive Approximation ADC&#xff09;&#xff0c;通常简称为SAR ADC。 这种转换器能够将连续的模拟信号转换为离散的数字信号&#xff0c;其特点在于具有…

nginx转发netty长链接(nginx负载tcp长链接配置)

首先要清楚一点&#xff0c;netty是长链接是tcp连接不同于http中负载在http中配置server监听。长连接需要开启nginx的stream模块(和http是并列关系) 安装nginx时注意开启stream&#xff0c;编译时加上参数 --with-stream &#xff08;其他参数根据自己所需来加&#xff09; …

rem实现屏幕适配(jQuery)

一、rem换算 1.根据视口宽度动态计算字体大小&#xff0c;如果宽度大于750px&#xff0c;则将字体大小设置为100px&#xff0c;否则按比例缩小。 tips:使用时记得引入jQuery.js // 在文档加载完成后执行函数&#xff0c;确保DOM已经准备就绪$(function () {// 定义一个自执行…

增量学习中Task incremental、Domain incremental、Class incremental 三种学习模式的概念及代表性数据集?

1 概念 在持续学习领域&#xff0c;Task incremental、Domain incremental、Class incremental 是三种主要的学习模式&#xff0c;它们分别关注不同类型的任务序列和数据分布变化。 1.1 Task Incremental Learning (Task-incremental) 任务增量学习&#xff0c;也称为任务增…