我在 tomcat 服务器前使用 HAproxy 1.6 作为负载平衡器。
我需要根据请求 URI 添加响应标头。
例如,Cache-Control public,max-age="600"当请求 uri 是/api但不是当请求 uri 是其他东西时,我想添加响应头。
我的第一次尝试是使用基于路径的 acl 将标头添加到 http-response:
acl api path_reg ^/api/(.*)$
http-response add-header Cache-Control public,max-age="600" if api
Run Code Online (Sandbox Code Playgroud)
当我用 开始haproxy 时-d,我有警告说path_reg(或path)与http-response以下不兼容:
Dec 6 15:22:29 ip-10-30-0-196 haproxy-systemd-wrapper[315]:
[WARNING] 340/152229 (2035) : parsing
[/etc/haproxy/haproxy.cfg:78] : acl 'api' will never match because
it only involves keywords that are incompatible with 'backend
http-response header rule'
Run Code Online (Sandbox Code Playgroud)我试图添加标题http-request而不是http-response:
acl …Run Code Online (Sandbox Code Playgroud)我有一个从各种来源下载内容的应用程序。它依赖于在图像上设置的“Content-Type”标头。大多数网络服务器都正确执行此操作,但似乎 Amazon S3 服务器未设置 Content-Type。
我假设亚马逊服务器配置正确,那么可能是什么问题?这些图片没有正确上传吗?或者我不应该依赖设置的内容类型?
谢谢
对于静态 html 页面,当来自服务器的响应头是304 Not Modified 时,服务器是否有责任只发送头而不是消息正文(html 内容)?
发送304 Not Modified如果它也与 html 内容一起出现有什么意义?
在 Apache 中进行重定向很容易 (mod_alias):
RedirectMatch ^.*$ http://portal.example.com/
Run Code Online (Sandbox Code Playgroud)
设置缓存标头同样简单:
Header set Cache-Control max-age=0
Header set Expires "Thu, 01 Dec 1994 16:00:00 GMT"
Run Code Online (Sandbox Code Playgroud)
(我不想缓存这个)
但!好像不能把两者结合起来。此配置导致发送重定向,但不发送标头:
<VirtualHost *:80>
ServerName __default__
Header set Cache-Control max-age=0
Header set Expires "Thu, 01 Dec 1994 16:00:00 GMT"
RedirectMatch ^.*$ http://portal.example.com/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
实际发生的例子:
jb@apto % telnet 192.168.0.1 80
Trying 192.168.0.1...
Connected to redirector.example.com.
Escape character is '^]'.
GET / HTTP/1.1
Host: foo
HTTP/1.1 302 Found
Date: Sat, 21 Aug 2010 09:36:38 GMT
Server: Apache/2.2.9 (Debian) Phusion_Passenger/2.2.9
Location: http://portal.example.com/ …Run Code Online (Sandbox Code Playgroud) 我最近在切换到 Cloudflare 后遇到了一个问题,解决方案是基本上阻止 Cloudflare 缓存 404 响应。
在我们的负载平衡多服务器设置中,偶尔会发生 404,但它们会被 rsync(通过 lsyncd)快速修复。在 Cloudflare 之前,对 404ed 文件的重新请求将很快变为 200,因为 rsync 完成其工作。
但是,由于 Cloudflare 根据缓存标头缓存所有数据,并且 apache 和 nginx 都不会发送 404 的 no-cache 标头,因此 Cloudflare 最终会缓存 404 响应一段时间。
我一直在寻找一种解决方案,以在 apache 和 nginx(全球范围内,对于所有托管域)中为 404s 全局添加此类标头,但到目前为止还没有找到。
任何人都可以帮忙吗?
谢谢你。
我有一个使用 apache 2 提供的文本文件目录。通常,当我(或任何用户)访问文件时,他们会在浏览器中看到它们。我想“强制”* Web 浏览器弹出“另存为”对话框。我知道这可能与Content-Disposition标题有关(更多信息)。
有没有办法为每个文件打开它?
理想情况下,我想要这样的东西:
<Directory textfiles>
AutoAddContentDispositionHeaders On
</Directory>
Run Code Online (Sandbox Code Playgroud)
然后 apache 将设置正确的内容处置标头,包括使用相同的文件名。
使用 apacheHeader指令可能会发生这样的事情。
如果通过在 debian 中站在 apache 中包含它,则奖励积分。
我可以做一个简单的 PHP 包装器脚本,它接受一个filename参数,调用header(...)然后打印文件,但是我必须验证输入等。这是我试图避免的工作。
* 我知道当涉及到网络时,您实际上不能强迫事物
我正在尝试重定向没有 www 的 url。到 www.version(example.com 到 www.example.com)。我用通常的
RewriteCond %{HTTP_HOST} ^example\.com [nc]
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)
这适用于我所有的其他项目。但是,在这个特定站点上,它以重定向循环结束。这是奇怪的部分:我试图卷曲非 www 版本以查看它使用
curl --get http://example.com --dump-header domain.header > domain.html. 头文件如下所示:
HTTP/1.1 301 Moved Permanently
Date: Mon, 06 Jun 2011 14:45:16 GMT
Server: Apache/2.2.16 (Debian)
Location: http://example.com/
Vary: Accept-Encoding
Content-Length: 310
Content-Type: text/html; charset=iso-8859-1
Run Code Online (Sandbox Code Playgroud)
但是,生成的 HTML 文件是这样的:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="http://www.example.com/">here</a>.</p>
<hr>
<address>Apache/2.2.16 (Debian) Server at example.com Port 80</address> …Run Code Online (Sandbox Code Playgroud) 我的 .htaccess 文件设置如下:
Header set MyHeader "I'm Set!"
Run Code Online (Sandbox Code Playgroud)
如果我转到http://example.com/test/没有默认索引文件的目录 ( ) 并查看网络活动(在这种情况下使用 Chrome),我可以看到正在发送标头。如果我转到 php 文件 ( http://example.com/test/test.php),则不会发送标头。
我创建了一个 index.html(仅<pre>Hi作为内容)并被发送。我将文件名更改为.php,没有标题。如果我将原始文件更改test.php为test.html,它会输出看起来很垃圾的代码,并发送标头。如果我更改test.php为test.png,我会得到一个损坏的图像图标,并发送标题。
因此,如果没有在 mime 类型和文件扩展名方面进行上述测试,那么似乎只有.php文件(合法或其他)被设置为不适用 .htaccess 规则或特别是 mod_headers 指令。但我不知道如何对此进行测试,而且因为它是一个共享服务器,所以我无权httpd.conf四处闲逛。
关于为什么 apache 会跳过为 php 文件发送标头的任何想法?
我也试过:
<FilesMatch "\.(php)$">
Header set MyHeader "I'm Set!"
</FilesMatch>
Run Code Online (Sandbox Code Playgroud) 随着nginx我可以指定Access-Control-Allow-Origin使用像一个通配符*.mydomain.com?
它看起来像:
add_header Access-Control-Allow-Origin *.mydomain.com;
Run Code Online (Sandbox Code Playgroud)
谢谢。
这可能是一个非常基本的问题,所以请原谅我的无知
服务器使用哪种方法来响应它收到的请求?
我正在制作一个网络应用程序,并且有一个特定的路线返回一个大的(比如 .iso 图像)文件。因此,当用户单击下载按钮时,我让 JavaScript 请求带有{method: "GET"}.
当下载在用户机器上开始时,服务器使用哪种 HTTP 方法发送文件?
我真的很困惑:
http-headers ×10
apache-2.2 ×5
cache ×3
http ×2
nginx ×2
php ×2
.htaccess ×1
amazon-s3 ×1
haproxy ×1
http-method ×1
images ×1
mod-rewrite ×1
redirect ×1
security ×1