web基础及http协议、

⼀、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.mzph.cn/pingmian/51718.shtml

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

相关文章

芋道微服务全栈开发日记(商品sku数据归类为规格属性)

商品的每一条规格和属性在数据库里都是单一的一条数据&#xff0c;从数据库里查出来后&#xff0c;该怎么归类为对应的规格和属性值&#xff1f;如下图&#xff1a; 在商城模块&#xff0c;商品的单规格、多规格、单属性、多属性功能可以说是非常完整&#xff0c;如下图&#x…

web、http协议、apache服务、nginx服务

web基本概念和常识 概念 web&#xff1a;为用户提供的一种在互联网上浏览信息的服务&#xff0c;是动态的、可交互的、跨平台的和图形化的&#xff1b; 为用户提供各种互联网服务&#xff0c;这些服务包括浏览服务以及各种交互式服务&#xff0c;包括聊天、购物等&#xff1…

shp格式数据详解

还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#xff0c;webgl&#xff0c;ech…

MATLAB中“varargin”的作用

varargin是什么&#xff1f; 在MATLAB中&#xff0c;varargin是一个特殊的变量&#xff0c;用于接收函数输入参数中的可变数量的参数。它允许用户在调用函数时传递不确定数量的参数。 varargin的本质是一个包含了所有可变参数的cell数组。在函数内部&#xff0c;可以使用cell…

鸿蒙HarmonyOS开发:@Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化

文章目录 一、装饰器二、概述三、限制条件四、装饰器说明五、Toggle组件1、子组件2、接口3、ToggleType枚举4、事件 六、示例演示1、代码2、效果 一、装饰器 State装饰器&#xff1a;组件内状态Prop装饰器&#xff1a;父子单向同步Link装饰器&#xff1a;父子双向同步Provide装…

.NET周刊【7月第4期 2024-07-28】

国内文章 .NET 高性能缓冲队列实现 BufferQueue https://mp.weixin.qq.com/s/fUhJpyPqwcmb3whuV3CDyg BufferQueue 是一个用 .NET 编写的高性能的缓冲队列实现&#xff0c;支持多线程并发操作。 项目地址&#xff1a;https://github.com/eventhorizon-cli/BufferQueue 项目…

【Python】基础学习技能提升代码样例6:日志logging

logging 模块实现了python的日志能力。本文通过几个示例展示一些重点概念与用法。 一、线程安全介绍 logging 模块的目标是使客户端不必执行任何特殊操作即可确保线程安全。 它通过使用线程锁来达成这个目标&#xff1b;用一个锁来序列化对模块共享数据的访问&#xff0c;并且…

upload-labs靶场练习

文件上传函数的常见函数&#xff1a; 在PHP中&#xff0c;‌文件上传涉及的主要函数包括move_uploaded_file(), is_uploaded_file(), get_file_extension(), 和 mkdir()。‌这些函数共同协作&#xff0c;‌使得用户可以通过HTTP POST方法上传文件&#xff0c;‌并在服务器上保存…

实战:安装ElasticSearch 和常用操作命令

概叙 科普文&#xff1a;深入理解ElasticSearch体系结构-CSDN博客 Elasticsearch各版本比较 ElasticSearch 单点安装 1 创建普通用户 #1 创建普通用户名&#xff0c;密码 [roothlink1 lyz]# useradd lyz [roothlink1 lyz]# passwd lyz#2 然后 关闭xshell 重新登录 ip 地址…

kaggle使用api下载数据集

背景 kaggle通过api并配置代理下载数据集datasets 步骤 获取api key 登录kaggle&#xff0c;点个人资料&#xff0c;获取到自己的api key 创建好的key会自动下载 将key放至家目录下的kaggle.json文件中 我这里是windows的administrator用户。 装包 我用了虚拟环境 pip …

Vite + Vue3 + TS项目配置前置路由守卫

