Skip to content

Commit

Permalink
style: 💄 修改标题格式
Browse files Browse the repository at this point in the history
  • Loading branch information
dselegent committed Sep 19, 2023
1 parent fe8b0b7 commit ef2cc40
Show file tree
Hide file tree
Showing 5 changed files with 99 additions and 101 deletions.
16 changes: 8 additions & 8 deletions Nginx/01 【Nginx的安装和启动】.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
# Nginx的安装和启动
# 01 【Nginx的安装和启动

# 1.Nginx的介绍
## 1.Nginx的介绍

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了 IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的 Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004 年10月4日。

其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配 置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3) 代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实 上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站 用户有:百度、京东、新浪、网易、腾讯、淘宝等。

# 2.版本区别
## 2.版本区别

常用版本分为四大阵营

Expand All @@ -20,7 +20,7 @@ Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时



# 3.Centos安装
## 3.Centos安装

链接: https://pan.baidu.com/s/15KT0845iAEiEz6-NTYUNiA?pwd=qn7d 提取码: qn7d

Expand Down Expand Up @@ -63,7 +63,7 @@ Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时

3. 然后使用`ifconfig`或者`ip addr`来查看是否修改成功

# 4.Nginx开源版安装
## 4.Nginx开源版安装

将安装包`nginx-1.21.6.tar.gz`放到linux操作系统用户根目录下,使用tar zxvf安装,命令:`tar zxvf nginx-1.21.6.tar.gz`

Expand Down Expand Up @@ -104,7 +104,7 @@ make install

