Allow internal redirect to URI x, but deny external request for x?
J. Lewis Muir
jlmuir at imca-cat.org
Sat Aug 31 15:31:00 UTC 2019
On 08/30, Ian Hobson wrote:
> Hi Lewis,
>
> On 30/08/19 18:33, J. Lewis Muir wrote:
> > Hello!
> >
> > I'm using nginx 1.12.2 on RHEL 7, and I've got a FastCGI web app that
> > uses a deployment structure which uses an atomic symlink change for an
> > atomic app deploy, and I'm wishing to be able to do an internal redirect
> > in nginx to URL x, but deny an external request to the same URL x so
> > that I don't serve the same content at more than one URL. Is there a
> > way to do that?
> >
> You could place the different versions away from the root so they cannot be
> obtained from the web. Then they can be served by setting up a symlink to
> the desired version.
>
> This can be changed using "ln -sfn version/dir serving/root" and then
> restarting nginx to pick up the new version.
>
> By not using redirects, this method should be more efficient.
>
> Regards
>
> Ian
Hi, Ian!
Thank you for the suggestion! That's an interesting idea, and that
would avoid needing to exclude those URIs from being served and I think
avoid needing to change the document root and maybe some other things.
I toyed around with some designs and came up with four; I think I like
the third one best, but I'm not sure, maybe the fourth one is better.
= Design #1
Web app root:
/srv/www/app/my-app
current -> releases/1.0.2
releases
1.0.0
1.0.1
1.0.2
nginx server document root:
/srv/www/host/localhost
my-app -> /srv/www/app/my-app/current
Comments:
This tries to share apps between virtual hosts. It provides no way
for different virtual hosts to serve the same app but with the app
configured differently. Also, all virtual hosts have to serve the
same version of the app.
= Design #2
Web app root:
/srv/www/app/my-app
1.0.0
1.0.1
1.0.2
nginx server document root:
/srv/www/host/localhost
my-app -> /srv/www/app/my-app/1.0.2
Comments:
Similar to design #1 except now the virtual hosts can server different
versions of the app, but for a given version, the app is still
configured in the exact same way for all virtual hosts.
= Design #3
Web app root:
/srv/www/localhost/app
my-app
1.0.0
1.0.1
1.0.2
nginx server document root:
/srv/www/localhost/root
my-app -> ../app/my-app/1.0.2
Comments:
I like this because now each virtual host has its own set of deployed
apps, so the apps can be configured specifically for that particular
virtual host.
= Design #4
Web app root:
/srv/www/localhost/app
my-app
current -> releases/1.0.2
releases
1.0.0
1.0.1
1.0.2
nginx server document root:
/srv/www/localhost/root
my-app -> ../app/my-app/current
Comments:
Similar to design #3 but moves where the "current" symlink lives. So,
the deployed version of the app is controlled under the web app root
rather under the nginx server document root. Maybe this is a little
better because the nginx config reference to "my-app" can be sure to
be correct and can be changed if desired, and be unrelated to which
version of the app is deployed via the "current" symlink in the web
app root. The downside is two symlinks (i.e., a symlink to a symlink)
as opposed to one.
Regards,
Lewis
More information about the nginx
mailing list