最近有几位跟着我学习过项目实战的老学员,陆续找到我咨询:之前学过的 Nginx 配置步骤全都记不清了,公司最近上线项目,像使用Nginx做反向代理、负载均衡和动静分离,却不知道从哪下手。为了让大家能快速查阅、一步一步跟着做,我特意把完整、可直接复制的 Nginx 实操流程整理成这篇教程,方便随时查看、快速上手。

Nginx 从入门到精通目录

1. 为什么要使用 Nginx

2. Nginx 的简介

3. Nginx 的特征

4. Nginx 的作用

5. Windows 下安装 Nginx

6. Linux 下安装 Nginx 步骤

7. Nginx 常用命令

8. Nginx 配置文件结构

9. Nginx 实战配置

10. 动静分离配置

1. 为什么要使用 Nginx

单体式架构的项目:公司的项目刚刚上线的时候,并发量小,用户使用得少,所以在低并发的情况下,一个 jar 包应用就够了。但是慢慢的,平台用户多了起来,并发量慢慢增大了,用户群体不断壮大,单台服务器遇到了瓶颈,这时候一台服务器满足不了我们的需要了。

于是我们思考新的解决方案,进行了横向扩展,又增加了服务器。这个时候几个项目启动在不同的服务器上,用户要访问,就需要增加一个代理服务器了,通过代理服务器来帮我们转发和处理请求。

我们希望这个代理服务器可以帮助我们接收用户的请求,然后将用户的请求按照规则帮我们转发到不同的服务器节点之上。这个过程用户是无感知的,用户并不知道是哪个服务器返回的结果。我们还希望它可以按照服务器的性能提供不同的权重选择,保证最佳体验,所以我们使用了 Nginx。

2. Nginx 的简介

Nginx 是一个高性能的 HTTP 和反向代理 web 服务器,是由伊戈尔・赛索耶夫为俄罗斯访问量第二的站点开发的。因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

Nginx 是一款轻量级的 Web 服务器 / 反向代理服务器及电子邮件代理服务器,其特点是占有内存少,并发能力强。事实上 Nginx 的并发能力在同类型的网页服务器中表现较好。

中国大陆使用 Nginx 网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

Nginx 是由 C 语言开发,专为性能优化而开发,性能是最重要的考量,实现上非常注重效率,能经受高负载的考验,官方数据测试表明能够支持高达 50000 个并发连接数的响应。https://lnmp.org/nginx.html

3. Nginx 的特征

3.1 Nginx 具有很高的稳定性

其他 HTTP 服务器,当遇到访问的峰值,或者有人恶意发起慢速连接时,也很可能会导致服务器物理内存耗尽,频繁交换,失去响应,只能重启服务器。例如当 Apache 一旦上到 200 个以上进程,web 响应速度就明显非常缓慢了。而 Nginx 采取了分阶段资源分配技术,使得它的 CPU 与内存占用率非常低。Nginx 官方表示保持 10000 个没有活动的链接,它只占 2.5MB 内存,所以类似 DOS 这样的攻击对 Nginx 来说基本上是毫无用处的。

3.2 Nginx 支持热部署

它的启动特别容易,并且几乎可以做到 7×24 小时不间断运行,即使运行数个月也不需要重新启动。你还能够在不间断服务的情况下,对软件版本进行升级。

4. Nginx 的核心功能

4.1 反向代理

正向代理:如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。正向代(VPN、游戏使用)代理的是客户端。

反向代理代理的是服务器端,比如我们在客户端浏览器里访问百度,客户端发出请求后,由一台 Nginx 服务器接收到请求后,从后台调取一台服务器给我们提供接收请求、进行响应的过程。在这个过程中,这个 Nginx 服务器就是百度众多服务器的代理。

4.2 负载均衡

客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服务器处理完毕后,再将结果返回给客户端。

这种架构模式对于早期的系统相对单一,并发请求相对较少的情况下是比较适合的,成本也低。但是随着信息数量的不断增长,访问量和数据量的飞速增长,以及系统业务复杂度增加,服务器响应会日益缓慢,高并发时容易崩溃。很明显这是服务器性能瓶颈造成的问题。

升级服务器配置受摩尔定律失效限制,无法满足日益增长的需求,例如天猫双十一、12306、阿里等高并发场景,顶级物理配置也无法承载。

因此采用横向扩展集群方案,增加服务器数量,将请求分发到多台服务器,分散负载,这就是负载均衡。

Nginx 提供的负载均衡策略有 2 种:内置策略和扩展策略。内置策略为轮询、加权轮询、IP_hash(同一个 IP 固定分配到同一台服务器,保证 session 不丢失)。

4.3 动静分离

在软件开发中,有些请求需要后台处理,有些不需要,例如 css、js、html、jpg 等文件,称为静态文件。将动态网站的静态资源与动态资源拆分,对静态资源做缓存,可大幅提升响应速度。使用 Nginx 能提高网站响应速度,优化用户体验,提升网站健壮性。

5. Windows 下安装 Nginx官网:http://nginx.org/en/download.html 下载 nginx/Windows-1.20.1 稳定版。解压后双击 nginx.exe 启动,访问 80 端口即可看到 Nginx 欢迎页。

6. Linux 下安装 Nginx 步骤

6.1 下载 Nginx 压缩包

