• nginx 配置location 最好使用最小范围匹配


    一个实际的案例,系统使用了nginx 进行minio 静态资源的proxy,同时基于nginx 的rewrite
    比如http://<domain>/apps/<s3_bucket> ,实际代理的是minio 的http://minioip:port/s3_bucket
    但是因为nginx 同时也配置了一个规则(正则的),同时正则的配置有点范围过大,所以造成请求
    资源访问不正确

    参考nginx 配置

    • nginx proxy minio
     
    location /apps/ {
               if_modified_since off;
               etag off;
               add_header Cache-Control no-store;
               add_header Cache-Control must-revalidate;
               default_type text/html;
               index index.html index.htm;
               rewrite ^/apps/([a-z-A-Z0-9]+)$ /apps/$1/ permanent;
               rewrite ^/apps/([a-z-A-Z0-9]+)/$ /$1/index.html break;
               rewrite ^/apps/(.*) /$1 break;
               proxy_set_header Host $http_host;
               proxy_set_header X-Forwarded-For $remote_addr;
               client_body_buffer_size 10M;
               client_max_body_size 10G;
               proxy_buffers 1024 4k;
               proxy_read_timeout 300;
               proxy_next_upstream error timeout http_404;
               proxy_pass http://minio_prod;
    }
    • 系统原有包含的一个nginx location 配置
      因为有一个系统需要配置匹配规则,同时就写了一个正则
     
    location ~* /static/ {
                proxy_pass http://127.0.0.1:8082;
                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-Host $server_name;
    }
    • minio 数据桶的一个目录

    问题说明

    因为正则匹配优先比不带修饰符的高,所以资源就走偏了,造成本该请求s3 桶数据的到了以前配置的地方了,页面显示就出现
    问题了

    解决方法

    解决方法很多,对于正则匹配添加前缀开头匹配,参考配置

     
    location ~* ^/static/ {
                proxy_pass http://127.0.0.1:8082;
                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-Host $server_name;
    }

    说明

    对于nginx 的配置还是应该仔细思考使用那种配置模式,同时使用使用最小原则,好处很明显
    解决问题的同时,不会造成复杂的匹配扩大,造成业务问题,而且还有可能会造成安全问题(比如静态的root
    不小心暴露了tls 证书,暴露的源码)

  • 相关阅读:
    C# 提取方法重构
    防抖和节流
    利用Object.keys快速循环对象
    MVVM深入理解---小白速会
    异步组件使用详解
    动态组件使用详解
    Vue.$nextTick详解
    深入理解vue .sync修饰符
    vue计算属性---快速上手
    grid-layout 网格布局--快速上手
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/14189063.html
Copyright © 2020-2023  润新知