Nginx.conf 用于在 Pivotal Cloud Foundry 上部署的 angularjs 应用程序

Nginx.conf for angularjs application deployed on Pivotal Cloud Foundry

我有一个 AngularJs 应用程序 (v.1.5.7),它有明确的路线,例如 www.green.com/ 、 www.green.com/landing 、 www.green .com/home 等...我正在尝试使用 Staticfile_buildpack 在 PCF 中部署 angularjs 应用程序。我有一个内容为 "root : application" 的自定义静态文件。我的 index.html、app.js 和其他 angularjs 控制器位于 "application" 目录中。

我的 angularJs 配置具有以下路由配置,

$routeProvider
.when("/landing", {
        templateUrl: "landing/landing.html",
        controller: 'LandingController'
    })

使用默认的 nginx 配置,我的基础 url (www.green.com/) 和其他内部路由(例如 /landing through ng-route & $location.path)得到了正确的服务.但是当我刷新登录页面 (www.green.com/landing) 时,它给了我一个 404 Not Found 错误。我知道 nginx 正在尝试在此处找到名为 "landing" 的目录。

在页面刷新的情况下,我尝试通过自定义 nginx.conf 将请求重定向回我的基础 url,以便加载我的 index.html。 我的礼物 nginx.conf 如下所示,

http{
    server { 
        listen <%=ENV["PORT"] %>;

        index index.html;

        location /landing {
            rewrite ^ http://$host? permanent;
        }

        location /{
            try_files $uri $uri/ $uri.html /index.html;
        }
    }   
}

当我尝试加载我的网站时,我收到 500 内部服务器错误以及 PCF 日志中的以下错误行。

[error] 54#0: *2 rewrite or internal redirection cycle while internally redirecting to "/index.html",

然而,当我尝试加载 www.green.com/landing 时,它成功重定向到我的基地 url,然后给我一个 500 内部服务器错误。

我尝试了以下 nginx.conf

http{
    server { 
        listen <%=ENV["PORT"] %>;

        index /application/index.html;

        rewrite "^/landing" /application/index.html last;
    }   
}

但我收到 404 Not Found 错误,PCF 日志中显示以下错误,

[error] 49#0: *3 open() "/home/vcap/app/nginx/html/application/index.html" failed (2: No such file or directory),

在这种情况下,请帮助我创建一个有效的自定义 nginx.conf 文件。 提前致谢!

如果您在代码中启用了 html5Mode,则需要在索引 file.along 中设置基本标签,

server {
    server_name my-app;

    index index.html;

    root /path/to/app;

    location / {
        try_files $uri $uri/ /index.html;
    }
}

这是 angular 站点的 Nginx 重写。