Nginx入门进阶:从零到高手的实战指南

Nginx 入门与进阶玩法指南

一、什么是 Nginx?

Nginx(Engine X)是一个高性能的 HTTP 和反向代理服务器,同时也可以作为 IMAP/POP3/SMTP 邮件代理服务器。它最初由俄罗斯程序员 Igor Sysoev 开发,用于解决高并发下 Apache 性能瓶颈问题。如今,它已成为 Web 服务中最主流的服务器之一。

核心特点:

  • 异步事件驱动架构,适合处理大量并发连接。
  • 内存占用小,稳定性高。
  • 支持热部署、热加载配置。
  • 模块化设计,便于扩展。

二、Nginx 能做什么?

  1. 静态资源服务器:用于服务 HTML、CSS、JS、图片、音视频等文件。
  2. 反向代理服务器:将请求转发给后端应用服务,比如 Node.js、Java、Python 程序。
  3. 负载均衡器:支持多种策略(轮询、IP 哈希、最少连接等)。
  4. 缓存服务器:作为前端缓存层,大大减轻后端压力。
  5. HTTPS 网关:用作 TLS 终端代理,配合 Let's Encrypt 实现免费证书自动续期。
  6. API 网关/限流器:结合 Lua、OpenResty 实现接口限流、鉴权等功能。
  7. WebSocket 代理:支持持久连接转发,适用于实时通信场景。

三、如何快速开始使用 Nginx?

1. 安装

Ubuntu:
bash 复制代码
sudo apt update
sudo apt install nginx
macOS(通过 Homebrew):
bash 复制代码
brew install nginx

2. 启动与基本命令

bash 复制代码
# 启动 Nginx
sudo nginx

# 重载配置(热更新)
sudo nginx -s reload

# 停止 Nginx
sudo nginx -s stop

# 检查配置文件语法
nginx -t

默认配置文件路径:

  • Linux: /etc/nginx/nginx.conf
  • macOS (Homebrew): /opt/homebrew/etc/nginx/nginx.conf

四、实用玩法案例

1. 将本地应用暴露给公网:静态站点部署

nginx 复制代码
server {
    listen 80;
    server_name mydomain.com;

    location / {
        root /var/www/html;
        index index.html;
    }
}

2. 反向代理 Node.js 后端

nginx 复制代码
server {
    listen 80;
    server_name mydomain.com;

    location /api/ {
        proxy_pass http://localhost:3000/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

3. 配置 HTTPS

nginx 复制代码
server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/ssl/certs/example.crt;
    ssl_certificate_key /etc/ssl/private/example.key;

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

可以使用 Let's Encrypt + Certbot 自动申请和续期 HTTPS 证书。


五、进阶玩法

1. 负载均衡配置

nginx 复制代码
upstream backend {
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
}

server {
    listen 80;
    location / {
        proxy_pass http://backend;
    }
}

支持多种策略:

  • round-robin(默认)
  • least_conn(最少连接)
  • ip_hash(IP 绑定)

2. 访问控制

nginx 复制代码
location /admin {
    allow 192.168.1.0/24;
    deny all;
}

3. 限流控制

nginx 复制代码
http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

    server {
        location /api/ {
            limit_req zone=one burst=5 nodelay;
        }
    }
}

六、结合 OpenResty 实现更强功能

Nginx + Lua(OpenResty) 提供超强的可编程能力,可用于:

  • 接口限流
  • 动态路由
  • A/B 测试
  • 用户鉴权
  • 日志上报
lua 复制代码
location /api/check_token {
    content_by_lua_block {
        local token = ngx.var.arg_token
        if not token or token ~= "123456" then
            ngx.status = 403
            ngx.say("Forbidden")
            return
        end
        ngx.say("OK")
    }
}

七、调试和性能优化建议

  • 使用 access_logerror_log 调试问题。
  • 配置 worker_processes auto; 合理利用 CPU。
  • 开启缓存、Gzip 提升性能。
  • 调整 client_max_body_size 限制上传大小。

八、Nginx 玩出花的建议方向

  • 本地搭建 CDN 服务(结合缓存和负载均衡)
  • 构建 HTTPS 加密的 WebSocket 通信代理
  • 写 Lua 插件完成防爬虫、防刷接口逻辑
  • 将 Nginx 容器化部署,实现微服务网关(结合 Docker/K8s)
  • Nginx + Prometheus + Grafana 实现监控面板
相关推荐
一心0924 小时前
ubuntu 20.04.6 sudo 源码包在线升级到1.9.17p1
运维·ubuntu·sudo·漏洞升级
好好学习啊天天向上4 小时前
世上最全:ubuntu 上及天河超算上源码编译llvm遇到的坑,cmake,ninja完整过程
linux·运维·ubuntu·自动性能优化
你想考研啊4 小时前
三、jenkins使用tomcat部署项目
运维·tomcat·jenkins
代码老y5 小时前
Docker:容器化技术的基石与实践指南
运维·docker·容器
典学长编程5 小时前
Linux操作系统从入门到精通!第二天(命令行)
linux·运维·chrome
DuelCode6 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
你想考研啊8 小时前
四、jenkins自动构建和设置邮箱
运维·jenkins
Code blocks8 小时前
使用Jenkins完成springboot项目快速更新
java·运维·spring boot·后端·jenkins
饥饿的半导体9 小时前
Linux快速入门
linux·运维
还是奇怪11 小时前
Linux - 安全排查 2
linux·运维·安全