搭建 Nginx 及常用功能使用(反向代理、负载均衡、URL重定向、HTTPS配置)
Nginx 配置与功能开发全流程教程
本教程涵盖 Nginx 的安装、测试页面准备、反向代理、负载均衡、URL 重定向等核心功能,最后介绍 HTTPS 配置与 Wireshark 抓包分析,适合开发环境或生产环境基础搭建。
一、环境准备
1. 系统要求
- 操作系统:Ubuntu 22.04 / CentOS 7(其他 Linux 发行版类似)
- 工具:
curl、vim(或nano)、python3(用于测试后端服务) - 域名:假设使用
example.com(测试可用本地hosts文件模拟)
2. 安装 Nginx
Ubuntu/Debian
sudo systemctl start nginx
sudo systemctl enable nginx

验证安装
curl -I http://localhost
# 返回状态码 200 表示成功

二、测试
1. 创建测试页面
sudo mkdir -p /var/www/html
sudo echo "<h1>Hello, Nginx!</h1>" > /var/www/html/index.html

2. 模拟客户端访问
本地 hosts 文件修改(测试域名)
- Linux/Mac:编辑
/etc/hosts - Windows:编辑
C:\Windows\System32\drivers\etc\hosts
127.0.0.1 example.com

使用 curl 测试 HTTP
curl -I http://example.com
# 返回状态码 200

浏览器访问
访问 http://example.com,应显示 Hello, Nginx!。

wireshark抓包流量情况


三、Nginx 高级功能配置
1. 反向代理(转发到后端)
假设后端服务运行在 http://localhost:8080:
vim /etc/nginx/sites-enabled/default
# 处理 example.com 的请求(静态内容或直接响应)
server {
listen 80;
server_name example.com;
location / {
root /var/www/html; # 假设存放静态文件
index index.html;
}
}
# 处理 api.example.com 的反向代理
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
重启nginx服务
systemctl restart nginx.service

创建测试后端服务
# 切换到合适的目录,这里切换到家目录,启动一个简单的 Python 后端(测试用)
cd ~
# 创建backend.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello from Backend!'
if __name__ == '__main__':
app.run(port=8080)
python3 backend.py &

使用 curl 测试反向代理
curl http://api.example.com

需要修改hosts文件,因为 api.example.com 是一个虚拟域名,需要通过本地 hosts 文件手动映射到 127.0.0.1


wireshark抓包流量情况

2. 负载均衡(多后端实例)
从这里开始继续,还没操作
假设有两个后端服务实例:
upstream backend_servers {
server localhost:8080;
server localhost:8081; # 假设另一个实例
}
server {
listen 80;
server_name lb.example.com;
location / {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
}
}

测试负载均衡
# 多次访问负载均衡器
curl http://lb.example.com # 轮询访问两个后端


wireshark抓包流量情况

3. URL 重定向
示例 1:HTTP 到 HTTPS 重定向(后续配置 HTTPS 后生效)
暂不配置,后续补充。
示例 2:路径重定向
server {
listen 80;
server_name example.com;
location /old {
return 301 /new; # 重定向 /old 到 /new
}
location /new {
root /var/www/html;
try_files $uri $uri/ =404;
}
}
测试重定向
curl -I http://example.com/old
# 返回 301 重定向到 /new

wireshark抓包流量情况


四、HTTPS 配置(移至最后)
1. 生成 SSL 证书(测试环境)
使用 openssl 生成自签名证书(生产环境需使用 Let’s Encrypt 等可信 CA):
sudo mkdir /etc/nginx/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/nginx/ssl/example.com.key \
-out /etc/nginx/ssl/example.com.crt \
-subj "/CN=example.com"



2. 配置 HTTPS
编辑 Nginx 配置文件(通常位于 /etc/nginx/sites-available/default 或自定义配置):
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri; # HTTP 重定向到 HTTPS
}
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
ssl_protocols TLSv1.2 TLSv1.3; # 禁用不安全的协议
ssl_ciphers HIGH:!aNULL:!MD5; # 配置强加密套件
root /var/www/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
关键点说明
- HTTP 重定向到 HTTPS:通过
return 301实现。 - SSL 配置:指定证书路径、协议版本和加密套件。
- 静态文件服务:
root和index指令定义网站根目录和默认文件。
3. 测试并重启 Nginx
sudo nginx -t # 测试配置语法
sudo systemctl restart nginx

4. 测试 HTTPS
HTTPS 流量会显示为 TLS 或 SSL 协议,HTTPS 流量内容加密,无法直接查看明文
curl -k https://example.com
# 返回状态码 200 和证书信息
使用 curl -k https://example.com 命令时,-k 或 --insecure 选项会跳过对 SSL 证书的合法性验证。这意味着即使服务器使用的是自签名证书或证书不受信任,curl 也会继续建立连接并返回响应。


wireshark中,https访问的域名是可见的,路径是看不到的。搜索https的语法为tls,而不是https


。


五、完整开发体系总结
1. 配置文件结构
/etc/nginx/
├── nginx.conf # 主配置文件
├── sites-available/
│ └── default # 站点配置(启用后链接到 sites-enabled)
├── sites-enabled/
│ └── default -> ../sites-available/default # 符号链接
└── ssl/
├── example.com.crt # SSL 证书
└── example.com.key # SSL 私钥
2. 关键功能清单
| 功能 | 配置指令 | 用途 |
|---|---|---|
| 反向代理 | proxy_pass http://backend; | 将请求转发到后端服务 |
| 负载均衡 | upstream + proxy_pass | 分发请求到多个后端实例 |
| URL 重定向 | return 301 /new; | 将旧路径重定向到新路径 |
| HTTPS 服务 | listen 443 ssl; | 启用 HTTPS 加密通信 |
六、总结
- 功能开发:通过反向代理、负载均衡和 URL 重定向,提升系统扩展性和可靠性。
- HTTPS 配置:通过自签名证书或可信 CA 实现加密通信。
- Wireshark 抓包:观察 HTTPS 握手过程和加密流量,验证加密效果。
通过本文,你可以快速搭建一个支持反向代理、负载均衡和 HTTPS 的 Nginx 服务,并使用 Wireshark 分析流量加密情况。

3万+

被折叠的 条评论
为什么被折叠?



