Reputation: 153
I have the need to restrict access to certain files based on a query string parameter. I have an NGINX proxy server that sits in front of several other nginx web servers for load balancing. I have decided to enforce this query string parameter at the proxy server level in order to consolidate the configuration changes. This has added a bit of complexity to my setup because the request can not get trapped in the if as it needs to be sent upstream.
server {
listen 443;
# SSL Settings
server_name staging.xxxx.com;
location / {
proxy_pass http://webdav-cluster;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
}
# Unless the correct application token is passed in as a query parameter
# then deny access.
location ~ \/protected\/.*txt$ {
if ($arg_secret != abc) {
return 403;
}
proxy_pass http://webdav-cluster;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
}
}
Is there a way to store those 4 proxy lines in a location or variable and then internally redirect to that with one line? I may also use the same settings in different virtual hosts.
Upvotes: 13
Views: 2749
Reputation: 1756
I know this is an old question, but it's a top Google result and today I found two alternatives which do not require include
ing a separate file.
As a slightly simpler example, assume I want /route1
and /route2
to share the same proxy settings. I can either configure a regex location OR use the try_files
directive to force a fallback.
Source: https://serverfault.com/q/564127/805740
location ~ ^/(route1|route2) {
YOUR_PROXY_CONFIG_HERE
}
try_files
to force a fallback to a shared proxy configSource: https://serverfault.com/a/1100562/805740
location /route1 {
try_files "" @fallback
}
location /route2 {
try_files "" @fallback
}
location @fallback {
YOUR_PROXY_CONFIG_HERE
}
location /route1 {
try_files "" @fallback
}
location ~ ^/(route2|route3) {
try_files "" @fallback
}
location @fallback {
YOUR_PROXY_CONFIG_HERE
}
Upvotes: 0
Reputation: 15110
In this case you should use the include
directive: http://nginx.org/r/include
Upvotes: 4