【问题标题】:Nginx routing got cached?Nginx 路由被缓存了?
【发布时间】:2014-05-31 02:29:34
【问题描述】:

在我的 VPS 上,我有两个虚拟服务器用于:1) apache 应用程序(博客),2) 主应用程序

博客(我们称之为 app1)可以通过以下方式作为子域访问:blog.sitename.com -> app1。 主应用程序也具有语言子域访问权限,因此我定义了这样的通配符访问权限: *.sitename.com -> app2。

默认情况下,sitename.com 解析为 app2。

直到上周四或周五,一切都很好(不记得确切的日期)。

问题是:blog.sitename.com 开始被app2(而不是 app1)解决,因此最终用户登陆 app2 页面并且“博客”被视为一种语言。

我还注意到我的某些浏览器(例如 Safari)没有出现这个问题。 我尝试清除其他浏览器的缓存和 cookie,然后它又开始工作了。

当然,我无法向我网站的用户解释这一点,那么有什么方法可以使缓存(或任何缓存)无效,以便一切重新开始工作?

是的,我尝试在 nginx.conf 文件中设置 sendfile off 并重新启动 nginx - 没有用。

upstream app2 {
   server unix:/tmp/app2.sock fail_timeout=0; 
}

server {
   server_name blog.sitename.com;

   access_log /var/log/nginx/blog.sitename.com.access.log main;   
   error_log /var/log/nginx/blog.sitename.com.error.log;

   root /var/www/app1; # Wordpress blog

   index index.php;

   location / {
      index index.php;
      try_files $uri $uri/ /index.php?q=$uri&$args;
   }

   location ~ \.php$ {
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header Host $http_host;

      proxy_pass http://127.0.0.1:8081;
      proxy_redirect off;
   }

   location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
      expires max;
      log_not_found off;
   }
}

server {
   server_name sitename.com 123.123.123.123;
   rewrite ^(.*) http://www.sitename.com$1 permanent;
}

server {
   listen 80 default deferred; # for Linux
   listen 443 ssl; # Handle SSL connection

   ssl_certificate /root/ssl/ssl.crt;
   ssl_certificate_key /root/ssl/ssl.key;

   client_max_body_size 4G;
   server_name *.sitename.com;  
   root /root/app2/public; 
   keepalive_timeout 10;

   try_files $uri/index.html $uri.html $uri @app;   

   location @app {
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme; # HTTP or HTTPS
      proxy_set_header Host $http_host;
      proxy_redirect off;

      proxy_pass http://app2;
   }  

   # serve static assets
   location ~ ^/(assets)/ {
      gzip_static on;
      expires 1y;
      add_header Cache-Control public;
   }

   error_page 500 502 503 504 /500.html;

   location = /500.html {
      root /root/app2/public;
   }
}

【问题讨论】:

  • @AlexeyTen 编辑了我最初的帖子。这就是整个配置文件的内容!它已经这样工作了将近半年(也许更多)。但是上周发生了一些事情。又怎么会和浏览器缓存有关——我不太明白
  • 大概你去httpS://blog.sitename.com?
  • 嗯,博客(app1)没有HTTPS连接。
  • 这就是为什么对https://blogs.sitename.com 的请求最终会出现在唯一一个监听 https 的服务器块中。
  • @AlexeyTen - 为什么?为什么它会这样工作很长时间?为什么它依赖于浏览器数据?

标签: apache http caching nginx routing


【解决方案1】:

好的。终于找到了我所有问题的根源!

永远不要使用 301 重定向,如果不能 100% 确定它应该是这样的话。

301 重定向在浏览器级别缓存,无法清除。 请改用 302。只有当您 100% 确定一切都正确时 - 实施 301,因为它有利于性能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 2021-10-04
    相关资源
    最近更新 更多