【问题标题】:Nginx Alias route not working after adding location block添加位置块后,Nginx Alias 路由不起作用
【发布时间】:2021-03-25 22:13:43
【问题描述】:

我已经配置了 nginx 别名,预期的行为是每当有 https://demo-frontend.in/dl/uurl/orr 时,它应该从 /var/www/frontend_react/build/ 目录获得请求。 但它是从默认的 /var/www/frontend/public 目录中获取的。

server {
    listen 80;
    root /var/www/frontend/public;
    index index.php index.html index.htm;
    server_name demo-frontend.in;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location /dl {
        alias /var/www/frontend_react/build/;
        try_files $uri $uri/ /index.html?$args;


    }


    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.3-fpm.sock;
    }

}

【问题讨论】:

  • 您能否在您的问题中添加一个完整的示例 URL,以显示您所描述的行为?
  • @HolgerJust 我已经在我的问题中更新了它。
  • @HolgerJust 感谢您的解释和解决方案。现在问题已经解决了。您提供的解决方案对我有用,只是做了一些小的改动。而不是 try_files $uri $uri/index.html =404;我用 try_files $uri $uri /index.html =404; ($uri 和 /index.html 之间的空格)

标签: nginx directory routes alias


【解决方案1】:

nginx 中的alias 规则的作用是将位置块中定义的前缀(在您的情况下为/dl)替换为参数(在您的情况下为/var/www/frontend_react/build/)。

nginx 然后应用try_files 参数并尝试找到合适的文件来提供服务

对于您给定的 URL,这会检查以下文件系统路径:

/var/www/frontend_react/build//uurl/orr
/var/www/frontend_react/build//uurl/orr/

如果在这些位置都没有找到有效文件,nginx 会执行内部重定向到

 https://demo-frontend.in/index.html?

然后,此内部重定向与您的 location / 块匹配,因此从那里提供服务。

要解决此问题,您可能需要将 try_files 指令调整为:

location /dl/ {
  alias /var/www/frontend_react/build/;
  try_files $uri $uri/index.html =404;
}

有了这个,nginx首先尝试找到实际的文件

/var/www/frontend_react/build/uurl/orr

如果未找到任何可服务的文件,则回退到 index.html 文件

/var/www/frontend_react/build/uurl/orr/index.html

如果仍然没有找到那个文件,那么 nginx 会返回一个 404 错误。

最后,请注意,在我的示例中,我在 location 块中添加了一个斜杠。在您的原始示例中,您将容易受到任意文件读取漏洞的攻击,这会导致您服务器上任何位置的任何文件都可以被具有 URL 的任何人读取,例如

https://demo-frontend.in/dl../../../../etc/passwd

使用别名规则,请确保在一条或两条路径上都添加斜杠。

【讨论】:

  • 问题已解决。您提供的解决方案对我有用,只是做了一些小的改动。而不是 try_files $uri $uri/index.html =404;我用 try_files $uri $uri /index.html =404; ($uri 和 /index.html 之间的空格)
  • 如果解决方案对你有用,你可以考虑accepting it
猜你喜欢
  • 2017-06-16
  • 2022-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-14
  • 2019-07-25
相关资源
最近更新 更多