Nginx NodeJS代理+ AngularJS index.html重写

时间:2017-08-28 14:30:05

标签: angularjs node.js nginx

我有一个基于NodeJS + Express / AngularJS构建的webapp。

AngularJS $routeProvider处于html5模式,这意味着网址中没有index.html和#。

我想使用nginx:

  • 代理/api到我的NodeJS应用
  • /中的所有请求重定向到/index.html
  • /app中的所有请求重定向到/app/index.html

实施例

  • /support/应重新归结为index.html,然后角度$ routeProvider处理support路线并渲染SupportController
  • /app/login/app/应重新归结为/app/index.html,然后角度$ routeProvider处理login路线并渲染LoginController
  • /api/auth/login/api/*应该始终被代理重定向到http://localhost:3000/,因为/api下无法提供静态文件

约束

问题是,使用这样的东西重定向到API:

location / {
  try_files $uri @backend;
}

与AngularJS index.html重写不兼容:

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

location /app/ {
  try_files $uri $uri/ /app/index.html =404;
}

如果我指定/api位置,Nginx会使用/位置覆盖它...

我可以在这做什么?

2 个答案:

答案 0 :(得分:1)

我认为这应该是一个简单的配置

location / {
   try_files /index.html =555;
}

location /app/ {
  try_files /app/index.html =666;
}

location /api/ {
   proxy_pass http://nodeip:3000/;
}

如果您解释的是正确的,那么上面的配置应该

答案 1 :(得分:0)

我找到了正确的配置,我想我在发布之前测试了它,但是由于nginx在https://example.com/api/login/auth而不是http://locahost:3000/api/login/auth重定向http://locahost:3000/login/auth,我从Express获得了404,所以我以为他们来自Nginx ......我只是“像傻一样愚蠢”......

感谢你的帮助Tarun!

这是一个很好的配置(这是非常基本的):

location /api {
  proxy_set_header  Host \$host;
  proxy_set_header  X-Real-IP \$remote_addr;
  proxy_set_header  X-Forwarded-For \$proxy_add_x_forwarded_for;
  proxy_set_header  X-Forwarded-Proto \$scheme;

  # Fix the “It appears that your reverse proxy set up is broken" error.
  proxy_pass          http://localhost:3000;
  proxy_read_timeout  90;

  proxy_redirect      http://localhost:3000 https://example.com/api/;
}

location / {
  try_files \$uri \$uri/ /index.html =404;
}

location /app/ {
  try_files \$uri \$uri/ /app/index.html =404;
}