前言

Nginx 是一个高性能的 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 网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

目录

Nginx 服务快速入门

一、Nginx 介绍

  1. 什么是 Nginx?
  2. 为什么要使用 Nginx?
  3. 什么是正向代理?
  4. 什么是反向代理?

二、Nginx 在 Linux 下的安装

  1. 下载
  2. 安装

三、Nginx 配置入门

  1. 配置文件
  2. 反向代理单个服务器
  3. 反向代理多台服务器

四、运行测试

  1. 启动服务
  2. 关闭服务

五、负载均衡

  1. 什么是负载均衡?
  2. 配置 Nginx 负载均衡

一、Nginx 介绍

1. 什么是 Nginx?

Nginx (engine x) 是一个高性能的 HTTP 和反向代理 web 服务器,同时也提供了 IMAP/POP3/SMTP 服务。

其特点是占有内存少,并发能力强,事实上 nginx 的并发能力在同类型的网页服务器中表现较好。

2. 为什么要使用 Nginx?

随着当今互联网的迅速发展,单点服务器早已无法承载上万个乃至数十万个用户的持续访问。比如一台 Tomcat 服务器在理想状态下只能够可以承受住 2000 个左右的并发量,为了解决这个问题,就需要多台 Tomcat 服务器来进行负载均衡。

那么,应该如何实现负载均衡?Nginx 就是其中的一种解决方案,当用户访问网站时,Nginx 拦截到这个访问请求,并将其通过轮询的方式均匀地分配到不同的服务器上。

Nginx超详细入门教程,收藏慢慢看 - 图1

并且,在 Nginx 中有一种 ip_hash 策略,它可以获取到用户的真实 IP,计算出 hash 值来选择服务器,这也是一种优秀的负载均衡方式。 所以,掌握 Nginx 成为了 Web 开发学习道路上不可缺少的一部分。

3. 什么是正向代理?

正向代理,就是客户端将自己的请求率先发给代理服务器,通过代理服务器将请求转发给服务器。我们常用的 VPN 就是一种代理服务器,为了可以连上国外的网站,客户端需要使用一个可以连接外网的服务器作为代理,并且客户端能够连接上该代理服务器。

Nginx超详细入门教程,收藏慢慢看 - 图2

4. 什么是反向代理?

反向代理与正向代理不同,正向代理是代理了客户端,而反向代理则是代理服务器端。在有多台服务器分布的情况下,为了能让客户端访问到的 IP 地址都为同一个网站,就需要使用反向代理。

Nginx超详细入门教程,收藏慢慢看 - 图3

明白了反向代理的工作机制后,接下来就可以进入 Nginx 的学习!

二、Nginx 在 Linux 下的安装

由于 Nginx 被大量使用在 Web 服务器中,所以本教程选择了 Centos 服务器的 7.4 版本作为演示!

1. 下载

进入官方下载页面:http://nginx.org/en/download.html,选择 Stable version 稳定版本进行下载,并上传至服务器。

Nginx超详细入门教程,收藏慢慢看 - 图4

2. 安装

上传 tar 包至服务器后,解压到当前目录

  1. tar -zxvf nginx-1.18.0.tar.gz -C ./
  2. 复制代码

进入解压后的目录,执行 configure 脚本

  1. cd nginx-1.18.0/
  2. ./configure
  3. 复制代码

使用 make 命令进行安装

  1. make && make install
  2. 复制代码

安装完成后,使用 whereis 命令查找 Nginx 的安装位置 (默认安装在 / user/local / 目录下)

  1. whereis nginx
  2. 复制代码

进入安装目录下的 bin 文件夹,启动 nginx 服务,访问服务器默认的 80 端口查看是否安装成功!

Nginx超详细入门教程,收藏慢慢看 - 图5

三、Nginx 配置入门

1. 配置文件

在 Nginx 的安装目录下有一个 conf 文件夹,打开其中的 nginx.conf 文件

  1. cd conf/ && vim nginx.conf
  2. 复制代码

