我正在为反向代理服务器编写Nginx conf文件。
我的一个位置受到安全链接模块(http_secure_link_module)的保护。
但我需要的是条件secure_link指令。
类似的东西:如果URI包含正确的令牌,我将添加一个Set-Cookie标头,如status = is_authorized,然后如果用户没有设置状态cookie,则再次保护链接。< / p>
location / {
if ($cookie_STATUS = "IS_AUTHORIZED") {
// if possible cancel secure_link for authorized (with cookie) users.
}
secure_link $arg_token;
secure_link_md5 "MD5_SECRET_PARAMETERS";
set $token $arg_token;
if ($secure_link = "") {
return 403;
}
if ($secure_link = "0") {
return 410;
}
# Set Cokie
add_header Set-Cookie STATUS=IS_AUTHORIZED;
add_header Set-Cookie TOKEN=$arg_token;
# Rewrite rules
include /usr/local/nginx/conf/rewrite_rules.conf;
# Set Cache
proxy_cache confluence_cache;
include /usr/local/nginx/conf/cache.conf;
# include /etc/nginx/shared/google_analytics.conf;
# Confluence Authentication
proxy_set_header Authorization "Basic BASE_64_HASH";
proxy_pass PROXY_URL;
}
任何人都可以帮助我实现这一目标吗?基本上我只想为那些没有将STATUS cookie设置为IS_AUTHORIZED的用户保护链接。或者仅在首页访问时使用secure_link。
谢谢你们。
答案 0 :(得分:1)
我已经设法使用配置文件中的另一个变量。
# if token is invalid nginx set $secure_link as empty string
if ($secure_link = "") {
set $is_allowed 'forbidden';
}
# if expiration time is gone nginx set $secure_link as 0
if ($secure_link = "0") {
set $is_allowed 'gone';
}
# if status cookie is set $is_allowed get 'authorized' as value
if ($cookie_STATUS = "IS_AUTHORIZED") {
set $is_allowed 'authorized';
}
# return 403 if $is_allowed = forbidden
if ($is_allowed = 'forbidden') {
return 403;
}
# return 410 if $is_allowed = gone
if ($is_allowed = 'gone') {
return 410;
}
然后它继续正常设置代理等等。