ngnix位置断开节点(sails)路由

时间:2016-01-19 20:44:48

标签: node.js nginx sails.js nginx-location

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

上下文

  • http://localhost:1337
  • 上运行的节点应用程序
  • 指向节点应用程序的proxy_pass的Nginx服务器
  • 服务器位置属性 / app
  • http请求重定向到https

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了。因此,出于某种原因,the location isn't recognizing node routing

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

可能的修复

我已经尝试在位置下添加重写而没有运气:

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

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

1 个答案:

答案 0 :(得分:1)

如果您尝试将前端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