我有一个Django网站,每隔几秒发布新的内容。 我网站主页上的授权用户登陆/ ,而未经授权的用户login/unauth 。 /unauth显示与/unauth相似的内容,但没有任何个人详细信息。 我的网站使用nginx(反向代理)与gunicorn作为上游。 我试图在location/unauth上实现nginx location/unauth ,但到目前为止还是不成功(在/var/cache/nginx什么也没有显示)。 添加add_header X-Cache-Status $upstream_cache_status; 在location/unauth在响应中根本不产生任何东西。 这几乎就像是完全被忽视的(!)。 你能帮我解决这个问题吗? 让我知道如果你想看到整个nginx.conf。 我在我的nginxconfiguration文件中添加了以下内容: #outside the server block proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=100m inactive=6m; #inside the server block location /unauth { add_header X-Cache-Status $upstream_cache_status; proxy_cache my_cache; proxy_cache_lock on; proxy_cache_valid 200 1s; proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; proxy_buffering on; proxy_buffers […]
我使用Django REST Framework作为我的API,nginx作为反向代理,redis用于caching一些静态api数据。 我试图通过Cache-Control: max-age实现cachingCache-Control: max-age和Last-Modify标题。 简而言之,它看起来像这样: class SomeViewSet(viewsets.ModelViewSet): …. def list(self, request, *args, **kwargs): queryset = self.get_queryset() cache_key = self._get_cache_key() # get a key for reddis response = self._get_data_from_cache(cache_key) # get a data from reddis if response: # If data in redis return Response with a same Last-Modify # and 'Cache-Control': 'max-age=120' return response […]
我们目前使用NGINX作为我们的服务器,我们使用memcache来cachingdb查询以及php中的页面。 我们有一个版本编号系统,在任何更新或插入的情况下,这个版本号都会被提升,结果是每个密钥都附加了这个版本号,所以memcache总是会获取新的数据。 它对我们很有用,因为读写%split是80/20%,所以大部分时间memcache将会返回数据,而不会触及数据库。 现在我们打算把这个caching策略移到服务器级别,NGINX和memcache模块一起使用请求URI和版本号cachingGET请求。 只需要一些反馈,我可以如何实现这一点 我可以获取存储在NGINX的memcache中的这个版本号吗? (这将被用来将其附加到请求uri) 我如何处理login用户? (我可以只为一个login用户设置一个cookie,并检查这个cookie是否存在于nginx中,如果它只是将请求传递给后端而不是memcache)
我一直在为在nginx后面运行的rails应用程序设置多个云端点来修改页面加载时间。 基本上 – 我们之前build立了一个端点似乎工作正常,但是当我使用下面的asset_host声明添加到第二个端点时: config.action_controller.asset_host = Proc.new do |source| hosts = ["https://url1.cloudfront.net", "https://url2.cloudfront.net"] hosts[source.hash % 2] end 每当我部署(使用一个漂亮的香草capistrano部署脚本),一些资产不加载 – cloudfrontcachingnginx 404页面。 如果我使cloudfront的caching无效,资产全部加载正常。 capistrano脚本本身在重新启动独angular兽前进行编译,因此不应该使用引用新资产文件名的html,但是,在部署之后,cloudfront会立即caching404s。 我确实无法在每次部署之后使云端caching失效,这需要很长时间。 有没有人遇到过这个问题? 任何build议如何解决这个问题?
我有以下的nginxconfiguration: upstream backend { server localhost:8080; } upstream memcached_server { server 127.0.0.1:11211; } server { listen 3000; server_name localhost; location /picture { set $memc_cmd get; set $memc_key $arg_login; memc_pass memcached_server; error_page 404 = @cache_miss; } location @cache_miss { proxy_pass http://backend; } location /image { proxy_pass http://myimageservice; } 当我发送请求到: localhost:3000/picture?login=john它会尝试使用键“john”在memcached中查找内容。 当memcached中不存在内容时,代理将请求传递给后端服务器(localhost:8080),后者使用John图像的path设置“X-Accel-Redirect”。 path以'/ image'开始,所以nginx从myimageservice获取数据并将其返回给客户端。 问题是我想caching从'myimageservice'返回的响应,所以下一次当localhost:3000/picture?login=john被调用时,没有请求被发送到后端服务器(localhost:8080),响应是立即从memcache返回。 可能吗?
nginx代理有一个指令proxy_cache_min_uses但我找不到什么时间窗口使用或如何设置一个。 因为如果它不使用任何时间窗口,只是等待请求到达某个计数器,那么最终所有请求都会执行,如果你保持nginx运行足够长的时间。 或者由于最近最less使用的策略,一个比较less见的请求会被快速从caching中逐出,我不应该太在意吗? 谢谢
我已经为一个网站运行了一些testing,涉及如何dynamic内容(通过PHP / nginx在这种情况下)获取各种浏览器caching。 我得出的结论是,即使在响应中没有Cache-Control和Expires参数,即使我不发送POST请求,我也不会从caching中取出php文件,即使在移动浏览器中也是如此只需按照页面的链接。 他们总是redownloaded。 相比之下,css / js / image文件是从caching中获取的。 这对我来说很好,因为我希望dynamic的html总是要打到后端,并且有一个以Varnish或者我自己的php / filesystem实现forms的caching机制。 这通常是默认情况下的预期行为? 顺便说一下,我正在使用会话cookie。
所以,这是我的难题! 我一直在试图让Cloudfront在过去三天里与我的nginx服务器打好关系…阅读了无数的StackOverflow文章和博客文章……扫描了interwebs,我仍然遇到了跨域访问策略的问题它涉及到Cloudfront服务字体。 我将发布我的完整设置,希望有更多专业知识的人可以帮我弄清楚发生了什么事情。 今后,我希望这个post能够服务于很多面临类似问题的人。 开始… Nginxconfiguration: 我有一个nginxnetworking服务器与以下服务器块configuration。 (…为简洁而截断) server { server_name example.com www.example.com; root /var/www/example.com/html; index index.html index.htm; location / { try_files $uri $uri/ =404; } location /assets { autoindex on; } # Media location ~* \.(jpe?g|gif|png|ico|cur|gz|svgz?|mp4|ogg|ogv|webm|htc|webp)$ { expires 1M; access_log off; add_header Cache-Control public; } # Fonts location ~* \.(eot|ttf|woff|woff2|svg)$ { expires 365d; access_log […]
我有以下configuration(对于Angular应用程序): location / { try_files $uri /index.html; add_header "Cache-Control" "no-cache" ; } 现在我想只为index.html添加该标题,但不适用于任何其他文件。 怎么做?
我从Apache 2 + Varnish的设置单独移动到Nginx,我有点卡住我应该如何安装/使用ESI以及在这个设置fastcgi_cache。 首先,ESI的思想是我们在服务器前面设置一个反向代理层来caching一个页面的caching部分,然后用esi来检索dynamic部分。 在我之前的设置中,Varnish是作为反向代理的,Apache只在必要时处理esi请求。 我的问题是,现在Nginx作为唯一的服务器在这里,我如何使它工作? 我是否需要安装另一个作为反向代理服务器运行的Nginx实例? 我找不到任何文件。 第二个问题是关于fastcgi_cache。 我已经设置了如下所述,但caching似乎没有为我工作,没有caching文件填充,我总是得到“MISS”。 我想知道是不是因为我需要在每个控制器中设置max-age / shared-max-age来使其工作? fastcgi_cache_path /run levels=1:2 keys_zone=www_mysite_com:100m inactive=60m; fastcgi_cache_key "$scheme$request_method$host$request_uri"; fastcgi_cache_use_stale error timeout invalid_header http_500; server { #listen 80; ## listen for ipv4; this line is default and implied #listen [::]:80 default ipv6only=on; ## listen for ipv6 root /var/www/mysite.com/w/w/w/www/web; index index.php index.html index.htm; # […]