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; | |
} |
awesome.
Thank you so much, this hack is awesome!
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!
This actually isn't a bad solution if you have more descriptive flags than
A
,B
,C
.