![image-20220823105922400](https://i0.hdslb.com/bfs/album/f35e5c909f51bb8de5ee12e837f6dd9236510cdf.png)

# 5.启动Nginx
## 5.启动Nginx

**放行Nginx,端口号:80**

Expand Down Expand Up @@ -143,7 +143,7 @@ make install
**然后进入安装好的目录 `/usr/local/nginx/sbin `**

```bash
./nginx # 启动
./nginx ## 启动
./nginx -s stop #快速停止
./nginx -s quit #优雅关闭,在退出前完成已经接受的连接请求
./nginx -s reload #重新加载配置
Expand All @@ -155,7 +155,7 @@ make install

![image-20220823110253824](https://i0.hdslb.com/bfs/album/51b9498b820979d41768cd430e6738d4a0bbdfab.png)

# 6.安装成系统服务,开机自启
## 6.安装成系统服务,开机自启

在如下位置创建服务脚本nginx.service

Expand Down
8 changes: 4 additions & 4 deletions Nginx/02 【Nginx的目录介绍】.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Nginx的目录介绍
# 02 【Nginx的目录介绍

# 1.Nginx目录结构
## 1.Nginx目录结构

![image-20220823111154881](https://i0.hdslb.com/bfs/album/57cc40457d8c213875d6583111e2109257b28772.png)

Expand Down Expand Up @@ -62,13 +62,13 @@
- sbin存放的是可执行文件,可以用 ./nginx启动nginx:
![image-20220823111610620](https://i0.hdslb.com/bfs/album/f1cd96779b4385b914546be89e536760af268bb7.png)

# 2.Nginx基本运行原理
## 2.Nginx基本运行原理

![image-20220823111631721](https://i0.hdslb.com/bfs/album/f671dc8a00f96433f9fe6f5cd114bdffb308dd0a.png)

Nginx的进程是使用经典的「Master-Worker」模型,Nginx在启动后,会有一个master进程和多个worker进程。master进程主要用来管理worker进程,包含:接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。worker进程主要处理基本的网络事件,多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。worker进程的个数是可以设置的,一般会设置与机器cpu核数一致,这里面的原因与nginx的进程模型以及事件处理模型是分不开的。

# 3.Nginx的基本配置文件
## 3.Nginx的基本配置文件

Nginx的默认配置文件是nginx.conf

Expand Down
88 changes: 52 additions & 36 deletions Nginx/03 【Nginx虚拟主机和域名解析】.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# Nginx虚拟主机和域名解析
# 03 【Nginx虚拟主机和域名解析

虚拟主机使用特殊的软硬件技术,把一台运行在因特网上的服务器主机分成一台台“虚拟”的主机,每一台虚拟主机都具有独立的域名,具有完整的Internet服务器(WWW、FTP、Email等)功能,虚拟主机之间完全独立,并可由用户自行管理,在外界看来,每一台虚拟主机和一台独立的主机完全一样。

域名解析就是域名到IP地址的转换过程,IP地址是网路上标识站点的数字地址,为了简单好记,采用域名来代替ip地址标识站点地址,域名的解析工作由DNS服务器完成。

# 1.域名、dns、ip地址的关系
## 1.域名、dns、ip地址的关系

- 域名是相对网站来说的,IP是相对网络来说的。当输入一个域名的时候,网页是如何做出反应的?

Expand Down Expand Up @@ -44,7 +44,7 @@ IP网络上有很多路由器,路由器之间转发、通信都是只认这个

这时候DNS就有用处了,电脑先访问DNS服务器,查找域名对应的IP,于是,你的电脑就知道要发包到IP地址了。

# 2.http协议
## 2.http协议

HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。

Expand All @@ -64,62 +64,78 @@ HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层

4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。

# 3.虚拟主机原理
## 3.虚拟主机原理

虚拟主机是为了在同一台物理机器上运行多个不同的网站,提高资源利用率引入的技术。

一般的web服务器一个ip地址的80端口只能正确对应一个网站。web服务器在不使用多个ip地址和端口的情况下,如果需要支持多个相对独立的网站就需要一种机制来分辨同一个ip地址上的不同网站的请求,这就出现了主机头绑定的方法。简单的说就是,将不同的网站空间对应不同的域名,以连接请求中的域名字段来分发和应答正确的对应空间的文件执行结果。举个例子来说,一台服务器ip地址为192.168.8.101,有两个域名和对应的空间在这台服务器上,使用的都是192.168.8.101的80端口来提供服务。如果只是简单的将两个域名A和B的域名记录解析到这个ip地址,那么web服务器在收到任何请求时反馈的都会是同一个网站的信息,这显然达不到要求。接下来我们使用主机头绑定域名A和B到他们对应的空间文件夹C和D。当含有域名A的web请求信息到达192.168.8.101时,web服务器将执行它对应的空间C中的首页文件,并返回给客户端,含有域名B的web请求信息同理,web服务器将执行它对应的空间D中的首页文件,并返回给客户端,所以在使用主机头绑定功能后就不能使用ip地址访问其上的任何网站了,因为请求信息中不存在域名信息,所以会出错。

# 4.使用host文件解析域名
## 4.使用host文件解析域名

![image-20220823113047522](https://i0.hdslb.com/bfs/album/b4887e038d6211c319fb4d1a84a1f58ecae2017d.png)
![image-20230805180808945](https://article.biliimg.com/bfs/article/d807d76ce297eef29232d689448439a7dfb14549.png)

修改完成后
修改完成后,访问虚拟机的ip解析的域名

![image-20220823113102408](https://i0.hdslb.com/bfs/album/9536db974ec1f070f23473986edc27874356f92e.png)

访问虚拟机的ip解析的域名

![image-20220823113117704](https://i0.hdslb.com/bfs/album/b3bda53e7ae80bac0f3955887c28b9723ff83370.png)
![image-20230805180856460](https://article.biliimg.com/bfs/article/de1e07f398a67b9c186ed66941a5412cb1e12a39.png)

> 还可以通过域名解析 然后连接到内网
>
> 我们在阿里云的dns域名解析上面添加添加了我们域名和内网ip的对应关系,仅仅只是对应关系,所以我们ping域名可以解析成我们的内网ip,由于终端与对应机器在同一局域网所以能通,你换个不在同一内网的不行
# 5.虚拟主机域名配置
## 5.虚拟主机域名配置

在根目录的`www`目录下创建文件夹`test`,里面在创建两个文件夹`test1``test2`,分别创建`index.html`

在系统根目录创建weixiao目录,在里面创建两个文件夹,hello,hi,分别创建index.html
![image-20230805181232579](https://article.biliimg.com/bfs/article/6587c46a2d0d1b81aed5a18aa32c8fad3a52f078.png)

修改`/usr/local/nginx/conf`下的nginx.conf
使用腾讯云`DNSPod`添加域名解析记录:

![image-20220823113218721](https://i0.hdslb.com/bfs/album/e5548c67f6ffdab742a93d6bb29b0196bd75a562.png)
![image-20230805181614222](https://article.biliimg.com/bfs/article/fb1fd8e2b1fc20f3fe655f3e5f4ab82559ccdcfc.png)

记得开启相对于的端口号。
修改`nginx.conf`

```bash
firewall-cmd --zone=public --add-port=88/tcp --permanent
firewall-cmd --reload
server {
listen 80;
server_name test1.dselegent.icu;
location /
{
root /www/test/test1;
index index.html index.htm;
}
}

server {
listen 80;
server_name test2.dselegent.icu;
location /
{
root /www/test/test2;
index index.html index.htm;
}
}
```

重加载:systemctl reload nginx
重新加载服务:`systemctl reload nginx`

结果:

![image-20220823113312680](https://i0.hdslb.com/bfs/album/e86cc1b03b008553ac82e83c53ccf4d92ee715db.png)
![image-20230805181750749](https://article.biliimg.com/bfs/article/2b02b3d9474c1bcba9e7b132d3981e99fa3d1f30.png)

![image-20220823113320157](https://i0.hdslb.com/bfs/album/32506ec5d63d39b841ae543f1fb3f25473395308.png)
![image-20230805181805077](https://article.biliimg.com/bfs/article/d8b91ea0fe41fa6595bc79d15945dca314f2d33a.png)

**注意:**

虚拟主机技术server中,相同的主机端口号会报错。

可以这样配置:

​ listen 80; server_name www.website.com;
- listen 80; server_name www.website.com;
- listen 88; server_name qqq.website.com;

​ listen 88; server_name qqq.website.com;
两者组合起来不重复就可以了。

# 6.泛域名
## 6.泛域名

所谓“泛域名解析”是指:利用通配符* (星号)来做次级域名以实现所有的次级域名均指向同一IP地址。

Expand All @@ -133,40 +149,40 @@ firewall-cmd --reload

泛域名在实际使用中作用是非常广泛的,比如实现无限二级域名功能,提供免费的url转发,在IDC部门实现自动分配免费网址,在大型企业中实现网址分类管理等等,都发挥了巨大的作用。

在阿里云的域名配置如下
在腾讯云的域名配置如下

![image-20220823113521299](https://i0.hdslb.com/bfs/album/e309248790d35496719f7a5ed6dcf490ff483689.png)
![image-20230805183845203](https://article.biliimg.com/bfs/article/e73477bdb9f99b1928ef771a32bd08a6bec2602b.png)

# 7.域名解析规则
## 7.域名解析规则

我们可以在同一个servername中配置多个域名
我们可以在同一个`server_name`中配置多个域名

> 此处所有配置都是指的nginx配置。
**完整匹配**
server中可以配置多个域名,例如:

`server_name test81.xzj520520.cn test82.xzj520520.cn;`
`server_name test1.dselegent.icu test2.dselegent.icu;`

**通配符匹配**
使用通配符的方式如下:

`server_name *.xzj520520.cn;`
`server_name *.dselegent.icu;`

需要注意的是完整匹配的优先级大于通配符匹配和正则匹配。

**通配符结束匹配**
使用通配符结束匹配的方式如下:

`server_name www.xzj520520.*;`
`server_name www.dselegent.*;`

**正则匹配**

采用正则的匹配方式如下:

![image-20220823113840053](https://i0.hdslb.com/bfs/album/1daeda7efdda3d5381f1137a766f43c6175a1cdc.png)

访问结果如下:
`server_name ~^[0-9]+\.dselegent\.icu$`

![image-20220823113905288](https://i0.hdslb.com/bfs/album/256e783e83a4ef674ba7de5839165ba3ee31860a.png)
访问:`123456.dselegent.icu`

正则匹配格式,必须以`~`开头,比如:`server_name ~^www\d+\.example\.net$;`。如果开头没有~,则nginx认为是精确匹配。在逻辑上,需要添加^和$锚定符号。注意,正则匹配格式中.为正则元字符,如果需要匹配.,则需要反斜线转义。如果正则匹配中含有{和}则需要双引号引用起来,避免nginx报错,如果没有加双引号,则nginx会报如下错误:`directive "server_name" is not terminated by ";" in ...`

Expand Down
33 changes: 19 additions & 14 deletions Nginx/04 【Nginx反向代理和负载均衡】.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
# 反向代理在系统结构中的应用场景
# 04 【Nginx反向代理和负载均衡】

# 1.反向代理和正向代理
## 1.反向代理和正向代理

## 1.1 反向代理
### 1.1 反向代理

描述:反向代理是指以代理服务器来接受连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器,而且整个过程对于客户端而言是透明的。

![image-20220823114417662](https://i0.hdslb.com/bfs/album/c960d7a924ce20ef449e4a480f40039a5dc3470a.png)

## 1.2 正向代理
### 1.2 正向代理

描述:正向代理意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后由代理向原始服务器转交请求并将获得的内容返回给客户端。

Expand All @@ -20,25 +20,30 @@

都是站在客户端的角度,看代理服务器是帮客户端代理,还是帮服务端代理

# 2. 使用proyx_pass进行代理配置
## 2. 使用proyx_pass进行代理配置

浏览器访问`虚拟机ip(比如:http://test80.xzj520520.cn/)`就会跳转到 http://www.bilibili.com,同时域名没有变化(不支持https)
浏览器访问`虚拟机ip(比如:http://test1.dselegent.icu/)`就会跳转到 http://www.bilibili.com同时域名没有变化(不支持https)

可以有多个server。然后根据策略、调度。

![image-20220824135439846](https://i0.hdslb.com/bfs/album/06a9917f53e715de3062199dd9064e5d33b5107f.png)

访问http://test80.xzj520520.cn/:
```bash
server {
listen 80;
server_name test1.dselegent.icu;
location /
{
proxy_pass http://www.bilibili.com;
}
}
```

# 3.负载均衡
## 3.负载均衡

描述:负载均衡也是Nginx常用的一个功能。简单而言就是当有2台或以上服务器时,根据规则随机的将请求分发到指定的服务器上处理,负载均衡配置一般都需要同时配置反向代理,通过反向代理跳转到负载均衡。

而Nginx目前支持自带3种负载均衡策略还有2种常用的第三方策略。

![image-20220824135958921](https://i0.hdslb.com/bfs/album/f4b9b827c7a66b7bd319dc24efd72d5d0346f730.png)

# 4.基于反向代理的负载均衡器
## 4.基于反向代理的负载均衡器

克隆两个centos,ip分别设为192.168.8.102,192.168.8.103(网段要用自己的电脑对应)

Expand Down Expand Up @@ -275,7 +280,7 @@ upstream httpds{
![image-20220824140751527](https://i0.hdslb.com/bfs/album/73c8d4dafe303213d5e90285e8a9ef9c757e6379.png)
# 5.负载均衡策略和调度算法
## 5.负载均衡策略和调度算法
**负载均衡策略**
Expand Down
Loading

0 comments on commit ef2cc40

Please sign in to comment.