【问题标题】:Client doesnt load assets after adding last-modified header添加最后修改的标头后,客户端不加载资产
【发布时间】:2012-07-18 12:00:50
【问题描述】:

我在 Debian 上使用 Thin 和 nginx (0.7.6) 在生产模式下运行我的 rails 应用程序。它工作得很好,但我没有尝试实现 last-modified 标头,当我重新启动 nginx 时,客户端不再加载资产。

这是我的 nginx 配置:

upstream instance-name {
        server unix:/var/run/thin/appname.0.sock;
        server unix:/var/run/thin/appname.1.sock;
        server unix:/var/run/thin/appname.2.sock;
        server unix:/var/run/thin/appname.3.sock;
}

server {
        listen 5678;
        server_name appname;
        access_log /root/rails/appname/log/access.log;
        error_log /root/rails/appname/log/error.log;
        root /root/rails/appname/public;
        index index.html;
        location / {
                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_redirect off;

                if (-f $request_filename/index.html) {
                        rewrite (.*) $1/index.html break;
                }

                if (-f $request_filename.html) {
                        rewrite (.*) $1.html break;
                }

                if (!-f $request_filename) {
                        proxy_pass http://fibre-dox;
                        break;
                }
        }
        location ~* \.(jpg|gif|png|css|js)$ {
               if (-f $request_filename) {
                       expires max;
                       break;
               }
        }
}

给我带来麻烦的部分是这个:

location ~* \.(jpg|gif|png|css|js)$ {
                   if (-f $request_filename) {
                           expires max;
                           break;
                   }
            }

我做错了什么?我想使用最后修改的标题,这样客户端每次点击页面时都不会重新加载所有图片。

【问题讨论】:

    标签: ruby-on-rails nginx thin last-modified


    【解决方案1】:
        location / {
                try_files $uri $uri/ $uri.html @backend;
    
                location ~* \.(?:jpg|gif|png|css|js)$ {
                    try_files $uri @backend;
                    expires max;
                }
        }
    
        location @backend {
                proxy_pass http://fibre-dox;
                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_redirect off;
    
                location ~* \.(?:jpg|gif|png|css|js)$ {
                    proxy_pass http://fibre-dox;
                    expires max;
                }
        }
    

    【讨论】:

    • 这也不适合我。我使用的 0.7.6 版本可能有问题?
    • 我不知道。也许。这是一个非常古老的版本。而且,顺便说一句,它存在安全问题。不管你有什么问题,你都应该更新你的 nginx。
    猜你喜欢
    • 2017-10-10
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 2021-08-15
    • 2022-12-09
    • 1970-01-01
    • 2017-10-27
    相关资源
    最近更新 更多