In general try to avoid using the if directive too much.
https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/

For what you're trying to do, using a map would be the cleanest (and nicest) 
way I believe – someone can correct me if they want :-D

From: nginx <nginx-boun...@nginx.org<mailto:nginx-boun...@nginx.org>> on behalf 
of Ajay Garg <ajaygargn...@gmail.com<mailto:ajaygargn...@gmail.com>>
Reply-To: "nginx@nginx.org<mailto:nginx@nginx.org>" 
<nginx@nginx.org<mailto:nginx@nginx.org>>
Date: Sunday, 9 April 2017 at 17.37
To: "nginx@nginx.org<mailto:nginx@nginx.org>" 
<nginx@nginx.org<mailto:nginx@nginx.org>>
Subject: Re: URL-Rewriting not working

Hi Francis.

On Sun, Apr 9, 2017 at 8:47 PM, Francis Daly 
<fran...@daoine.org<mailto:fran...@daoine.org>> wrote:
On Sun, Apr 09, 2017 at 06:36:51PM +0530, Ajay Garg wrote:

Hi there,

> Got it Francis !!

Good news.

>                 location / {
>                                         auth_basic 'Restricted';
>                                         auth_basic_user_file
> /home/20da689b45c84f2b80bc84d651ed573f/.htpasswd;
>
>                                         if ($remote_user =
> "20da689b45c84f2b80bc84d651ed573f") {
>                                                 proxy_pass
> https://127.0.0.1:2000;
>                                         }
>
>                 }

When you come to add the second user, you will see that you want one
file with all the user/pass details.


Yes, I have already changed it to use just one file.
Upon that, would not just multiple sections of "if" checks for $remote_user 
suffice, something like ::

#########################################################################
server {
                listen 2000 ssl;

                ssl_certificate /etc/nginx/ssl/nginx.crt;
                ssl_certificate_key /etc/nginx/ssl/nginx.key;

                location / {
                                        auth_basic 'Restricted';
                                        auth_basic_user_file 
/etc/nginx/ssl/.htpasswd;

                                        if ($remote_user =  "user1") {
                                                proxy_pass 
https://127.0.0.1:2001<https://127.0.0.1:2000>;
                                        }

                                        if ($remote_user =  "user2") {
                                                proxy_pass 
https://127.0.0.1:2002<https://127.0.0.1:2000>;
                                        }

                                       # and so on ....

                }
         }
#########################################################################

Looking forward to hearing back from you.


Thanks and Regards,
Ajay




You will probably also see that it will be good to use a map
(http://nginx.org/r/map) to set a variable for the port to connect to,
based on $remote_user. Then your main config becomes just "proxy_pass
http://127.0.0.1:$per_user_port;";.

Note that I have not tested that, and expect that there may be some more
subtleties involved, such as perhaps requiring an explicit proxy_redirect
directive.

Note also that you will probably want to set a default value for
$per_user_port, and make sure that something sensible happens when that
value is used -- probably a response along the lines of "something isn't
fully set up on the server yet; please wait or let us know", so the user
is not confused.

Good luck with it,

        f
--
Francis Daly        fran...@daoine.org<mailto:fran...@daoine.org>
_______________________________________________
nginx mailing list
nginx@nginx.org<mailto:nginx@nginx.org>
http://mailman.nginx.org/mailman/listinfo/nginx



--
Regards,
Ajay
_______________________________________________
nginx mailing list
nginx@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx

Reply via email to