-
-
Save jrom/1760790 to your computer and use it in GitHub Desktop.
if ($request_uri = /) { | |
set $test A; | |
} | |
if ($host ~* teambox.com) { | |
set $test "${test}B"; | |
} | |
if ($http_cookie !~* "auth_token") { | |
set $test "${test}C"; | |
} | |
if ($test = ABC) { | |
proxy_pass http://teambox-cms.heroku.com; | |
break; | |
} |
Thank you!
What versions of nginx does this work on? I can't get it working on 1.4.7
Why not just use map instead?
👍
Awesome!
Thanks, worked great.
I had some problems with it if it was within a location statement, taking it out and putting it in the server statement helped fix it.
Thanks !
Wow
Seems, you are not familiar with map, or do not like it. More short and elegant:
":" is used just like delimiter, you can use any other symbol not used in checked variables.
map "$request_uri:$host:$http_cookie" $test {
default 0;
"/:teambox.com:auth_token" 1;
}
server {
if ( $test ) {
proxy_pass http://teambox-cms.heroku.com;
break;
}
}
Só precisava disso pra dar nó em pingo d agua, thks
This will help me migrate a .htaccess based referer filter to nginx; my first try caused redirect loops in Firefox but Chrome displayed the error page after giving up on the loop. I set A for the referer check, and B for the check that it isn't trying to load the error page, then I check to see if the combined variable is A, as the B check is a "not" check.
I will test the filter out tomorrow, and if it works I will be able to migrate away from Apache handling my .php files.
Edit: Worked like a charm! Thanks for the tutorial!
Thanks !
You are a god :D
Great solution! For those suggestion a map, that is great if condition variable remains the same for all checks. If not, this solution trumps map.
+1
Thanks for this but I prefer to use @songsfromthewood map solution.
@songsfromthewood's example works great, with the exception of empty strings (like referer or useragent). But for blank referer and useragent, it's still pretty good :D
for those who haven't read this yet: If Is Evil
Hi All,
I am checking the header "x-token" present from the incoming request if not i have to send 403 in nginx below is my code
if ($http_x-token = ""){
return 403;
break;
}
proxy_pass http://127.0.0.1:1234;
But here "-" is the problem so how do i achieve this. if i pass the header as "xtoken" its working as expected
Could you please any one guide on this query.
Regards,
Naveen
nkn786, try $http_x_token.
You truly are the king of kings
awesome ! 666666
Nice. Thanks
Awesome man, thanks.
Seems, you are not familiar with map, or do not like it. More short and elegant:
":" is used just like delimiter, you can use any other symbol not used in checked variables.
map "$request_uri:$host:$http_cookie" $test { default 0; "/:teambox.com:auth_token" 1; } server { if ( $test ) { proxy_pass http://teambox-cms.heroku.com; break; } }
@songsfromthewood Actually no, yours does not match "test.teambox.com" while the original post does.
this is awesome!
Need explanation.... what actually this does:
if ($host ~* teambox.com) {
set
}
Does it takes "this".teambox.com or what? Thanks!
How to write this condition?
if ($host *.teambox.com) {
set $subdomain_name = ?;
}
Thanks!
Awesome!!!! Thanks!
If somebody needs an explanation what the code does is it sequentially appends different letters to one variable.
When all the letters are present that means that all the required conditions have been met.
This works great!
I recommend initializing the $test
variable outside and above all the conditional statements to avoid endless using uninitialized "test" variable
errors piling up in /var/log/nginx/error.log
as follows:
set $test "";
Thank you so much, this hack is awesome! 🤘