我们正在使用 Nginx 在开发平台上提供静态文件。由于它是一个开发平台,我们希望禁用缓存,以便将每个更改传播到服务器。VHost 的配置非常简单:
server {
server_name static.server.local;
root /var/www/static;
## Default location
location / {
access_log off;
expires 0;
add_header Cache-Control private;
}
}
Run Code Online (Sandbox Code Playgroud)
当我们访问一个 HTML 文件(http://static.server.local/test.html)时,我们没有问题:只要文件没有改变,服务器就会返回一个代码304 Not Modified,并返回一个200 OK响应更改文件时修改的文件。
但是,对于 Javascript 或 CSS 文件,它的行为似乎有所不同。文件更改后,我们会按预期获得200 OK响应,但使用旧文本。
Nginx 中是否有可以解释这种行为的内部缓存机制?或者我们应该添加一些配置?
作为旁注,这是修改文件时 Nginx 返回的标头(似乎是正确的):
Accept-Ranges:bytes
Cache-Control:max-age=0
private
Connection:keep-alive
Content-Length:309
Content-Type:text/css
Date:Fri, 13 May 2011 14:13:13 GMT
Expires:Fri, 13 May 2011 14:13:13 GMT
Last-Modified:Fri, 13 May 2011 14:13:05 GMT
Server:nginx/0.8.54
Run Code Online (Sandbox Code Playgroud)
编辑
在使用expires指令和Cache-Control …
我正在尝试配置一个演示机器,它是带有 Windows 7 家庭高级版的 EEEPC,所有驱动程序都正确加载(不要问我为什么是家庭版)并安装了 IIS7。
我已经在作为 ASP.NET MVC 站点的机器上部署了要演示的应用程序,通过控制台添加了网站,添加了一个应用程序池。应用程序池作为 NetworkService 运行,来宾身份验证作为 IUSR。
我已经添加了对 NetworkService 的修改权限,以及对网站文件夹及其内容的 IUSR 的读取和执行权限。
当我访问网络的根目录时,比如说 http://example.com/我从网站上获得了一个正确的 HTML(这意味着应用程序可以工作),但问题是所有静态内容都返回空白。
我不确定为什么会这样。没有 404 或 500 错误页面,当我访问静态内容时只是普通的空响应。所有 ASP.NET 生成的内容都可以正常工作(虽然有点奇怪,因为所有 CSS 和图像都不会加载)
请帮忙,IIS7 管理控制台对我来说很困惑,我明天需要这台机器。
我计划将我的静态文件移动到 Google 的 App Engine。我想知道这是否是一个好主意。
我读过谷歌是否有可能将您的文件缓存在多个位置,在我看来这是一件好事。
使用 GAE 插件在 Eclipse 中设置也应该很容易。
但我仍然对这方面的表现持怀疑态度。App Engine 的设置是否针对提供静态内容进行了优化。现在我有 Nginx 服务器我的静态内容,App Engine 是否会以相同的方式执行。
使用这种方法还有其他的好处或坏处吗?
我在 Amazon S3上托管了一个静态网站,DNS 托管在 Amazon Route 53 上。我希望我的网站可以通过 IPv4 和 IPv6 访问(因为现在是时候了)。
当我使用 Route 53 AWS 管理控制台A为我的 S3 存储桶添加(IPv4)“别名”记录时,系统会提示我输入 S3 存储桶的名称以用作终端节点。当我尝试添加AAAA(IPv6)“别名”记录时,我没有这样的选择:
尝试AAAA通过A在创建后克隆现有记录来手动设置记录导致错误:
我知道一个事实,即A“别名”记录将正确的 IPv4 IP 地址放入 Route 53 DNS:
我不敢手动设置 IPv6 地址,因为我认为不能保证它会保留下来。别名目标设置是亚马逊为静态 S3 站点规定的设置。
因此,我的问题是,Amazon AWS 是否支持通过 IPv6 访问 S3 静态网站,如果支持,我该如何设置?
domain-name-system amazon-s3 static-content amazon-web-services amazon-route53
如果我在 nginx 配置中使用环境变量,并且将 nginx 配置为仅提供静态文件(html、js、css - 例如 AngularJs 应用程序),有什么方法可以在 nginx 提供的 JS 文件中使用环境变量? 或者是运行非静态服务器(例如 io.js、php 等)的唯一方法。
顺便说一句,您不能在 nginx 的配置中本地使用环境变量。
当我在 nginx 配置中谈论环境变量时,我的意思是在这篇文章中:如何在 Nginx.conf中使用环境变量,它们使用env APP_WEB_1_PORT_5000_TCP_ADDR;和$ENV{"APP_WEB_1_PORT_5000_TCP_ADDR"};
准确解释您的用例
我的具体用例是我在 docker 容器中有一个由 nginx 驱动的 AngularJS 应用程序。该应用程序是一个“单页应用程序”,它完全使用在另一个系统上运行的 API。目前我在生产和暂存之间运行不同的 docker 容器,因为该应用程序有一些不同的配置,例如 Google-Analtyics 代码。这个特定于环境的数据保存在一个config.js文件中,这些值当前是硬编码的,mastergit 中的分支有一个值,而分支的值不同staging。我想更改设计,以便我可以将相同的容器用于生产和暂存。我想在运行它时将一个 ENV 变量传递到容器中 ( docker run -e GACODE=UA-12345-6 ...) 并让 nginx 使用 ENV 变量(通过env GACODE;和$ENV{"GACODE"}这样的config.js文件可以使用传入的 GoogleAnaltyics 代码,而不是对其进行硬编码)。我不知道这是否可能(因此问题;))。仅使用 nginx 使我的容器成为单进程,而如果我必须使用 io.js 那么我将需要多个链接的容器,并且更多的移动部件更复杂)。
我正在使用Firebug的“页面速度”扩展来尝试优化网站,我目前正在研究以下建议:“从无 cookie 的域中提供静态内容”。
我为某些内容创建了一个单独的子域,以便我拥有www.example.com,images.example.com但如何指定它images.example.com是无 cookie 的?我可以强制它在诸如 Nginx 或 Apache 之类的网络服务器中是无 cookie 的,还是仅仅是确保不在服务器端代码(例如 PHP)中在此域中设置任何 cookie 的问题?
我问的原因是因为即使在我尝试修复它之后“Page Speed”仍然显示相同的建议 - 所以我想一些 cookie 一定已经漏掉了。我在浏览器 cookie 搜索中看不到任何 cookie,但如果我检查资源的 HTTP 标头,我可以看到:
Cookie __utma=73051794.676740941.1271792323.1277710025.1277900715.20; __utmz=73051794.1271792323.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmx=73051794.00009825591030858779:3:0; __utmxx=73051794.00009825591030858779:2295429:2592000; __gads=ID=0a768e3407302ff8:T=1272608001:S=ALNI_MZ-GKhg3ETniU0TVftk0DdGyUypkQ
Run Code Online (Sandbox Code Playgroud)
任何人都知道如何阻止来自我的子域的 cookie?
我正在尝试做一些在我看来很简单的事情,但我一定是愚蠢的或错过了一些非常明显的事情,因为我无法弄清楚。
我想访问在我的服务器上运行的多个 Web 应用程序,每个应用程序都有一个唯一的前缀:
http://mywebserver/app1 -> localhost:9001
http://mywebserver/app2 -> localhost:9002
...
Run Code Online (Sandbox Code Playgroud)
据我了解,我需要将 Nginx 配置为反向代理,所以我这样做了:
server {
listen 80;
server_name mywebserver;
location /app1{
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:9001/;
}
...
}
Run Code Online (Sandbox Code Playgroud)
此配置允许我访问应用程序的主页http://mywebserver/app1,但未加载静态内容。
当我打开我的浏览器的控制台上,我可以看到它正试图从获得的资源http://mywebserver/static/custom/index.js,而不是像http://mywebserver/app1/static/custom/index.js。
我尝试root在 location 块中添加一个指令来为静态提供服务,但由于静态内容请求是 on/而不是 on ,因此未将其考虑在内/app1。
如何解决这个问题?有什么明显的我遗漏了还是我完全误解了反向代理的概念?
谢谢你。
nginx web-applications reverse-proxy static-content static-files
我想为我的静态内容制作一个服务器。
我需要提供一些 3-10 mb 的文件 - 很多。(我还将在此服务器上放置一些 .js 和 .css 以及来自我网站的图像)。
我想到了 nginx 和 G-WAN(http://trustleap.com/)。
我不知道提供静态内容需要哪些资源?每次文件传输使用多少 RAM?
如果我使用具有良好端口和巨大带宽的 256 mb(或 512 mb)VPS,我将能够提供多少点击/秒(3-10 mb 文件)?(我知道“这取决于” - 但请根据经验或理论给我一个粗略的估计)。
没有很多文件,只是经常下载 - 我应该考虑缓存,或者这只会使用我提供命中所需的内存?
我正在尝试使用 docker 配置一个 php webapp。这个想法是php-fpm在一个独立的容器中运行应用程序,并有另一个运行 nginx 的容器。此设置的想法是使用相同的 nginx 容器将请求代理到已经在同一台机器上工作的其他 web 应用程序。问题是我无法nginx正确处理静态文件(js、css 等),因为对这些文件的请求一直转到fpm.
这是文件系统的样子:
/
??? Makefile
??? config
? ??? webapp.config
??? webapp
??? web
??? index.php
??? static.js
Run Code Online (Sandbox Code Playgroud)
我正在使用Makefile看起来像这样的(对此不感兴趣docker-compose)运行整个事情:
PWD:=$(shell pwd)
CONFIG:='/config'
WEBAPP:='/webapp'
run: | run-network run-webapp run-nginx
run-network:
docker network create internal-net
run-webapp:
docker run --rm \
--name=webapp \
--net=internal-net \
--volume=$(PWD)$(WEBAPP):/var/www/webapp:ro \
-p 9000:9000 \
php:5.6.22-fpm-alpine
run-nginx:
docker run --rm \
--name=nginx \
--net=internal-net \
--volume=$(PWD)$(CONFIG)/webapp.conf:/etc/nginx/conf.d/webapp.domain.com.conf:ro \ …Run Code Online (Sandbox Code Playgroud) Apache 前端服务器连接到 Jetty 应用程序服务器时出现问题。
我认为ProxyPass !在位置块中不应该将处理传递给应用程序服务器,但由于某种原因,在我的情况下没有发生,Jetty 在缺少的静态(js、css 等)上显示 404
这是我的 Apache (v 2.4, BTW) 虚拟主机块:
DocumentRoot /path/to/foo
ServerName foo.com
ServerAdmin webmaster@foo.com
RewriteEngine On
<Directory /path/to/foo>
AllowOverride None
Require all granted
</Directory>
ProxyRequests Off
ProxyVia Off
ProxyPreserveHost On
<Proxy *>
AddDefaultCharset off
Order deny,allow
Allow from all
</Proxy>
# don't pass through requests for statics (image,js,css, etc.)
<Location /static/>
ProxyPass !
</Location>
<Location />
ProxyPass http://localhost:8081/
ProxyPassReverse http://localhost:8081/
SetEnv proxy-sendchunks 1
</Location>
Run Code Online (Sandbox Code Playgroud) static-content ×10
nginx ×6
docker ×2
amazon-s3 ×1
apache-2.4 ×1
asp.net ×1
asp.net-mvc ×1
cache ×1
cdn ×1
cookieless ×1
cookies ×1
g-wan ×1
http ×1
iis-7 ×1
jetty ×1
memory ×1
php-fpm ×1
proxypass ×1
static-files ×1
virtualbox ×1
vps ×1