我想将 Nginx 设置为我的 Web 服务器。我想将图像文件缓存在内存 (RAM) 而不是磁盘中。我正在提供一个小页面,并希望始终从 RAM 提供一些图像。我不希望为此使用 Varnish(或任何其他此类工具),因为我相信 Nginx 能够将内容缓存到 RAM 中。我不确定如何为此配置 Nginx?我确实尝试了一些组合,但没有奏效。Nginx 一直使用磁盘来获取图像。
例如,当我尝试使用 Apache 基准测试使用以下命令进行测试时:
ab -c 500 -n 1000 http://localhost/banner.jpg
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
socket: Too many open files (24)
Run Code Online (Sandbox Code Playgroud)
我想这意味着 Nginx 试图从磁盘同时打开太多文件,而操作系统不允许此操作。任何人都可以建议我正确的配置吗?
第一次在 ServerFault 上,我有一个很好的小难题。
几个月以来,我们的互联网连接一直存在问题。
环境:
Servers: 2 Terminal Servers as an RDSFarm running Windows Server 2008 R2
Browser: Internet Explorer 9
Test/debug browser: Chrome
AntiVirus: Avast 7.0.1455
Run Code Online (Sandbox Code Playgroud)
问题:
网站会不定期地拒绝加载,并显示无法访问该页面或某些图像无法完全加载的错误消息。此外,在检查多个 .js 文件后无法加载。

结果和我们尝试过的:
第一印象:
当我在这段时间内使用 Chrome 时,该站点在刷新后返回 net::Error 101 或 Error 103。在其他时候,如果它没有给出错误,则多个图像不可见并显示 X 图像。IE 只是说页面无法显示。

使用 Chrome 开发者工具:
它在控制台中显示多个资源不可用,但是当我右键单击丢失的图像并选择“显示图片”时,它们会显示。当我通过直接 URL 打开图片时,它们也会显示。

通过 Chrome 开发者工具审核:
当页面处于错误状态时,我对其进行了审核,发现一些 .js 文件与一些 .png、.jpg 和 .gif 文件没有一起加载。Chrome 和 IE 加载不同的图像。

