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) 我正在使用 ngnix 提供我的静态内容。
位置/静态{
别名 /opt/static/blog/;
access_log off;
etags 上;
etag_hash on;
etag_hash_method md5;
过期 1 天;
add_header Pragma "public";
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}
生成的标题如下所示:
缓存控制:公共,必须重新验证,代理重新验证 缓存控制:最大年龄=86400 连接:关闭 内容编码:gzip 内容类型:应用程序/x-javascript;字符集=utf-8 日期:2012 年 9 月 11 日,星期二 08:39:05 GMT 标签:e2266fb151337fc1996218fafcf3bcee 到期:2012 年 9 月 12 日星期三 08:39:05 GMT 上次修改时间:2012 年 9 月 11 日,星期二 06:22:41 GMT 语用:公开 服务器:nginx/1.2.2 传输编码:分块 变化:接受编码
为什么 nginx 发送 2 个 Cache-Control 条目,这对客户端来说是一个问题吗?
我们正在运行 Nginx 0.7.65[-1ubuntu2.3]。我刚刚注意到,当使用alias指令 and提供本地静态文件时gzip on,Content-Length没有发送标头。由于它从本地文件系统提供文件,因此获取长度应该没有任何问题。如何强制 Nginx 发送Content-Length包含这些文件的标头?
我需要使用 nginx 提供大约 70,000 个静态文件 (jpg)。我应该将它们全部转储到一个目录中,还是有更好(有效)的方法?由于文件名是数字,我考虑使用如下目录结构:
xxx/xxxx/xxx
操作系统为 CentOS 5.1
我有一个由两台 apache2 服务器提供服务的应用程序,我想在静态内容上配置 ETag。将来我也想使用 CDN。我看到这应该是一个问题,因为 Etag 信息因服务器而异......
Apache 1.3 和 2.x 的 ETag 格式是 inode-size-timestamp。尽管给定的文件可能跨多台服务器驻留在同一目录中,并且具有相同的文件大小、权限、时间戳等,但它的 inode 因一台服务器而异。
因此,如果您使用多个网络服务器来托管您的应用程序(就像您每天使用的 90% 的网络应用程序一样),这应该是一个问题。但是我看到谷歌使用 Etags,当然他们使用多个服务器和 CDN 和边缘缓存等......我收到任何缓存的谷歌内容的 304 响应。他们是怎么做到的呢?您如何解决多服务器问题?有没有办法用Apache配置它?
我正在为我的家人创建一个简单的站点,它基本上只是静态文件(我不想要 CMS)。
我试过使用 heroku 和谷歌应用引擎,但 heroku 关闭了服务器,这会在某些请求上产生 30 秒的延迟,谷歌应用引擎最多需要 500 毫秒来提供静态页面。
所以我的问题是,是否有 Heroku 和 google 应用程序引擎的替代方案来在云中托管内容。
它不一定是免费的,但我想将费用控制在每月 10 美元以下。
我总是可以租一个普通的 VPS 或类似的东西,但根据我的经验,在提供文件方面,它们可能比应用引擎更糟糕。
我已经测试了一个运行 nginx 与应用引擎的本地服务器,看起来应用引擎的性能相当好,它比本地服务器落后大约 500 毫秒,但由于它使用 CDN,因此后续请求可能会更快。
web-hosting google-app-engine static-content google-cloud-platform
参考这篇 serverfault 博客文章:一些速度改进,其中讨论了如何从单独的无 cookie 域提供 stackexchange 的静态内容......
有人将如何在 IIS7.5 上为 ASP.NET MVC 站点执行此操作?
到目前为止的计划:
<clientCache cacheControlCustom="public" /> 在 web.config 中这个计划正确吗?
您如何使用 WebDeploy 将整个 Web 应用程序部署到一台服务器,然后仅将静态项目部署到另一台服务器?
我可以看到有一个类似的问题,但对于 apache:Creating a cookie-free domain to serve static content so it does not apply
即使我按照官方说明进行操作,当我使用 uWSGI 启动 Django 测试站点时,也不会加载管理界面的 CSS 文件。例如http://localhost:8443/static/admin/css/base.css,如果我打开 CSS 文件的 URL,则会收到 404 错误。我搜索了本地文件,我猜它的路径是/usr/local/lib/python3.3/dist-packages/django/contrib/admin/static/admin/css/base.css; 所以我也尝试以 root 身份运行 uwsgi,但没有任何改变。
我使用没有问题python3 manage.py runserver。如果我打开http://localhost:8000/static/admin/css/base.css,文件将加载到浏览器中,并将样式应用于管理页面。
这是我在 bash 中执行的命令:
uwsgi --ini ~/.uwsgi/conf/django.ini --set-placeholder project_name=mysite --set-placeholder port=8443
Run Code Online (Sandbox Code Playgroud)
这是 django.ini 的内容:
[uwsgi]
module = %(project_name).wsgi:application
https = :%(port),/usr/local/nginx/conf/server.crt,/usr/local/nginx/conf/server.key,HIGH
strict = true
chdir = /home/marco/django-projects/%(project_name)
env = DJANGO_SETTINGS_MODULE=%(project_name).settings
socket = /home/marco/.uwsgi/%(project_name).socket
pidfile = /home/marco/.uwsgi/%(project_name).pid
daemonize = /home/marco/.uwsgi/%(project_name).log
master = true
enable-threads = true
harakiri = 20
max-requests = 5000
vacuum …Run Code Online (Sandbox Code Playgroud) 我使用 Nginx 作为多个服务器中多个应用程序的反向代理,并且尝试将通用缓存指令添加到每个应用程序的静态文件中。
我原来的配置是这样的:
location /app1{
...
proxy_pass http://127.0.0.1:8081/app1;
}
location /app2{
...
proxy_pass http://127.0.0.1:8082/app2;
}
...
Run Code Online (Sandbox Code Playgroud)
要添加静态文件指令,我可以向每个位置添加嵌套位置,如下所示:
location /app1{
...
proxy_pass http://127.0.0.1:8081/app1;
location ~* \.(css|js|ico|gif|jpg|jpeg|png)$ {
expires 1d;
...
proxy_pass http://127.0.0.1:8081;
}
}
location /app2{
...
proxy_pass http://127.0.0.1:8082/app2;
location ~* \.(css|js|ico|gif|jpg|jpeg|png)$ {
expires 1d;
...
proxy_pass http://127.0.0.1:8082;
}
}
Run Code Online (Sandbox Code Playgroud)
由于我有大约 30 个应用程序,因此我尝试将代码简化为如下所示:
location /app1{
...
proxy_pass http://127.0.0.1:8081/app1;
include static_file_config.conf;
}
location /app2{
...
proxy_pass http://127.0.0.1:8081/app2;
include static_file_config.conf;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法可以简化代码,这样我就不会以 30 个相同的静态文件位置结束?
请注意,每个应用程序都有自己的静态文件。
我现在已经看到了几个这样的例子:Resource interpreted as Stylesheet but transferred with MIME type text/html: "http://localhost:3001/assets/css/bootstrap.min.css"。但是,我无法理解可能是什么原因造成的。
我的简单 PHP 项目中的 CSS 文件没有被提供。状态代码为200,文件确实加载,并且可以从开发人员控制台查看其内容。我还检查了该/etc/nginx/mime.types文件,它有一个text/css. 最后,这是我的网站配置:
server {
listen 3001 default_server;
listen [::]:3001 default_server;
server_name _;
location / {
root /media/common/code/projects/newdf;
try_files $uri $uri/ =404;
include fastcgi_params;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
}
}
Run Code Online (Sandbox Code Playgroud)
即使在代码中,HTML 标记也将类型指定为text/css:
<link rel="stylesheet" type="text/css" href="<?php echo $server_url; ?>/assets/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="<?php echo $server_url; ?>/assets/css/font-awesome.min.css">
<link rel="stylesheet" type="text/css" href="<?php echo …Run Code Online (Sandbox Code Playgroud) static-content ×10
nginx ×5
cache ×2
gzip ×2
web-server ×2
apache-2.2 ×1
apache-2.4 ×1
asp.net-mvc ×1
cdn ×1
cookieless ×1
django ×1
etags ×1
iis-7 ×1
jetty ×1
performance ×1
php-fpm ×1
proxypass ×1
python ×1
uwsgi ×1
web-hosting ×1