Nginx路由转发案例实战

文章目录

问题背景

本地系统同步了第三方的图片资源,例如 https://4.x.x.9:8001/hsdrone1/file/e8c785fc-5703-4f70-a43c-268f48f3efa0/a.jpeg,由于这些链接使用第三方的IP和端口,并且采用HTTPS协议,浏览器经常弹出SSL证书认证警告,严重影响用户体验。

解决方案

步骤一:修改图片地址策略

将数据库中存储的第三方图片绝对地址改为相对地址:

  1. 在数据表中添加一个字段用于存储相对地址
  2. 或者在查询时动态返回相对地址
  3. 前端获取相对地址后,拼接成本地系统的完整访问地址,如 https://10.x.x.12:3100/hsdrone1/file/a.jpeg

注意:此时直接访问仍会返回404错误,因为缺少转发配置。

步骤二:配置Nginx反向代理

针对具有规律性路径的第三方资源(如以 /hsdrone1 开头的地址),通过Nginx配置实现请求转发。

从而实现将https://4.x.x.9:8001/hsdrone1/file/e8c785fc-5703-4f70-a43c-268f48f3efa0/a.jpeg转发到https://10.x.x.12:3100/hsdrone1/file/a.jpeg

以下是完整的Nginx配置示例:

nginx 复制代码
server {
    listen       8001 ssl;
    server_name  localhost;

    # SSL证书配置(因服务启用HTTPS,需配置证书)
    ssl_certificate /home/xx/nginxssl/server.crt;  # 证书文件路径
    ssl_certificate_key  /home/xx/nginxssl/server.key;  # 私钥文件路径

    # SSL协议和加密算法配置
    ssl_protocols TLSv1.2 TLSv1.3;                    # 支持的协议版本
    ssl_ciphers HIGH:!aNULL:!MD5;                     # 加密套件
    ssl_prefer_server_ciphers on;                     # 优先使用服务器端的加密套件

    # 日志和上传限制配置
    #access_log  /var/log/nginx/host.access.log  main;
    client_max_body_size 100M;

    # 主应用代理
    location / {
        proxy_pass http://127.0.0.1:31001;
        proxy_hide_header X-Frame-Options;
        add_header X-Frame-Options ALLOWALL; 
    }
    
    # 启用GZIP压缩提升性能
    gzip on;
    gzip_buffers 32 4K;
    gzip_comp_level 6;
    gzip_min_length 100;
    gzip_types application/javascript text/css text/xml application/json image/svg+xml;
    gzip_disable "MSIE [1-6]\.";
    gzip_vary on;
    
  

    # 第三方文件路由转发(核心配置)
    location ~ ^/hsdrone1 {
        proxy_pass https://10.x.x.12:3100;
        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_set_header X-Forwarded-Proto $scheme;
    }


}

此配置可实现将 https://10.x.x.12:3100/hsdrone1/file/a.jpeg 的请求转发至原始第三方地址,同时避免浏览器SSL证书警告。

证书生成方法

如需创建自签名证书,可使用以下命令:

bash 复制代码
# 生成私钥
openssl genrsa -out server.key 2048

# 生成证书签名请求
openssl req -new -key server.key -out server.csr

# 生成自签名证书
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

证书配置要点

  • 将证书文件放置于指定目录(如 /home/zhfyc/nginxssl/
  • 确保Nginx进程对证书文件有读取权限
  • 定期更新证书以确保安全性

Nginx常用管理命令

配置文件位置

plain 复制代码
/etc/nginx/nginx.conf                # 默认主配置文件
include /etc/nginx/conf.d/*.conf;    # 子配置文件目录

常用操作命令

bash 复制代码
# 检查配置文件有效性
nginx -t

# 重新加载配置(无需重启服务)
nginx -s reload
systemctl reload nginx

# 查看服务状态
systemctl status nginx

# 启动/停止/重启服务
systemctl start nginx
systemctl stop nginx
systemctl restart nginx

# 查找配置文件实际位置
sudo nginx -t 2>&1 | grep -E "file|directory"

故障排查

常见问题及解决方案:

  • 404错误:检查location匹配规则和proxy_pass目标地址
  • SSL错误:确认证书路径正确且证书未过期
  • 跨域问题:适当配置CORS相关header
  • 性能问题:检查gzip配置和连接超时设置

通过以上配置,可以有效解决第三方HTTPS资源导致的浏览器安全警告问题,提升用户体验。

相关推荐
treacle田6 分钟前
达梦数据库-Linux DM主备集群动态增加节点-记录总结
linux·运维·数据库·达梦主备集群动态扩展
FIT2CLOUD飞致云6 分钟前
1Panel AI一体机(GB10版)推出MiniMax H3本地视频生成方案
运维·ai·开源·1panel·ai视频·运维面板
旧梦952718 分钟前
Java 捕获多个异常:从基础语法到最佳实践
java·开发语言
ARM|X86+FPGA工业主板厂家20 分钟前
基于Jetson TX2的矿用巡检机器人
linux·运维·机器人
2601_9621896022 分钟前
【SpringBoot】使用IDEA创建SpringBoot项目
java·spring boot·intellij-idea
步行cgn23 分钟前
Spring Boot 启动报错:MissingServletWebServerFactoryBean 的排查与解决
java·spring boot·后端
XLYcmy23 分钟前
HTML/CSS/JS 基础与 Vue 技术栈深度解析
java·前端·css·html·vue3·vue2·api
杨云龙UP27 分钟前
Oracle 19c RMAN历史备份清理失败:CONTROL_FILE_RECORD_KEEP_TIME 问题排查与整改实战
linux·运维·网络·数据库·oracle·rac
~木雨34 分钟前
String 底层原理与常量池全解析:byte []+coder、intern 陷阱、substring 内存泄漏,一篇讲透
java·jvm·内存优化·string·字符串常量池
新知图书42 分钟前
12.3 智能体中Skill的约束与自进化实战
java·前端·数据库