blob: e0ff10252b1148bcf9ebb9e4da1b8337cfa1180a [file] [log] [blame]
{%- set site = salt['pillar.get']('nginx:server:site:'+site_name) %}
{%- if site.get('limit', {}).get('enabled', False) %}
# Create whitelist for ip addresses
geo $geo_{{ site_name }} {
default "enforce";
{%- for ip in site.limit.get('ip_whitelist', []) %}
{{ ip }} "whitelist";
{%- endfor %}
}
# First, map all whitelisted IP's to the request query
map $geo_{{ site_name }} $limit_{{ site_name }} {
default {{ site.limit.get('query', '$binary_remote_addr') }};
"whitelist" "";
}
limit_req_zone $limit_{{ site_name }} zone={{ site_name }}:{{ site.limit.get('size', '100m') }} rate={{ site.limit.get('rate', '30r/m') }};
{%- for subfilter_name, subfilter in site.limit.get('subfilters', {}).items() %}
map "${geo_{{ site_name }}}{{ subfilter.get('input', '$limit_{{ site_name }}') }}" $limit_{{ site_name }}_{{ subfilter_name }} {
default {% if subfilter.get('mode', 'whitelist') == "whitelist" %}"{{ subfilter.get('input', '$limit_{{ site_name }}') }}";{% else %}""{% endif %};
"~^whitelist" ""; # Allow previously whitelisted results.
{%- for match in subfilter.get('items', []) %}
"{{ match }}" {% if subfilter.get('mode', 'whitelist') == 'whitelist' %}""{% else %}"{{ subfilter.get('input', '$limit_{{ site_name }}') }}"{% endif %};
{%- endfor %}
}
limit_req_zone $limit_{{ site_name }}_{{ subfilter_name }} zone={{ site_name }}_{{ subfilter_name }}:{{ subfilter.get('size', site.limit.get('size', '100m')) }} rate={{ subfilter.get('rate', site.limit.get('rate', '30r/m')) }};
{%- endfor %}
{%- endif %}