官网:http://nginx.org/en/download.html 下载 nginx-1.20.1.tar.gz 稳定版

6.2 上传到 Linux 服务器

上传至 /usr 目录下

6.3 安装依赖

yum install gcc-c++ yum -y install pcre-devel yum -y install openssl openssl-devel

6.4 查看 GCC 版本

gcc -v

6.5 解压

tar -zxvf nginx-1.20.1.tar.gz

6.6 编译安装

cd nginx-1.20.1 ./configure make make install

6.7 查看安装路径

whereis nginx

默认路径:/usr/local/nginx

6.8 启动 Nginx

cd /usr/local/nginx/sbin ./nginx

6.9 查看进程

ps -ef | grep nginx

6.10 防火墙配置

# 查看防火墙状态 systemctl status firewalld
开放 80 端口
firewall-cmd --zone=public --add-port=80/tcp --permanent

重启防火墙生效
firewall-cmd --reload
7. Nginx 常用命令cd /usr/local/nginx/sbin # 查看版本 ./nginx -v # 启动 ./nginx # 停止 ./nginx -s stop # 优雅退出 ./nginx -s quit # 重新加载配置 ./nginx -s reload # 查看进程 ps -ef | grep nginx

8. Nginx 配置文件结构

配置文件路径:/usr/local/nginx/conf/nginx.conf 由三部分组成:全局块、events 块、http 块。

8.1 全局块

配置影响 Nginx 全局的参数,如工作进程数。

worker_processes 1;

建议设置为 CPU 核心数。

8.2 events 块

设置连接数

events { worker_connections 1024; }

8.3 http 块

包含 server、location、upstream 等配置。

完整基础配置

user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid;
events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;

server {
listen 80;
server_name localhost;

location / {
root html;
index index.html index.htm;
}

error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;

location = /50x.html {
root html;
}
}
}

9. Nginx 实战配置

9.1 反向代理配置 1

效果:访问 www.abc.com 转发到 127.0.0.1:8085

9.1.1 启动 SpringBoot 项目

java -jar xxx.jar --server.port=8085 java -jar xxx.jar --server.port=8086

9.1.2 开放端口

firewall-cmd --zone=public --add-port=8085/tcp --permanent firewall-cmd --zone=public --add-port=8086/tcp --permanent firewall-cmd --reload

9.1.3 配置 Windows hosts

192.168.8.54 www.abc.com

9.1.4 Nginx 配置

server { listen 80; server_name 192.168.8.54;
location / {
proxy_pass http://127.0.0.1:8085;
index index.html index.htm;
}
}

9.2 反向代理配置 2

按路径分发:

/teacher/ → 8085

/student/ → 8086

9.2.1 开放 9001 端口

firewall-cmd --zone=public --add-port=9001/tcp --permanent firewall-cmd --reload

9.2.2 配置

server { listen 9001; server_name 192.168.8.54;
location /teacher/ {
proxy_pass http://127.0.0.1:8085;
}

location /student/ {
proxy_pass http://127.0.0.1:8086;
}
}

9.3 负载均衡配置

# 定义服务集群 upstream myserver { server 192.168.8.54:8085; server 192.168.8.54:8086; }
server {
listen 80;
server_name 192.168.8.54;

location / {
proxy_pass http://myserver;
index index.html index.htm;
}
}

9.4 负载均衡策略

9.4.1 轮询(默认)

upstream myserver { server 192.168.8.54:8085; server 192.168.8.54:8086; }

9.4.2 加权轮询

upstream myserver { server 192.168.8.54:8085 weight=1; server 192.168.8.54:8086 weight=3; }

9.4.3 ip_hash

upstream myserver { ip_hash; server 192.168.8.54:8085; server 192.168.8.54:8086; }

9.4.4 fair(第三方模块)

upstream myserver { server 192.168.8.54:8085; server 192.168.8.54:8086; fair; }

10. 动静分离配置10.1 前端页面

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> </head> <body> <div id="app"> <input type="button" value="获取数据" @click="buyGood" /><br/> <span>{{message}}</span> </div> </body> <script src="https://cdn.staticfile.net/vue/2.7.0/vue.min.js"></script> <script src="https://unpkg.com/axios/dist/axios.min.js"></script> <script> axios.defaults.withCredentials = true new Vue({ el: "#app", data: { message:"" }, methods: { buyGood() { axios({ method: "get", url: "/ipport/hello" }).then(res => { this.message = res.data }) } } }) </script> </html>

10.2 后端 Controller

@CrossOrigin @RestController public class IndexController { @RequestMapping("/index") public String index(){ System.out.println("进入项目1"); return "欢迎登录首页!"; } }

10.3 Nginx 动静分离配置

upstream myserver{ server 47.93.163.95:8085 weight=1; server 47.93.163.95:8086 weight=1; }
server {
listen 80;
server_name 47.93.163.95;

静态资源
location / {
root /myweb;
index index.html index.htm;
}

动态接口
location /ipport/ {
proxy_pass http://myserver/;
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}

以上就是本次 Nginx 从安装到实战配置的完整内容,希望能帮大家快速上手、少走弯路。如果你想系统学习相关技术,如果你想系统学习 Nginx 高并发架构、微服务部署,或了解 AI 智能应用开发全套课程,可以直接咨询我,我会为你提供更完整的学习路线与实战指导。