nginx 概念作用,优点。
当网站服务器用:可以直接存放和发送网页、图片、CSS 文件等静态内容给用户 。
做反向代理:帮后端的程序服务器挡在前面,接收用户请求后再转发进去,保护后端安全 。
做负载均衡:当访问人太多时,把流量自动分给多台服务器,防止单台机器累垮 。
提供邮件服务:除了管网页,也能处理 IMAP、POP3、SMTP 这些邮件相关的协议
资源占用少:内存吃得很少,启动速度特别快,对服务器配置要求不高 。
抗并发能力强:能同时处理几万个连接,高流量下也不容易崩,运行很稳定 。
开源免费:代码公开,大家可以免费使用,还能根据需求自己扩展功能
nginx 提供负载均衡的策略有2种,内置策略,和扩展策略,,内置策略为轮询,加强轮询,Ip hash .扩展策略就有很多了,五花八门,
轮询的话就是以此循环的查询,就是轮询,3个服务器配置相同,客户端轮流查询它们3个,
下图就是加强轮询,

服务器3配置高,权重就高,可灵活调节。加强轮询
ip hash 对客户端请求的ip ,操作,然后根据,hash 结果,将同一个客户端ip 的请求,分发给同一个服务器,进行处理。可以解决session 不共享的问题。
启动很多个服务器就有很多个Tomcat ,session ,就有N个,就不能做session 共享,更多的使用redis 实现session 共享/。
拓展知识点。
Session 核心概念
定义:服务器为每个访客创建独立存储空间(键值对),记录登录态、购物车等临时信息,生命周期通常为 20 分钟至主动注销 。
原理:服务端生成唯一 Session ID,通过 Cookie(首选)或 URL 重写传给客户端;后续请求携带该 ID,服务端据此检索对应数据 。
特点:数据存服务端(安全、容量大),依赖客户端存 ID;相比 Cookie 更安全,但占用服务器资源 。
Session 共享的必要性与方案
单机无需共享;但在负载均衡集群中,若请求被分发到不同服务器,本地内存 Session 会导致“重复登录”或数据丢失,需实现共享 。常见方案如下:
集中式存储(推荐):将 Session 数据统一存于 Redis/Memcached 等分布式缓存,所有应用节点读写同一中心。优势是高可用、易扩展,主流框架如 Spring Session 即基于此实现 。
Session 复制:集群节点间同步复制 Session 对象。缺点是大集群下网络与内存开销巨大,仅适用于小规模集群 。
Session 绑定(粘性会话):负载均衡器通过 IP Hash 等算法将同一用户固定转发至某台服务器。缺点是无高可用性,单点故障会导致会话丢失 。
Cookie 存储:将加密后的 Session 数据直接存在客户端 Cookie 中。缺点受容量限制(通常<4KB)、安全性低且增加带宽消耗,一般不推荐存敏感数据
动静分离。
在开发中有些请求需要后台处理,有些不需要后台处理。不需要后台处理的文件称为静态文件,让动态网页根据一定的规则把不变的资源和经常变的资源区分开来。动静资源做好拆分,就可以将其做缓存操作,提高响应速度。
nginx 的安装,
https://nginx.org/这个是nginx 的官网,一般使用稳定版本,不推荐最新的。
windows 安装非常方便,
下载之后就解压

conf 配置文件,还有些文档配置,日志,
/usr/local/nginx 默认安装路径,///

sbin是执行文件,启动nginx就需要进入文件了。
配置 worker 连接数,location 不同的的服务器前者是访问前端,后者是访问后端。

