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;
}
到目前为止我尝试了什么:
rewrite ^/$ /platform-build/index.html;
- 什么都不做。
alias
和 root
在 if
语句中不起作用。
您需要使用两个不同的内容处理程序(proxy_pass
和 try_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;
}
}
原始技巧的作者说它没有任何性能影响。
我有两个应用程序,一个是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;
}
到目前为止我尝试了什么:
rewrite ^/$ /platform-build/index.html;
- 什么都不做。alias
和root
在if
语句中不起作用。
您需要使用两个不同的内容处理程序(proxy_pass
和 try_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;
}
}
原始技巧的作者说它没有任何性能影响。