Nginx 基本概念

Nginx(发音:Engine-X)是一个高性能的 HTTP 服务器和反向代理服务器,同时也可以用于负载均衡和静态资源服务。相比于传统的 Apache 服务器,Nginx 具有高并发、低内存占用和高扩展性的特点,因此被广泛用于 Web 服务器架构。

Nginx 的主要功能:

  1. 静态资源服务(如 HTML、CSS、JS、图片等)

  2. 反向代理(用于转发请求到后端服务器)

  3. 负载均衡(多台服务器均衡处理请求)

  4. HTTPS 安全加密(使用 SSL 证书)

  5. 动静分离(将静态资源与动态请求分离,提高性能)


1. Nginx 反向代理

什么是反向代理?

反向代理(Reverse Proxy)指的是 Nginx 作为一个中间服务器,接收客户端请求,并将请求转发给后端的真实服务器,然后再把后端的响应返回给客户端。

这样做的好处:

  • 隐藏后端服务器,提高安全性

  • 支持负载均衡,提升系统性能

  • 缓存静态资源,减少服务器压力

  • 跨域代理,解决前端跨域问题

示例:Nginx 配置反向代理

假设你的后端服务运行在 http://localhost:8080,你希望通过 http://yourdomain.com/api/ 访问后端:

1
2
3
4
5
6
7
8
9
10
11
12
server {
listen 80;
server_name yourdomain.com;

location /api/ {
proxy_pass http://localhost:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

说明:

  • proxy_pass http://localhost:8080/; 把所有 /api/ 的请求代理到 http://localhost:8080/

  • proxy_set_header 用于转发请求头信息


2. Nginx 负载均衡

什么是负载均衡?

负载均衡(Load Balancing)是指将多个后端服务器组合在一起,Nginx 根据一定规则把请求分配给不同服务器,提高系统的并发能力和稳定性。

Nginx 负载均衡示例

假设有三台后端服务器:

  • 192.168.1.10:8080

  • 192.168.1.11:8080

  • 192.168.1.12:8080

可以使用 Nginx 进行轮询(默认模式)的负载均衡:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
upstream backend_servers {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080;
}

server {
listen 80;
server_name yourdomain.com;

location /api/ {
proxy_pass http://backend_servers;
}
}

负载均衡策略

Nginx 提供了几种负载均衡方式:

  1. 轮询(默认):请求依次分配给后端服务器

  2. 权重(weight):给部分服务器更高的请求比例

1
2
3
4
5
upstream backend_servers {
server 192.168.1.10:8080 weight=3;
server 192.168.1.11:8080 weight=1;
}

  1. 最少连接(least_conn):优先选择当前连接数最少的服务器
1
2
3
4
5
6
upstream backend_servers {
least_conn;
server 192.168.1.10:8080;
server 192.168.1.11:8080;
}

  1. IP 哈希(ip_hash):同一个 IP 的请求始终分配给同一台服务器
1
2
3
4
5
6
upstream backend_servers {
ip_hash;
server 192.168.1.10:8080;
server 192.168.1.11:8080;
}


3. Nginx 配置 HTTPS(SSL 证书)

为什么要用 HTTPS?

HTTPS(HTTP + SSL/TLS)加密 HTTP 请求,提供:

  • 数据加密,防止被窃听

  • 数据完整性,防止中间人攻击

  • 身份验证,防止钓鱼网站

申请 SSL 证书

你可以使用 Let’s Encrypt 申请免费 SSL 证书,或者在阿里云、腾讯云购买。

Nginx 配置 HTTPS

假设你的证书文件是:

  • 证书文件:/etc/nginx/ssl/yourdomain.com.crt

  • 私钥文件:/etc/nginx/ssl/yourdomain.com.key

在 Nginx 配置中添加:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
server {
listen 443 ssl;
server_name yourdomain.com;

ssl_certificate /etc/nginx/ssl/yourdomain.com.crt;
ssl_certificate_key /etc/nginx/ssl/yourdomain.com.key;

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

# 80 端口自动跳转 HTTPS
server {
listen 80;
server_name yourdomain.com;
return 301 https://$host$request_uri;
}

说明

  • listen 443 ssl; 监听 HTTPS 端口

  • ssl_certificatessl_certificate_key 指定 SSL 证书

  • return 301 https://$host$request_uri; 让 HTTP 自动跳转到 HTTPS

功能 配置方式
反向代理 proxy_pass 转发请求到后端
负载均衡 upstream 结合 proxy_pass 进行流量分配
HTTPS 配置 ssl_certificatessl_certificate_key 启用 HTTPS