我试图让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容器中,但我并不认为很重要。
答案 0 :(得分:2)
root
和alias
完全不同。 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的搜索都相对于该根点在该点下进行。