Nginx Reverse Proxy Lowercase URL and some exceptions to the URL
Francis Daly
francis at daoine.org
Sun Oct 6 11:14:35 UTC 2019
On Sat, Oct 05, 2019 at 12:44:30PM -0400, Alex Med wrote:
Hi there,
Good that you have a configuration that works for you.
If you want to spend more time on it, you may be able to remove some of
the duplication; but that is not necessary.
> I even included the proxy configuration parameters for the
> websocket connection to work.
Good stuff.
I would expect that the extra "websockets" configuration is not necessary
for non-websocket requests; so you might be able to add new location{}s
for just-websocket-requests -- but again, if what you have works, there
is no need to change anything.
> I noticed that the location =/ does not
> support OR so I had create two additional locations to catch paths without
> the end forward slash.
Correct. "location =" is for an exact string match.
> Is there a limit in the number of location that a
> configuration file should have?
"As many as it needs". If it needs more than your hardware can handle,
you need different hardware.
Which is just a way of saying: no, there is no practical limit that you
will meet.
> Thank YOU again for being in this forum and helping everyone!
You're welcome.
> location ~
> ^/(api|contentAsset|categoriesServlet|DotAjaxDirector|html|dwr|dA|JsonTags)/
> {
So - this location will match requests that start with "/X/" for each of
the eight strings in the pattern -- matching case-sensitively, because
you write "~" and not "~*".
> proxy_pass http://xxx.xx.xx.xxx:IIII;
That line says to proxy_pass these requests elsewhere.
> proxy_set_header Host $host;
> proxy_set_header X-Real-IP $remote_addr;
> proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
> proxy_connect_timeout 600;
> proxy_send_timeout 600;
> proxy_read_timeout 600;
> proxy_redirect off;
And those lines set some proxy-specific variables.
Because those same extra lines appear in many location{}s, you *could*
choose to put them at server{} level once, outside all location{}s, and
they would inherit into those location{}s, per the normal nginx method.
> location = /categoriesServlet {
This location will match exactly that request.
> proxy_pass http://xxx.xx.xx.xxx:IIII;
That line is needed.
> proxy_set_header Host $host;
> proxy_set_header X-Real-IP $remote_addr;
> proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
> proxy_connect_timeout 600;
> proxy_send_timeout 600;
> proxy_read_timeout 600;
> proxy_redirect off;
>
> ###
> ### ADD THIS FOR WEBSOCKET SUPPORT
> ###
>
> proxy_http_version 1.1;
> proxy_set_header Upgrade $http_upgrade;
> proxy_set_header Connection "Upgrade";
Those lines could be removed from here, if they were all set at server{}
level.
> location = /JSONTags {
> proxy_pass http://xxx.xx.xx.xxx:IIII;
Same story here -- exactly one request handled, this capitalisation only.
> location ~ [A-Z] {
This will match any request that includes a capital letter.
> return 301 $scheme://$host$my_uri_to_lowercase;
And will return a redirect to the matching lowercased-request.
> proxy_pass http://xxx.xx.xx.xxx:IIII;
This line (and the rest of them below) will not do anything, because the
"return" happens first.
> location / {
> proxy_pass http://xxx.xx.xx.xxx:IIII;
This location will match any other requests, and will proxy_pass them
to upstream.
Cheers,
f
--
Francis Daly francis at daoine.org
More information about the nginx
mailing list