• Minio + Nginx 实现静态资源对外访问


    Minio + Nginx 实现静态资源对外访问

    背景:

            公司交付项目,文件服务java + minio实现文件基本功能。其中包含文件上传与下载与在线预览,由于文件下载功能实现方式问题(web直接调用文件预览接口,有minio直接返回可预览路径二次请求实现文件下载)。

            在公司局域网内没有问题,到客户环境文件无法下载,客户环境文件上传直接同网段局域网内部通讯没有问题,但是下载请求为公网,又不想打破网关内内网通讯,静态低敏访问直接开启对外访问权限的业务逻辑,所以,解决问题的方式只有一个,就是下载功能返回的路径必须是公网可以正常访问。

    剖析问题:

            代理实现,配合dmz区  (这里用的是nginx)代理直接将请求转发一下就可以了,思路是对的,但是请求穿透到minio服务器后访问被拒绝,验证密钥失败。

            密钥?校验失败?要解决这个问题就要先了解minio加密与校验的环节,没有必要非的知道minio的加密手段,校验失败肯定就是在校验前,提供的校验参数与加密时不一致,问题出在哪里了呢?在转发前是没有问题的啊,转发之后可以访问了,但是校验不通过,那一定就是转发环节出了问题,结合以上分析,去minio找了官方文档,按照官方配置还是不可以。

            肯定是参与加密的参数不满足呀!

    解决问题:

    • minio(yaml.xml)配置
    1. minio:
    2. oss:
    3. policyExpire: 300
    4. accessKeyId: 123456
    5. accessKeySecret: 123456
    6. endpoint: http://127.0.0.1:9199
    7. # 可以公网访问的域名,将minio返回的 ip 和端口直接替换就可以访问了
    8. web_endpoint: https://demo.chenyb-sec.com
    9. bucketName: oss-chenyb
    10. # km 最大支持 5g
    11. maxSize: 50
    • nginx配置
    1. server {
    2. listen 80;
    3. listen 443 ssl;
    4. server_name https://demo.chenyb-sec.com;
    5. #选配 优化属性
    6. ignore_invalid_headers off;
    7. client_max_body_size 1000m;
    8. proxy_buffering off;
    9. #必须 防止请求头丢失
    10. underscores_in_headers on;
    11. #选配 优化属性
    12. proxy_set_header Host $http_host;
    13. proxy_set_header X-Real-IP $remote_addr;
    14. proxy_set_header X-Scheme $scheme;
    15. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    16. add_header Pragma "no-cache";
    17. #选配 优化属性
    18. # 针对缺失"X-Content-Type-Options"头漏洞整改建议
    19. add_header X-Content-Type-Options nosniff; #影响demo服务登出等功能
    20. # 针对缺失"X-XSS-Protection"头漏洞整改建议
    21. add_header X-XSS-Protection "1; mode=block";
    22. # 针对点击劫持:X-Frame-Options头缺失漏洞的整改建议
    23. #add_header X-Frame-Options "SAMEORIGIN";
    24. # 针对缺少HTTP Strict-Transport-Security头漏洞的整改建议
    25. add_header Strict-Transport-Security "max-age=31536000;includeSubdomains;";
    26. #必须 minio 转发路由
    27. # 路由与minio.oss.bucketName 保持一致
    28. location /oss-chenyb/ {
    29. # minio.oss.endpoint 参数,参与签名(服务直连地址)
    30. proxy_set_header X-Real-IP 127.0.0.1:9199;
    31. # minio.oss.endpoint 参数,参与签名(服务直连地址)
    32. proxy_set_header Host 127.0.0.1:9199;
    33. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    34. proxy_set_header X-Forwarded-Proto $scheme;
    35. proxy_connect_timeout 300;
    36. # Default is HTTP/1, keepalive is only enabled in HTTP/1.1
    37. proxy_http_version 1.1;
    38. proxy_set_header Connection "";
    39. chunked_transfer_encoding off;
    40. # minio 服务直连地址
    41. proxy_pass http://127.0.0.1:9199;
    42. }
    • 注意两个配置文件呼应关系即可
      • web_endpoint:可以请求到nginx的域名
      • bucketName:最好是nginx路由规则
      • endpoint:能请求到minio的通讯地址,与proxy_pass、proxy_set_header Host、proxy_set_header X-Real-IP保持一致,因为要参与校验
  • 相关阅读:
    Vue3中动态渲染菜单栏(TS)
    C语言实现通讯录
    1年管理,涨薪70%,只因做好了这件常被忽略的事
    redis如何实现缓存预热
    在服务器导出kafka topic数据
    与所有 ARM 工具、软件兼容?韦斯佰瑞这款MCU内核值得关注!
    区块链安全应用------压力测试
    【十天系统学习】SMOKE多模式排放清单处理技术及EDGAR/MEIC清单制作方法以及 CMAQ空气质量模式运行
    python:OderedDict函数
    【计算机图形学基础】阴影映射
  • 原文地址:https://blog.csdn.net/scdncby/article/details/125501631