Nginx超详细入门教程,收藏慢慢看 - 图6

2. 反向代理单个服务器

那么,如何使用 Nginx 进行反向代理?

在 location 参数中添加 proxy_pass 字段,并填写需要反向代理的服务器地址与端口号:

注意:每一行的配置都需要以封号结尾!!!

  1. # 配置监听的目录为:/
  2. location / {
  3. root html;
  4. index index.html index.htm;
  5. proxy_pass http://127.0.0.1:8080; # 反向代理了本机的8080端口
  6. # proxy_pass http://127.0.0.1:8081; # 可以同时配置多条proxy_pass,反向代理了本机的8081端口
  7. }
  8. 复制代码

3. 反向代理多台服务器

如果有多台服务器怎么办?除了不断地添加 proxy_pass 参数,更好的解决方案是配置 upstream 服务器组!

在配置文件的 http 块中添加 upstream 属性:

  1. # 配置服务器组,取名为hello
  2. upstream hello{
  3. # 一个server对应一个服务器,当然也可以是不同端口的web程序
  4. server 127.0.0.1:8080;
  5. server 127.0.0.1:8081;
  6. }
  7. # 在location块中修改反向代理为服务器组
  8. location / {
  9. root html;
  10. index index.html index.htm;
  11. proxy_pass http://hello; # 反向代理了hello服务器组中的所有服务器
  12. }
  13. 复制代码

四、运行测试

1. 启动服务

配置完成后,进入 Nginx 安装目录下的 sbin 文件夹,运行 nginx 程序即可:

  1. /usr/local/nginx/sbin/nginx
  2. 复制代码

如果之前已经启动,无需关闭 nginx 服务,只需要让 nginx 重新加载配置文件即可:

  1. nginx -s reload
  2. 复制代码

刷新浏览器,若反向代理成功,访问的路径会自动映射到配置文件中的服务器地址!

将来,随着用户量的增长,可能需要添加新的服务器;这时只需要修改配置文件,使用 nginx -s reload 命令即可,无需关闭 nginx 服务器!

2. 关闭服务

关闭 nginx 服务的方式一般分为两种:

  1. nginx -s stop # 立即停止,无论是否在工作
  2. nginx -s quit # 等待进程完成当前工作后安全退出
  3. 复制代码

五、负载均衡

1. 什么是负载均衡?

由于不同服务器的配置不同,为了让性能高的服务器分配到更多的请求,便引入了负载均衡的概念。

前面提到过,Nginx 的负载均衡方式可以有很多种,如加权轮询 (默认)、IP 哈希、url 哈希等等,这里就以加权轮询作为介绍。

加权轮询,也就是通过给服务器添加各自的权重值,Nginx 通过权重来进行请求的分配,权重越高接收到的请求数量越多,反之越少:

Nginx超详细入门教程,收藏慢慢看 - 图7

上图配置了三台服务器,在加权轮询的模式下,6 次不同的请求中,权重为 3 的服务器将会分配到 3 次请求,权重为 2 的服务器会分配到 2 个请求,权重为 1 的服务器则会分配到 1 个请求。负载均衡大大减少了在高并发的环境下服务器宕机的风险!

2. 配置 Nginx 负载均衡

同样地,打开 nginx.conf 文件进行配置:

  1. vim nginx.conf
  2. 复制代码

在 upstream 块中添加 weight 参数:

  1. upstream hello{
  2. server 服务器1:8080 weight=3; # 配置服务器1的权重为3
  3. server 服务器2:8080 weight=1; # 配置服务器2的权重为1
  4. }
  5. 复制代码

添加完成后执行 nginx -s reload 即可!

最后

我这边整理了一份:Nginx 相关文档,Java 的系统化资料,(包括 Java 核心知识点、面试专题和 20 年最新的互联网真题、电子书等)有需要的朋友可以关注公众号【程序媛小琬】即可获取。
https://juejin.cn/post/6924534276323016711