NGINX locations matched not rules

j91ykkif  于 2023-03-29  发布在  Nginx
关注(0)|答案(1)|浏览(154)

目前,我有一个问题与NGINX.我喜欢提供一个静态的雨果生成的HTML网站.这个网站是多语言(en,de)和存储在不同的文件夹.

└─ /usr/share/nginx/html/my-app/
   ├─ en/
   └─ fr/

所以我设置了一个NGINX配置来处理不同位置的en和de内容请求。

http {
  ...
  server {
      listen                8080;
      server_name           localhost;
      index                 index.html;
      root                  /usr/share/nginx/html;

        location / {
            root           /usr/share/nginx/html/my-app/en
            index          index.html;
            try_files      $uri $uri/index.html =404;
        }

        location /de/ {
            root           /usr/share/nginx/html/my-app/de
            index          index.html;
            try_files      $uri $uri/index.html =404;
        }

        location /en-us/ {
            root           /usr/share/nginx/html/my-app/en
            index          index.html;
            try_files      $uri $uri/index.html =404;
        }
        ...
 }

此时NGINX只提供http://localhost:8080,因此只提供EN内容。
但如果我请求http://localhost:8080/dehttp://localhost:8080/de/总是有一个404错误.我不明白为什么DE内容找不到.有一个1:1的位置-文件夹匹配?!
另外,虚拟路径http://localhost:8080/any-langhttp://localhost:8080/any-lang/也不起作用。我的想法是,如果请求路径any-lang,NGINX将使用en文件夹来提供内容。
我会很高兴的每一个建议或想法!

xytpbqjk

xytpbqjk1#

让我从一个例子开始

server {

    location /images/ {
        root /data;
    }
}

当你发送一个请求到/images/地址时,nginx会在这个路径中寻找文件来服务它。

/data/images/

你有两个选择

1. Richard在评论中给出的解决方案(但请记住,文件夹名称必须与地址相同-〉/en-us文件夹必须是/usr/share/nginx/html/my-app/en-us
2.使用alias代替root

location / {
        root           /usr/share/nginx/html/my-app/en;
        index          index.html;
        try_files      $uri $uri/index.html =404;
    }

    location /de {
        alias           /usr/share/nginx/html/my-app/de;
        index          index.html;
        try_files      $uri $uri/index.html =404;
    }

    location /en-us {
        alias           /usr/share/nginx/html/my-app/en;
        index          index.html;
        try_files      $uri $uri/index.html =404;
    }

相关问题