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 证书,暴露的源码)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· spring官宣接入deepseek,真的太香了~
2019-12-25 使用pprof 分析perf 数据
2019-12-25 bazel 安装
2019-12-25 chroot 试用alpinelinux安装软件包的问题
2019-12-25 使用chroot 试用alpinelinux
2018-12-25 debezium mongodb 集成测试
2018-12-25 debezium sql server 集成
2018-12-25 ipfs cluster 模式部署使用(docker-compose 环境运行)