结合上面的图片,
nginx -v
图 1:Nginx 完整配置结构框架
nginx
# 全局事件模块,控制并发连接
events {
worker_connections 1024; # 单个工作进程最大同时连接1024
}
# http核心模块,所有网站、代理、负载均衡都写在这里
http {
# 负载均衡池定义块(对应图2红框upstream)
upstream xx{
// 后端服务节点列表
}
# 第一个虚拟主机:监听80端口HTTP网站
server {
listen 80; # 监听本机80端口
server_name localhost; # 匹配访问域名localhost
# 匹配所有路径:http://localhost/xxx
location / {
// 通用处理逻辑
}
# 精准匹配 /admin 路径:http://localhost/admin
location /admin {
// 后台单独处理逻辑
}
}
# 第二个虚拟主机:监听443端口HTTPS加密网站
server {
listen 443;
}
}
核心结构划分
events:底层网络并发设置,控制能同时接多少用户访问http:总入口,所有网站、反向代理、负载均衡、缓存、压缩都写在这里upstream:后端服务集群池(图 2 重点),专门做负载均衡server:虚拟主机,一个server对应一个网站(80 是 http,443 是 https)location:路径匹配器,同一网站下不同 URL 走不同处理规则
图 2:负载均衡 + 反向代理完整示例
1. 上方红框 upstream 负载均衡池
nginx
upstream kuangstudy {
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=1;
}
作用:定义两台后端业务服务(比如两个 SpringBoot 项目,分别跑在 8080、8081)
weight=1:权重,两台服务器平分流量;改成weight=2就会多分配一倍请求Nginx 会自动把用户请求分发到这两台后端,实现负载均衡,单台宕机自动切换另一台
2. 下方红框 proxy_pass 反向代理核心语句
nginx
location / {
proxy_pass http://kuangstudy;
}
proxy_pass:反向代理指令,意思是把当前收到的所有请求转发给 upstream 定义的集群 kuangstudy访问流程:用户访问
http://localhost→ Nginx 接收 → 转发给 8080/8081 后端服务 → 后端返回数据给 Nginx → Nginx 返回给浏览器通俗理解:Nginx 做中间人,隐藏后端真实服务地址,同时分发流量
两张图结合完整流程
用户访问 localhost → 匹配 80 端口 server 块 → 匹配/路径 → proxy_pass 转发到 kuangstudy 集群 → upstream 自动分发到 8080/8081 后端
二、Nginx 其余常用功能实现方式
1. 反向代理(单台后端,不用 upstream)
只转发给一台服务,无需定义集群:
nginx
location / {
proxy_pass http://127.0.0.1:8080; # 直接转发单后端
proxy_set_header Host $host; # 透传原始域名给后端
proxy_set_header X-Real-IP $remote_addr; # 把用户真实IP传给后端
}
2. HTTPS 加密(443 端口 SSL 证书)
对应图 1 下方 listen 443 的 server 块,实现全站 https:
nginx
server {
listen 443 ssl;
server_name www.kuangstudy.com;
ssl_certificate cert/xxx.pem; # 证书公钥
ssl_certificate_key cert/xxx.key; # 证书私钥
# 强制http跳转https
return 301 https://$host$request_uri;
}
3. 静态资源服务器(图片 / 前端页面,不转发后端)
不用 proxy_pass,直接读取本地文件:
nginx
location /static/ {
root /data/www; # 本地文件根目录
expires 7d; # 浏览器缓存7天,加速访问
}
4. 路径分离代理(图 1 的 location /admin)
前台、后台分开转发:
nginx
# 前台页面转发8080
location / {
proxy_pass http://127.0.0.1:8080;
}
# /admin后台单独转发8081管理服务
location /admin {
proxy_pass http://127.0.0.1:8081;
}
5. 负载均衡高级策略(upstream 扩展)
轮询(默认):weight 权重,图 2 示例
ip_hash:同一用户始终分配同一台后端(解决 session 丢失)
nginx
upstream kuangstudy {
ip_hash;
server 127.0.0.1:8080;
server 127.0.0.1:8081 backup; # backup备用机,主机器挂了才启用
}
6. Gzip 压缩,减小传输体积,提速
写在 http {} 全局内:
nginx
gzip on;
gzip_types text/css application/javascript image/jpeg;
gzip_min_length 1k; # 大于1kb才压缩
7. 访问限制、防盗链
限制单 IP 最大访问频率(防爬虫)
nginx
limit_req_zone $binary_remote_addr zone=rate:10m rate=10r/s;
location / {
limit_req zone=rate burst=20;
}
防盗链(防止别人盗图)
nginx
location ~* \.(jpg|png|gif)$ {
valid_referers none blocked www.kuangstudy.com;
if ($invalid_referer) { return 403; }
}
8. 跨域配置(前端分离项目常用)
nginx
location /api {
proxy_pass http://后端服务;
add_header Access-Control-Allow-Origin *;
}
9. 动静分离(生产最常用)
静态资源(图片 /js/css)Nginx 直接返回,动态接口转发后端,减轻后端压力:
nginx
# 静态资源直接本地读取
location ~* \.(html|js|css|png|jpg)$ {
root /html;
expires 10d;
}
# 接口转发后端集群
location /api {
proxy_pass http://kuangstudy;
}
三、简单总结
upstream + proxy_pass组合 = 负载均衡 + 反向代理(两张图核心)server区分不同网站 / 80http、443httpslocation精准控制不同 URL 的处理逻辑Nginx 附加能力:静态资源托管、SSL 加密、缓存、压缩、限流防盗、动静分离、跨域等。
nginx初识
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法