在现代前端开发中&#xff0c;使用 Vue 3 和 TypeScript 的组合是一种流行且高效的开发方式。Vite 是一个极速的构建工具&#xff0c;可以显著提升开发体验。本文博主将指导你如何在 Vite Vue 3 TypeScript 项目中配置前置路由守卫&#xff08;Navigation Guards&#xff09;…

【YashanDB知识库】如何远程连接、使用YashanDB?

问题现象 在各个项目实施中&#xff0c;我们经常遇到客户、开发人员需要连接和使用YashanDB但不知如何操作的问题&#xff0c;本文旨在介绍远程连接、使用YashanDB的几种方式。 问题的风险及影响 无风险 问题影响的版本 历史版本~23.2 问题发生原因 无 解决方法及规避方…

前端web开发HTML+CSS3+移动web(0基础,超详细)——第1天

一、开发坏境的准备 1&#xff0c;在微软商店下载并安装VS Code 以及谷歌浏览器或者其他浏览器&#xff08;我这里使用的是Microsoft Edge&#xff09; 2&#xff0c;打开vs code &#xff0c;在电脑桌面新建一个文件夹命名为code&#xff0c;将文件夹拖拽到vs code 中的右边…

Windows10安装CMake图文教程

CMake是一个跨平台的开源构建工具&#xff0c;用于管理软件构建过程。CMake允许开发人员使用简单的语法来描述项目的构建过程&#xff0c;而无需直接处理特定于操作系统或编译器的细节。开发人员可以编写CMakeLists.txt文件来指定项目的源文件、依赖项和构建规则&#xff0c;然…

Ubuntu 20.04.6 安装 Elasticsearch

1.准备 -- 系统更新 sudo apt update sudo apt upgrade -- 安装vim 文本编辑器 sudo apt install vim-- jdk 版本确认 java -versionjdk 安装可以参照&#xff1a;https://blog.csdn.net/CsethCRM/article/details/140768670 2.官方下载Elasticsearch 官方地址&#xff1a;h…

Tekion 选择 ClickHouse Cloud 提升应用性能和指标监控

本文字数&#xff1a;4187&#xff1b;估计阅读时间&#xff1a;11 分钟 作者&#xff1a;ClickHouse team 本文在公众号【ClickHouseInc】首发 Tekion 由前 Tesla CIO Jay Vijayan 于 2016 年创立&#xff0c;利用大数据、人工智能和物联网等技术&#xff0c;为其汽车客户解决…

2024电赛H题参考方案(+视频演示)——自动行使小车

目录 一、题目要求 二、参考资源获取 三、参考方案 1、环境搭建及工程移植 2、移植MPU6050模块 3、移植TB6612电机驱动模块 4、整体控制方案视频演示 总结 一、题目要求 小编自认为&#xff1a;此次H题属于控制类题目&#xff0c;相较于往年较为简单&#xff0c;功能也算单一&a…

谷歌出品,一款免费的智能绘图工具

AutoDraw是由Google开发的一款基于网络的智能绘图工具&#xff0c;旨在通过人工智能技术帮助用户快速、简便地创建图画和图表。该工具于2017年4月11日由谷歌创意实验室推出&#xff0c;并迅速获得了广泛关注。 AutoDraw的核心功能是利用机器学习算法识别用户的草图或涂鸦&…

分布式SQL查询引擎之Presto

Apache Presto 是一个开源的分布式 SQL 查询引擎&#xff0c;旨在高效地对大规模数据集执行交互式查询。Presto 最初由 Facebook 开发&#xff0c;现已成为广泛使用的数据查询工具&#xff0c;特别是在大数据和分析领域。 主要特点 高性能&#xff1a;Presto 通过并行化和内存…

【A1web 1.0】靶机复现详解!

靶机地址&#xff1a; https://www.vulnhub.com/entry/ai-web-1,353/攻击机&#xff1a;kali 首先虚拟机建一个A1web 1.0靶机 切换nat模式 然后kali扫描 nmap -sV ip段 0/24 扫描出ip进行访问 访问没有什么信息 使用dirb 对网页…