nginx 位置中断节点 (sails) 路由

ngnix location breaking node (sails) routes

我一直在寻找correct nginx configuration to achieve a server location (different from /) and get node routes working

上下文

Nginx 配置文件

server {
  listen         80;
  server_name    domain.com;
  return         301 https://$server_name$request_uri;
}

server {
  #listen 80 default_server;
  #listen [::]:80 default_server;

  listen 443 ssl;
  server_name domain.com;
  # add Strict-Transport-Security to prevent man in the middle attacks
  add_header Strict-Transport-Security "max-age=31536000";

  ssl_certificate /etc/nginx/ssl/nginx.crt;
  ssl_certificate_key /etc/nginx/ssl/nginx.key;

  location /app {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_set_header X-NginX-Proxy true;
      proxy_pass http://127.0.0.1:1337/;
      proxy_redirect off;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";

      proxy_set_header   X-Forwarded-Proto $scheme;
      proxy_cache_key sfs$request_uri$scheme;
  }
}

问题

当导航到 www.domain.com/app 时,我得到了正确的节点主页。

然后,当请求 www.domain.com/app/test 时,我希望它能带给我 http://localhost:1337/test。那没有发生,我得到的是 404 not found。所以,出于某种原因,the location isn't recognizing node routing.

奇怪的是,如果位置是 / 而不是 /app,一切都按预期工作。因此,问题可能与位置有关。

可能的修复

我已经尝试在 location 下添加重写,但没有成功:

location /app {
  rewrite ^/app(.*) / break;
  ...
}

您知道为什么会发生这种情况吗?

如果您尝试将 front-end URI /app/test 映射到上游 URI /test,那么您的 location 上缺少尾随 /指示。尝试:

location /app/ {
    ...
    proxy_pass http://127.0.0.1:1337/;
    ...
}

请注意 locationproxy_path 都有一个尾随 /

当然,这意味着 URI /app 将不再有效,但您可以使用以下方法轻松解决此问题:

location = /app { rewrite ^ /app/ last; }

或:

location = /app { return 301 /app/; }

有关更多信息,请参阅 this document