网上很多如标题的文章,为何我还要写呢???
网上一搜一大堆对我来说完全没用的文章,或者直接nginx官网复制过来,看得我贼无语。我的需求是校验参数是拼接到链接后面,而不是请求头的,网上大部分都是通过请求头来获取校验参数。
开启auth_request
下载nginx.tar.gz包,编译时把auth_request加入到nginx中,不用下载其它(1.5.4以上,默认包含auth_request,需要编译的时候开启),Windows版本可以直接用。
编译代码如下:
# 进入到解压文件内
./configure --prefix=你需要安装的目录 --with-http_auth_request_module && make && make install
配置校验参数
location ~^/api/image/(.*)$ {
# 转发URL地址
# minio服务器
auth_request /auth;
# 校验地址,并附上校验参数
set $auth_request_uri "http://192.168.40.14:8080/image/auth?$query_string";
error_page 401 403 500 = /authError.png;
auth_request_set $user $upstream_http_x_forwarded_user;
proxy_set_header X-Forwarded-User $user;
proxy_pass http://minio地址:9000/$1;
autoindex on;
}
location /auth {
# 内部调用
internal;
proxy_set_header Host $host;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_pass $auth_request_uri;
}
location /authError.png {
root html;
}
灵魂代码!灵魂代码!灵魂代码!
set $auth_request_uri "http://192.168.40.14:8080/image/auth?$query_string";
我的项目需求是对图片做权限校验,图片展示是直接在img标签里面展示的,因此,没法做请求头的设置,需要在链接后面携带校验信息。如:http://127.0.0.1/api/image/123.jpg?token=xxx
这时候校验信息,而网上大部分是没有这段代码的`set $auth_request_uri "http://192.168.40.14:8080/image/auth?$query_string";` 导致参数无法传递到校验地址(如果是设置请求头里的,可以获取到)。
校验成功就将127.0.0.1/api/image/123.jpg?token=xxx转发到 minio地址:9000/123.jpg。
校验失败后台设置响应状态401或403,将转发到authError.png这张图片上。