NGINX条件secure_link

时间:2017-06-27 21:09:28

标签: security nginx cookies hyperlink module

我正在为反向代理服务器编写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。

谢谢你们。

1 个答案:

答案 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;
    }

然后它继续正常设置代理等等。