防止Nginx缓存nodejs响应

时间:2016-08-01 05:58:49

标签: node.js nginx

我正在使用Nginx根据用户想要访问的目录来代理服务器的请求

server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;


server_name localhost;

location / {

    proxy_pass http://****.***/;

}
location /app/{
    proxy_no_cache '1';
    proxy_cache_bypass  '1';

    proxy_buffering off;

    include proxy_params;
    proxy_pass http://localhost:3000/;

}
}

这是nginx配置。 Node应用程序在3000端口上运行 我面临的问题是

  • 用户访问“/ app”
  • 服务器从节点应用程序发送login.html。
  • 用户从页面登录。
  • 节点在成功登录后发送home.html。(问题在于此处) 虽然Node正在发送home.html,但是Nginx用304代码响应请求,浏览器再次显示相同的登录页面。

Node app的例子

.....
app.get("/",function(req,res){
***Sends login page or home page based on session***
});
app.get("/processLogin",function(req,res){
***redirects to / after setting session****
});
.....

3 个答案:

答案 0 :(得分:2)

在代理模式下,nginx正在使用doSomeOtherStuf()标头来减少后端服务器的负载......

因此,只需在代理位置块中设置Expires,就应该停止缓存。

如果在浏览器中发生缓存,则需要将缓存控制标头设置为no-cache:

expires off;

答案 1 :(得分:0)

在nodejs中添加no-cache标头有助于解决问题。

答案 2 :(得分:0)

一个问题:您是否将pm2用于Node应用程序?许多人使用Nginx + pm2。 对于pm2的开发阶段,您需要在启动应用程序时放置--watch标志。 pm2将所有Node.js加载到内存中,并且不检查硬盘上的文件更改。然后,您将出现缓存现象。

因此,在开发阶段,代替

pm2启动MyApp.js

pm2启动MyApp.js --watch

老实说,我看不到浏览器缓存或Nginx如何缓存node.js程序给出的变量响应。就我而言,必须是pm2。