搭建 Nginx 及常用功能使用(反向代理、负载均衡、URL重定向、HTTPS配置)

搭建 Nginx 及常用功能使用(反向代理、负载均衡、URL重定向、HTTPS配置)

Nginx 配置与功能开发全流程教程

本教程涵盖 Nginx 的安装、测试页面准备、反向代理、负载均衡、URL 重定向等核心功能,最后介绍 HTTPS 配置与 Wireshark 抓包分析,适合开发环境或生产环境基础搭建。


一、环境准备

1. 系统要求

  • 操作系统:Ubuntu 22.04 / CentOS 7(其他 Linux 发行版类似)
  • 工具curlvim(或 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 配置:指定证书路径、协议版本和加密套件。
  • 静态文件服务rootindex 指令定义网站根目录和默认文件。

3. 测试并重启 Nginx

sudo nginx -t  # 测试配置语法
sudo systemctl restart nginx

在这里插入图片描述

4. 测试 HTTPS

HTTPS 流量会显示为 TLSSSL 协议,HTTPS 流量内容加密,无法直接查看明文

curl -k https://example.com
# 返回状态码 200 和证书信息

使用 curl -k https://example.com 命令时,-k 或 --insecure 选项会跳过对 SSL 证书的合法性验证。这意味着即使服务器使用的是自签名证书或证书不受信任,curl 也会继续建立连接并返回响应。
在这里插入图片描述

在这里插入图片描述
wireshark中,https访问的域名是可见的,路径是看不到的。搜索https的语法为tls,而不是https
在这里插入图片描述
在这里插入图片描述
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/ab7499dc8d2f4204a0c832265b5d42c1.png

浏览器访问

访问 https://example.com,若使用自签名证书,浏览器会弹出安全警告(生产环境需替换为可信 CA 证书)。
在这里插入图片描述
在这里插入图片描述


五、完整开发体系总结

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 分析流量加密情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值