nginx在位置块

时间:2017-04-15 22:24:50

标签: nginx

我试图让nginx通过导航到... / beta来提供我的rails应用程序的angular2前端替换的beta版本,但我似乎无法让nginx找到任何文件。

我尝试导航到.... / beta .... / beta / index.html,但它似乎永远不会找到索引(或我放在该目录中的任何文件)。

这是我知道正在匹配的位置块,因为使用try_files指令,每当我尝试去测试版的任何地方时,我都会被路由到我的普通rails应用程序。 (没有try_files我得到一个nginx 404回复)

  location /beta {
    root /var/www/ourlatitude/angular_dist;
    try_files  $uri $uri/ /;
  }

我也知道文件存在,因为我可以列出文件并查看启动nginx的脚本中的内容。

echo "starting nginx"
ls -l /var/www/ourlatitude/angular_dist/index.html
cat /var/www/ourlatitude/angular_dist/index.html
nginx -g "daemon off;"

以下是脚本的输出。

starting nginx
-rw-rw-r-- 1 root root 900 Apr 15 16:16 /var/www/ourlatitude/angular_dist/index.html
<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <title>Ourlatitude</title>
  <base href="/">

  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="favicon.ico">
  <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700,400italic">
<link href="styles.c06b2f9217e876bbd94a.bundle.css" rel="stylesheet"/></head>
<body>
  <app-root>Loading...</app-root>
<script type="text/javascript" src="inline.1b4e5bfe11db95ba56df.bundle.js"></script><script type="text/javascript" src="polyfills.1511b33427d0b840a6ea.bundle.js"></script><script type="text/javascript" src="vendor.2104002a7ee0b6a6562f.bundle.js"></script><script type="text/javascript" src="main.8ad811b26786bedbaf91.bundle.js"></script></body>
</html>

我觉得我错过了一些非常基本的东西。 有什么想法可能会发生什么?

如果有帮助,我可以包含更多的nginx配置文件。

我正在做的唯一不同寻常的事情就是它都在一个docker容器中,但我并不认为很重要。

2 个答案:

答案 0 :(得分:2)

rootalias完全不同。 location块用于匹配URI,在本例中为/beta/index.html

root指令确定要添加到URI的前缀,将其转换为路径名。在您的问题中,这将是/var/www/ourlatitude/angular_dist/beta/index.html您想要的。 location块的值仅与匹配URI相关,以构造路径名。

前缀alias中的location指令通过首先删除location的值来构造路径名,因此:

location /beta {
    alias /var/www/ourlatitude/angular_dist;
    ...
}

将匹配URI /beta/index.html,然后在/beta前面删除/var/www/ourlatitude/angular_dist,这将构造路径名:/var/www/ourlatitude/angular_dist/index.html

有关详细信息,请参阅this document

答案 1 :(得分:0)

alias指令之所以被调用,是因为它…将URI别名为服务器文件系统中的路径。

root定义了文件系统中的一个根点,并且所有URI的搜索都相对于该根点在该点下进行。