Nginx try_files不能用于默认的index.html

时间:2018-02-05 08:38:56

标签: nginx devops nginx-location nginx-reverse-proxy

我正在使用nginx的$ geoip_country_code模块来根据IP重定向用户。我的配置代码如下所示 -

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)$ { }
  }

想法是根据我已经本地化的国家/地区重定向用户,否则用户会转到默认索引,即其他人的通用。它在我的国家/地区的浏览器中打开时非常有效但是当从其他国家/地区打开时,它会显示内部服务器错误它不会进入默认索引页面。

有人能指出我做错了什么吗?

1 个答案:

答案 0 :(得分:0)

try_files语句的最后一个元素是默认操作,它是URI或响应代码。 /index.html开始搜索新的location来处理请求,并在开始时结束,因此您有一个重定向循环。

您可以通过将/index.html改为文件来解决问题。例如:

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

=404永远不会被操作,因为/index.html始终存在。

就个人而言,我会使用通用解决方案:

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

有关详情,请参阅this document