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 + 限流 保证安全
相关推荐
weixin_704266051 小时前
Nginx 反向代理 + 6 种负载均衡策略
运维·nginx
fish_xk2 小时前
Linux开方工具
linux·运维·服务器
techdashen4 小时前
Pingora 的开源——Cloudflare 基于 Rust 搭建的用于替换Nginx的网络框架
nginx·rust·开源
中科三方4 小时前
输入域名后无法访问?教你快速区分域名解析问题与服务器问题
运维·服务器
internet Boy4 小时前
桌面运维面试常见问题及标准答案(完整版)
运维
liuluyang5305 小时前
linux kernel CONFIG_KCMP解析
linux·运维·服务器
Koma_zhe5 小时前
【Ansible开源自动化运维工具】别再手动装监控了,Ansible能让上百台机器同时搞定Node Exporter(1)
运维·开源·ansible
tsyjjOvO7 小时前
Nginx 从入门到实践:反向代理、负载均衡与动静分离
nginx·负载均衡