Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How do you use redis with password? #60

Open
onnimonni opened this issue Oct 20, 2016 · 18 comments
Open

How do you use redis with password? #60

onnimonni opened this issue Oct 20, 2016 · 18 comments

Comments

@onnimonni
Copy link
Contributor

Hey!

I would really like to use this module but the redis in my environment needs to have authentication turned on.

I tried to solve this by using content_by_lua but don't know how to.

This is what I would want to do but nginx redis or redis2 modules don't support redis passwords:

location /api {
     default_type text/css;

     set $key $uri;
     set_escape_uri $escaped_key $key;

     srcache_fetch GET /redis $key;
     srcache_store PUT /redis2 key=$escaped_key&exptime=120;

     # fastcgi_pass/proxy_pass/drizzle_pass/postgres_pass/echo/etc
 }

 location = /redis {
     internal;

     set_md5 $redis_key $args;
     redis_pass 127.0.0.1:6379;
 }

 location = /redis2 {
     internal;

     set_unescape_uri $exptime $arg_exptime;
     set_unescape_uri $key $arg_key;
     set_md5 $key;

     redis2_query set $key $echo_request_body;
     redis2_query expire $key $exptime;
     redis2_pass 127.0.0.1:6379;
 }
@agentzh
Copy link
Member

agentzh commented Oct 20, 2016

@onnimonni Both ngx_redis and ngx_redis2 should support passwords. Please read their official documentation more carefully.

@onnimonni
Copy link
Contributor Author

Thanks for your help!

I think I have read through them a hundred times already, but what I missed was the following redis command: http://redis.io/commands/AUTH.

I will try this soon but does the authentication work like this?

location = /redis2 {
     internal;

     set_unescape_uri $exptime $arg_exptime;
     set_unescape_uri $key $arg_key;
     set_md5 $key;

     redis2_query auth $password; <----- Use the password here
     redis2_query set $key $echo_request_body;
     redis2_query expire $key $exptime;
     redis2_pass 127.0.0.1:6379;
 }

I think I missed the following one?

redis2_query
Multiple instances of this directive are allowed in a single location and these queries will be pipelined.
https://github.com/openresty/redis2-nginx-module#redis2_query

Side topic:
If I use this with docker container enviroment variables is the preferred way to read the configuration like this:

set_by_lua $redis_host 'os.getenv("REDIS_HOST")';
set_by_lua $redis_pass 'os.getenv("REDIS_PASSWORD")';
set_by_lua $redis_port 'os.getenv("REDIS_PORT")';

Is there better ways than this?

Thanks in advance! Thanks for creating such useful tools :)!

@onnimonni
Copy link
Contributor Author

onnimonni commented Oct 20, 2016

And I did also read the ngx_redis readme: https://www.nginx.com/resources/wiki/modules/redis/#variables

And I can't really figure it out.

There's only mention of these two variables:

$redis_key - The value of the redis key.

$redis_db - The number of redis database (required for < 0.3.4).

But no mentioning about pipelines or arguments or anyway to provide the AUTH 😞.

@onnimonni
Copy link
Contributor Author

I managed to do this finally using this fork of the redis module: https://github.com/Yongke/ngx_http_redis-0.3.7

@agentzh
Copy link
Member

agentzh commented Oct 24, 2016

@onnimonni Oh, I didn't know the official ngx_redis module does not support auth variables. Will you ask the original author of ngx_redis to add support for it? Many thanks!

@onnimonni
Copy link
Contributor Author

Np! I'll report this to nginx.

@onnimonni
Copy link
Contributor Author

This can be tracked over here: https://trac.nginx.org/nginx/ticket/1120#ticket

@agentzh
Copy link
Member

agentzh commented Oct 24, 2016

I am afraid you are reporting to the wrong place. ngx_redis is not a standard nginx module but a 3rd party module. You should contact the author of that module instead of the official nginx team.

@onnimonni
Copy link
Contributor Author

You are right and I contacted the ngx_http_redis module author: [email protected].

I'm afraid that he's not actively developing this module anymore.

@agentzh
Copy link
Member

agentzh commented Oct 25, 2016

@onnimonni Hmm, seems like it's the time for OpenResty to fork it :)

@onnimonni
Copy link
Contributor Author

That would be excellent :)! Can you update this thread when that happens? Then I can again use the redis module bundled in openresty package.

@ksbomj
Copy link

ksbomj commented Jun 28, 2017

Hi guys! Is there any stable version that support redis auth?

@agentzh
Copy link
Member

agentzh commented Jun 28, 2017

@ksbomj It's been supported in stable releases of ngx_redis2 for 5+ years already. I wonder why you are asking.

@agentzh
Copy link
Member

agentzh commented Jun 28, 2017

@ksbomj OK, you are referring to ngx_redis. Well, you'll have to ask the author of ngx_redis instead. The ngx_srcache module is an old tech developed 5+ years ago. We're planning a much much better cache software based on OpenResty that can even serve CDN scale networks very well.

@onnimonni
Copy link
Contributor Author

@agentzh the author if ngx_redis didn't move forward with this after I notified him about the issue last year.

The problem is that the version I mentioned above: https://github.com/Yongke/ngx_http_redis-0.3.7 is based on a bit older version. (Newest one is 0.3.8).

Would you accept a new forked version of ngx_redis module as part of openresty suite if I use Yongke's patches and apply them for the original 0.3.8?

I would want to include it in here and I can ask nginx if they would want to use and link to that version instead of the current one.

@agentzh
Copy link
Member

agentzh commented Jun 29, 2017

@onnimonni OK, maybe we can create an openresty/redis-nginx-module repository as the fork of the original module.

@wyvern8
Copy link

wyvern8 commented Nov 16, 2017

Hi @agentzh , i'm looking at options for caching of upstream responses, and was considering this module. I saw your comment :

"The ngx_srcache module is an old tech developed 5+ years ago. We're planning a much much better cache software based on OpenResty that can even serve CDN scale networks very well."

Got any more info on this? My project is already built on OpenResty (which is great btw), and im just using the "X-Accel-Expires" header and caching in a second downstream OpenResty nginx at the moment. https://github.com/wyvern8/akamai-nginx

@agentzh
Copy link
Member

agentzh commented Nov 16, 2017

@wyvern8 That would become a commercial cache software provided by OpenResty Inc:

https://openresty.com/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants