Nginx return 静态文件或代理请求取决于 cookie 值

Nginx return static file or proxied request depending on cookie value

我有两个应用程序,一个是nodejs,另一个是react app。我的用户未登录,我 return 节点应用程序,如果用户已登录,我想 return 反应应用程序 index.html 文件。

location / {
    if ($cookie_isLoggedIn = "true") {
        // how can I return the index.html file here ?
    }
    proxy_pass http://localhost:3000;
}

到目前为止我尝试了什么:

  1. rewrite ^/$ /platform-build/index.html; - 什么都不做。
  2. aliasrootif 语句中不起作用。

您需要使用两个不同的内容处理程序(proxy_passtry_files),因此您需要两个不同的位置。您可以通过 return 一些静态 HTML 内容通过

之类的指令
return 200 "<body>Hello, world!</body>";

但我认为它不能满足您的需求。但是,您可以使用以下技巧(取自 this 答案):

map $cookie_isLoggedIn $loc {
    true    react;
    default node;
}
server {
    ...
    location / {
        try_files /dev/null @$loc;
    }
    location @react {
        root /your/react/app/root;
        index index.html;
        try_files $uri $uri/ /index.html;
    }
    location @node {
        proxy_pass http://localhost:3000;
    }
}

原始技巧的作者说它没有任何性能影响。