Nginx从入门到精通

一、Nginx 基础认知

1.1 什么是 Nginx

Nginx(engine x)是一款开源、高性能、轻量级 的 HTTP Web 服务器、反向代理服务器、邮件(IMAP/POP3)代理服务器。采用异步非阻塞事件驱动模型(epoll) ,单机可轻松支撑 10 万 + 并发连接 ,内存占用极低,是互联网公司网关层标配

**国内大厂使用:**百度、京东、阿里、腾讯、新浪、网易、抖音、B 站等几乎全部在用。

核心能力:

  • 反向代理
  • 负载均衡
  • 动静分离
  • HTTPS 部署
  • 静态资源服务器
  • API 网关
  • 限流、缓存、黑白名单

1.2 正向代理 vs 反向代理(必懂)

1️⃣ 正向代理
  • 代理客户端
  • 帮助内网访问外网
  • 例:VPN、科学上网
  • 客户端知道目标服务器地址
  • 作用:突破访问限制、隐藏客户端 IP
2️⃣ 反向代理
  • 代理服务端
  • 对外统一入口,对内分发请求
  • 客户端不知道真实服务器地址
  • 作用:隐藏后端 IP、解耦架构、方便扩容、统一入口

一句话区分:正向代理:代理 "人";反向代理:代理 "服务器"。


二、Nginx 安装(Windows + Linux 完整版)

2.1 Linux 安装(CentOS 7/8 通用)

复制代码
# 1. 安装编译依赖
yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel

# 2. 下载稳定版
cd /usr/local
wget http://nginx.org/download/nginx-1.22.0.tar.gz

# 3. 解压
tar -zxvf nginx-1.22.0.tar.gz
cd nginx-1.22.0

# 4. 配置(指定安装目录)
./configure --prefix=/usr/local/nginx

# 5. 编译 + 安装
make && make install

2.2 Windows 安装

  1. 官网下载:http://nginx.org/en/download.html
  2. 解压到任意目录(无中文路径)
  3. 直接双击 nginx.exe 启动

三、Nginx 目录结构

复制代码
nginx/
├── conf/          # 配置文件目录
│   ├── nginx.conf # 主配置文件(核心)
│   └── mime.types # 媒体类型映射
├── html/          # 默认静态页面
├── logs/          # 日志(访问日志、错误日志)
└── sbin/          # 命令目录
    └── nginx      # 启动程序

四、Nginx 常用命令

复制代码
# 启动
./nginx

# 快速停止
./nginx -s stop

# 优雅停止(处理完请求再停)
./nginx -s quit

# 重新加载配置(不中断服务)
./nginx -s reload

# 检查配置语法是否正确
./nginx -t

# 查看版本
./nginx -v

五、Nginx 配置文件结构(核心)

Nginx 配置采用块级结构,层级清晰:

复制代码
# 1. 全局块:全局配置
user  nobody;
worker_processes  1;  # 工作进程数,建议 = CPU核心数

# 2. events块:连接配置
events {
    worker_connections  1024;  # 单个进程最大连接数
}

# 3. http块:Web服务配置
http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    # 4. server块:虚拟主机
    server {
        listen       80;          # 监听端口
        server_name  localhost;   # 域名

        # 5. location块:请求匹配规则
        location / {
            root   html;
            index  index.html index.htm;
        }
    }
}

5.1 核心配置解释

  • worker_processes:工作进程,提高并发
  • worker_connections:最大连接数
  • keepalive_timeout:长连接超时时间
  • server:一个域名对应一个 server
  • location:URL 路径匹配

六、反向代理(最常用实战)

6.1 作用

  • 统一访问入口
  • 隐藏后端真实 IP / 端口
  • 端口转发
  • 多服务域名区分

6.2 实战配置:代理后端 8080

复制代码
server {
    listen 80;
    server_name manage.powershop.com;

    # 转发请求到后端服务
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_connect_timeout 600;
        proxy_read_timeout 600;
    }
}

配置后直接访问:http://manage.powershop.com自动转发到 8080 端口。

七、负载均衡(集群必备)

7.1 作用

把请求均匀分发到多台后端服务器,避免单点压力过大,提高可用性。

7.2 配置步骤

复制代码
# 1. 定义后端服务集群
upstream tomcat_cluster {
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
    server 192.168.1.12:8080;
}

# 2. 代理到集群
server {
    listen 80;
    server_name www.powershop.com;

    location / {
        proxy_pass http://tomcat_cluster;
    }
}

7.3 6 种负载均衡策略

1.轮询(默认)

请求依次分配

2.weight 权重(推荐)

复制代码
7.3 6 种负载均衡策略
轮询(默认)请求依次分配
weight 权重(推荐)

3.ip_hash

同一个 IP 永远访问同一台机器,解决 Session 共享问题

4.east_conn

分发到连接数最少的机器

5.fair

按后端响应时间分配

6.url_hash

按 URL 哈希分配,适合缓存场景

八、动静分离(高性能关键)

8.1 原理

  • 静态资源(图片、JS、CSS、HTML、视频)由 Nginx 直接返回
  • 动态请求转发给 Tomcat/Java 服务极大提升访问速度,减轻后端压力。

8.2 配置

复制代码
location ~* \.(gif|jpg|png|jpeg|css|js|ico|mp3|mp4)$ {
    root /usr/local/nginx/static;  # 静态资源目录
    expires 7d;                    # 浏览器缓存7天
}

九、域名访问本地项目(企业标准方案)

9.1 步骤 1:修改 hosts 文件

Windows:C:\Windows\System32\drivers\etc\hosts

复制代码
127.0.0.1   manage.powershop.com
127.0.0.1   www.powershop.com
127.0.0.1   api.powershop.com

9.2 步骤 2:Nginx 监听 80 代理

复制代码
server {
    listen 80;
    server_name manage.powershop.com;

    location / {
        proxy_pass http://127.0.0.1:8080;
    }
}

9.3 访问

直接打开:http://manage.powershop.com无需端口,更优雅、更贴近生产环境。

十、Nginx 高阶配置

10.1 解决上传文件过大(413 错误)

复制代码
http {
    client_max_body_size 100m;
}

10.2 配置 HTTPS(SSL)

复制代码
server {
    listen 443 ssl;
    server_name www.powershop.com;

    ssl_certificate      cert.pem;
    ssl_certificate_key  cert.key;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
}

10.3 限流配置

复制代码
limit_req_zone $binary_remote_addr zone=myRateLimit:10m rate=10r/s;

server {
    location / {
        limit_req zone=myRateLimit;
    }
}

十一、常见问题与解决方案

1️⃣ Nginx 启动失败

  • 80 端口被占用(IIS、Apache、Tomcat)
  • 配置文件语法错误:执行 ./nginx -t 检查

2️⃣ 访问出现 502

  • 后端服务未启动
  • 防火墙拦截端口
  • proxy_pass 地址错误

3️⃣ 反向代理后获取不到真实 IP

复制代码
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

4️⃣ Vue/React 路由刷新 404

复制代码
location / {
    try_files $uri $uri/ /index.html;
}

十二、企业真实使用场景总结

Nginx 在企业里几乎是必用

  1. 反向代理 做统一入口
  2. 负载均衡 做集群
  3. 动静分离 提升速度
  4. 域名 + hosts 模拟生产环境
  5. HTTPS + 限流 保证安全
相关推荐
ping某19 小时前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工3 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智3 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_3 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉3 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
AC赳赳老秦3 天前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw
java_cj3 天前
深入kube-apiserver认证机制:从Bearer Token到mTLS的完整认证链解析
linux·运维·服务器·云原生·容器·kubernetes