• 解决nginx反向代理缓存不起作用的问题


    昨天尝试用nginx搭建nuget镜像服务器,镜像服务器需要两个功能:1)反向代理;2)内容缓存。

    用nginx做反向代理,配置非常简单,只需在/etc/nginx/nginx.conf中添加一个包含proxy_pass的server设置:

    server {
        listen       80;
        listen       [::]:80;
        server_name  镜像服务器主机名;
        location / {
            proxy_pass http://www.nuget.org;
        }
    }

    而添加缓存功能,配置稍微复杂些。

    首先要创建一个用于存放缓存文件的文件夹,比如这里用 /data/nuget-cache 。

    mkdir /data/nuget-cache

    然后在nginx.conf的http设置部分添加proxy_cache_path设置:

    proxy_cache_path /data/nuget-cache levels=1:2 keys_zone=nuget-cache:20m max_size=50g inactive=168h;

    * keys_zone指的是缓存空间名称。

    * max_size指的是缓存文件可以占用的最大空间。

    * inactive指的是如果一个缓存文件多长时间不被访问,就会被删除。

    接着在server设置部分添加proxy_cache与proxy_cache_valid设置:

    server {
        listen       80;
        listen       [::]:80;
        server_name  镜像服务器主机名;
        location / {
            proxy_pass http://www.nuget.org;
            proxy_cache nuget-cache;
            proxy_cache_valid 168h;
        }
    }

    * proxy_cache设置的就是proxy_cache_path中keys_zone的值。

    * proxy_cache_valid设置的是缓存过期时间,比如这里168小时过期。

    这样设置后运行nginx,发现只有少部分内容被缓存,大部分内容不能被缓存,比如下面的URL的响应内容就不能被缓存:

    http://www.myget.org/F/aspnetvnext/api/v2/FindPackagesById%28%29?id=%27System.Linq%27

    查看http响应头(http headers),发现了下面2个http header:

    Cache-Control: private
    Set-Cookie: ai_session=ad829b6c509946098fa7f8e32fada661|2015-06-24T03:52:38.2032109+00:00|2015-06-24T03:52:38.4219541
    +00:00; expires=Wed, 24-Jun-2015 04:22:38 GMT; path=/

    问题就是它们引起的,需要在nginx中通过proxy_ignore_headers设置忽略它们,设置方法如下:

    server {
        listen       80;
        listen       [::]:80;
        server_name  镜像服务器主机名;
        location / {
            proxy_pass http://www.nuget.org;
            proxy_cache nuget-cache;
            proxy_cache_valid 168h;
            proxy_ignore_headers Set-Cookie Cache-Control;
            proxy_hide_header Cache-Control;
            proxy_hide_header Set-Cookie;
        }
    }

    【参考资料】

    Understanding the nginx proxy_cache_path directive

    Nginx Caching

    【相关链接】

    nuget国内镜像的解决办法

  • 相关阅读:
    378. Kth Smallest Element in a Sorted Matrix
    387. First Unique Character in a String
    230. Kth Smallest Element in a BST
    384. Shuffle an Array(随机排序)
    454. 4Sum II
    627. Swap Salary
    166. Fraction to Recurring Decimal
    763. Partition Labels(贪心)
    496. Next Greater Element I
    766. Toeplitz Matrix
  • 原文地址:https://www.cnblogs.com/dudu/p/4597351.html
Copyright © 2020-2023  润新知