Nginx入门教程

前言

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 介绍

1. 什么是 Nginx?

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

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

2. 为什么要使用 Nginx?

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

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

示意图:多个客户端请求经过 Nginx 分发到多台后端服务器

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

3. 什么是正向代理?

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

示意图:客户端 → 代理服务器 → 目标服务,代理替客户端发起请求

4. 什么是反向代理?

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

示意图:客户端访问统一域名,代理服务器转发请求到后端多台业务服务器

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

二、Nginx 在 Linux 下的安装

本教程演示环境:CentOS 7.4

1. 下载

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

2. 安装

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

tar -zxvf nginx-1.18.0.tar.gz -C ./

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

cd nginx-1.18.0/
./configure

使用 make 命令进行安装

make && make install

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

whereis nginx

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

成功页面:Welcome to nginx!

三、Nginx 配置入门

1. 配置文件

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

cd conf/ && vim nginx.conf

核心配置片段说明:

  • listen 80;:监听 80 端口,将所有被反向代理的服务器都指向该端口
  • server_name localhost;
  • location / { ... }:匹配 / 目录,客户端在访问 / 目录时经过 nginx 服务

2. 反向代理单个服务器

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

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

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

# 配置监听的目录为:/
location / {
	root html;
	index index.html index.htm;
	proxy_pass http://127.0.0.1:8080; # 反向代理了本机的8080端口
	# proxy_pass http://127.0.0.1:8081; # 可以同时配置多条proxy_pass,反向代理了本机的8081端口
}

3. 反向代理多台服务器

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

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

# 配置服务器组,取名为hello
upstream hello{
	# 一个server对应一个服务器,当然也可以是不同端口的web程序
	server 127.0.0.1:8080;
	server 127.0.0.1:8081;
}
# 在location块中修改反向代理为服务器组
location / {
	root html;
	index index.html index.htm;
	proxy_pass http://hello; # 反向代理了hello服务器组中的所有服务器
}

四、运行测试

1. 启动服务

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

/usr/local/nginx/sbin/nginx

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

nginx -s reload

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

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

2. 关闭服务

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

nginx -s stop # 立即停止,无论是否在工作
nginx -s quit # 等待进程完成当前工作后安全退出

五、负载均衡

1. 什么是负载均衡?

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

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

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

示意图示例:6 次请求,权重 3 分配 3 次,权重 2 分配 2 次,权重 1 分配 1 次。负载均衡大大减少了在高并发的环境下服务器宕机的风险!

2. 配置 Nginx 负载均衡

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

vim nginx.conf

在 upstream 块中添加 weight 参数:

upstream hello{
	server 服务器1:8080 weight=3; # 配置服务器1的权重为3
	server 服务器2:8080 weight=1; # 配置服务器2的权重为1
}

添加完成后执行下面命令即可生效!

nginx -s reload
posted @ 2026-10-20 09:20  当下是吾  阅读(13)  评论(0)    收藏  举报