混淆的 JS 文件和 Avast:
在检查之后,我发现大多数 .js 文件都是经过混淆的 JS 文件,而且由于我们运行的是 Avast 7.0.1455,我想知道 Web Shield 是否没有搞砸。
再说一次,它只发生在第一个 TS 上,而不是第二个。 …
在我们运行 OpenSUSE 12.2 的机器上,我们已经安装了 OpenLDAP 和sssd守护进程。我们正在使用这两个服务进行用户身份验证。最近我们创建了一个脚本,它动态地为我们的虚拟主机创建新的网络用户,但现在我们正在处理一个问题。
sssd 似乎使用了某种缓存,并在getent passwd此期间返回已从 LDAP 中删除的用户。有时它不会立即返回最近创建的用户,因为它在脚本中是必要的(用于使用setfacl和设置权限chown)。
重新启动 LDAP,sssd或者nscd没有帮助,也没有使用sss_cache -U. 我们尝试降低配置中的缓存,sssd但似乎没有任何影响。
在将新用户添加到 LDAP 或完全禁用缓存后,我们需要以某种方式显式刷新缓存。
有没有人遇到过类似的问题?
我目前正在使用mdadm实用程序在 Linux 下构建软件 RAID ,我已经阅读了一些文章,这些文章描述了如何增加该 RAID 的 stripe_cache_size 值以及如何计算合适的 stripe_cache_size 值。
我已将我的速度提高到 16384,我当前在 /proc/mdstat 中的新 RAID5 上的同步速率已从 71065K/秒跃升至 143690K/秒(翻倍!),这是个好消息。我还看到 RAM 使用量的匹配和预期增加,但是我找不到任何关于此设置的作用及其工作原理的文档。
它似乎是存在于 RAM 中的 RAID 的某种缓存。这就是我从它的名字和改变它所看到的效果所能知道的。是否有任何关于此设置及其描述的官方“Linux”文档?
就像在 Ubuntu 中一样,我们可以选择创建“Ubuntu 更新缓存服务器”,它直接从 Internet 下载和更新软件包,并为其他客户端 ubuntu 机器提供安装/更新软件包的服务。对于基于 RHEL 的发行版(Centos、fedora),我们可以以同样的方式创建“更新缓存服务器”,它从 Internet 获取软件包并在本地提供给 LAN 中的客户端机器。也像 ubuntu 一样,缓存服务器为所有版本的 centos、fedora 等提供服务.
我希望这是一个简单的“是”或“否”答案(请说明原因)
Q1:规则在 htaccess 中的放置顺序有关系吗? 由于它们是完全分开的项目:例如
Q2:如果是,我是否应用了正确的顺序? 为了加速 htacces 引擎而不是用不必要的规则使其过载?
Q3:关于在此处禁用/添加什么的任何提示都非常欢迎+1!
# DirectoryIndex index.php /index.php
AddDefaultCharset UTF-8
RewriteEngine on
# Options All
# Options +FollowSymLinks
# Options +FollowSymLinks -Indexes -ExecCGI
# RewriteBase /
#####################################################
<IfModule mod_headers.c>
ExpiresActive On
ExpiresDefault M172800
Header unset ETag
FileETag None
Header unset Pragma
##### STATIC FILES
<FilesMatch "\\.(ico|jpg|png|gif|svg|swf|css|js|fon|ttf|eot|xml|pdf|flv)$">
ExpiresDefault M1209600
Header set Cache-Control "public, max-age=1209600"
</FilesMatch>
##### DYNAMIC PAGES
<FilesMatch "\\.(php)$">
ExpiresDefault M604800
Header set Cache-Control "public, max-age=604800"
</FilesMatch>
</IfModule>
#####################################################
# /page123 and /page123/ will …Run Code Online (Sandbox Code Playgroud) 我有一些带有缓存控制Max-Age标头的静态内容,因此客户端将缓存静态内容。但是,当有错误响应建议客户端缓存它时,IIS 7.5 仍会发送此标头。
具有负面影响,某些代理将缓存该错误响应。我可以,Vary: Accept,Accept-Encoding但这并没有真正解决Max-Age错误响应的根本问题。
当前相关的 IISweb.config部分是:
<configuration>
<system.webServer>
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00" />
</staticContent>
</system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)
有没有办法让我可以做到这样我们就不会告诉客户端或代理缓存 400/500 错误代码?
在 NFS 上挂载 /vagrant 时,如果大小没有改变,主机上已更改的文件不会在来宾上刷新。除非我对大小进行足够的修改以使其不同,否则不会立即反映快速更新/错别字。
我试图设置 lookupcache=none 但除了让一切变慢之外,没有任何改变。
我使用 OSX ML 作为主机,使用 Arch Linux 作为来宾。NFS 是 v3(因为 OSX)。
我试图对我的缓存策略有一个基本的行为:文件应该被缓存,并且每次都与服务器重新验证。所以我希望 Apache 发回 304。
这是每次浏览器刷新时发生的对话框:
Status Code:200 OK
Request Headers
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip,deflate,sdch
Accept-Language:fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
Cache-Control:max-age=0
Connection:keep-alive
Cookie: ...
Host:...
If-Modified-Since:Tue, 14 Oct 2014 15:10:37 GMT
If-None-Match:"1461-505636af08fcd-gzip"
User-Agent:Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36
Response Headers
Accept-Ranges:bytes
Cache-Control:No-cache
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:1412
Content-Type:text/html
Date:Tue, 14 Oct 2014 16:58:05 GMT
ETag:"1461-505636af08fcd-gzip"
Keep-Alive:timeout=5, max=99
Last-Modified:Tue, 14 Oct 2014 15:10:37 GMT
Server:Apache/2.4.6 (Ubuntu)
Vary:Accept-Encoding
Run Code Online (Sandbox Code Playgroud)
(这是来自 chrome devtools,未选中禁用缓存)
您可以看到响应包含 Cache-Control:No-cache 标头,并且 If-modified-since 标头与 Last-modified 相匹配。ETag 也匹配。
在这种情况下,Apache 不应该发送 304 吗?
编辑
在 apache 中禁用 …
我最近在切换到 Cloudflare 后遇到了一个问题,解决方案是基本上阻止 Cloudflare 缓存 404 响应。
在我们的负载平衡多服务器设置中,偶尔会发生 404,但它们会被 rsync(通过 lsyncd)快速修复。在 Cloudflare 之前,对 404ed 文件的重新请求将很快变为 200,因为 rsync 完成其工作。
但是,由于 Cloudflare 根据缓存标头缓存所有数据,并且 apache 和 nginx 都不会发送 404 的 no-cache 标头,因此 Cloudflare 最终会缓存 404 响应一段时间。
我一直在寻找一种解决方案,以在 apache 和 nginx(全球范围内,对于所有托管域)中为 404s 全局添加此类标头,但到目前为止还没有找到。
任何人都可以帮忙吗?
谢谢你。
cache ×10
apache-2.2 ×2
nginx ×2
.htaccess ×1
apache-2.4 ×1
arch-linux ×1
centos ×1
http ×1
http-headers ×1
iis ×1
iis-7.5 ×1
internet ×1
latency ×1
ldap ×1
linux ×1
mdadm ×1
memcache ×1
nfs ×1
packages ×1
rds ×1
sssd ×1
update ×1
vagrant ×1
virtualbox ×1