Nginx NodeJS 代理+ AngularJS index.html重写

gopyfrb3  于 2022-10-31  发布在  Angular
关注(0)|答案(2)|浏览(253)

我有一个基于NodeJS + Express / AngularJS构建的Web应用程序。
AngularJS $routeProviderhtml5模式,这意味着URL中没有index.html或#。
我想使用nginx来:

  • /api代理到我的NodeJS应用程序
  • /中所有请求重定向到/index.html
  • /app中所有请求重定向到/app/index.html
    示例
  • /support/应重写为index.html,然后Angular $routeProvider处理support路由并呈现SupportController
  • /app/login/app/应重写为/app/index.html,然后Angular $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会用/位置覆盖它...
我能在这里做什么?

ecfsfe2w

ecfsfe2w1#

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

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

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

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

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

ncgqoxb0

ncgqoxb02#

我找到了正确的配置,我想我在这里发布之前测试过它,但是由于nginx是在http://locahost:3000/api/login/auth上重定向https://example.com/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;
}

相关问题