can't make nginx try_files to work with default_index.html

+2 votes

I want to redirect users based on their IP with %geoip_country_code module of nginx.

Configuration:

server {
      listen 80;
      gzip on;
      server_name example.com;
      root html/example;
      location / {
        index index.html;
        try_files /$geoip_country_code/index.html /index.html;
      }
      location ~* \.(gif|jpg|jpeg|png|js|css)$ { }
  }

I just want to redirect the users based on their country and it is working perfectly fine for my own country but if I try and open from a different country it shows internal server error. It's not going to the default index page. Am I doing soemthing wrong here?

Apr 6, 2018 in DevOps on Cloud by shubham
• 6,890 points
262 views

3 answers to this question.

0 votes

You can set a default action in try_files statement. It's the lst element in the try_files which could be either set to a response code or a URI. Here the /index.html starts looking for a new location to process the request and returns to the start, creating a redirection loop.

You can try making /index.html a file term:

try_files /$geoip_country_code/index.html /index.html =404;

Here the =404 is never tried because /index.html is always there.

Or you can try the generic sol.

try_files /$geoip_country_code$uri $uri /index.html;

Read through this document

answered Apr 6, 2018 by DareDev
• 6,810 points
0 votes

try_files tries the literal path you specify in relation to the defined root directive and sets the internal file pointer. If you use for instance try_files /app/cache/ $uri @fallback; with index index.php index.html; then it will test the paths in this order:

  1. $document_root/app/cache/index.php
  2. $document_root/app/cache/index.html
  3. $document_root$uri
answered Oct 18, 2018 by Kalgi
• 39,330 points
0 votes

Here's another convenient use of try_files, as unconditional redirects to named locations. The named locations are effectively acting as subroutines, saving duplication of code. When the first argument to try_files is "_" the fallback redirect is always taken.

    location =/wp-login.php { try_files _ @adminlock; }
    location ^~ /wp-admin/  { try_files _ @adminlock; }
    location @adminlock  {
            allow 544.23.310.198;
            deny all;
            try_files _ @backend;
            # wp-admin traffic is tiny so ok to send all reqs to backend 
    }
    location ~ \.php {  try_files _ @backend; }
    location / { try_files $uri $uri/ =403; }
    location @backend {
            fastcgi_pass 127.0.0.1:9000;
            include snippets/fastcgi-php.conf;
    }
answered Oct 18, 2018 by Hannah
• 14,090 points

Related Questions In DevOps on Cloud

0 votes
1 answer
0 votes
1 answer

How to deploy compiled elements Azure Web App with Appveyor?

Add the following BeforeBuild target to Web ...READ MORE

answered Jul 12, 2018 in DevOps on Cloud by Kalgi
• 2,620 points
31 views
0 votes
2 answers

Nginx Request redirection one container to another

try adding a / at the end ...READ MORE

answered Oct 25, 2018 in DevOps on Cloud by Haseeb
38 views
0 votes
1 answer
+13 votes
2 answers

Git management technique when there are multiple customers and need multiple customization?

Consider this - In 'extended' Git-Flow, (Git-Multi-Flow, ...READ MORE

answered Mar 26, 2018 in DevOps & Agile by DragonLord999
• 8,380 points
124 views
+4 votes
2 answers

unable to get subdomain of URL in NGINX

You just need to add .+ after ...READ MORE

answered Oct 11, 2018 in DevOps on Cloud by lina
• 8,100 points
566 views
+2 votes
2 answers