事实证明,在 Nginx 中设置请求的重写规则非常容易。对于回应,没有那么多(至少对我来说不是)。如果未设置响应的 Content-Length 标头,我想从响应中删除 Content-Type 标头。我安装了NginxHttpHeadersMoreModule,这样我就可以删除标头,但我似乎找不到一种方法来使用 Nginx 配置中的规则来检查响应的 Content-Length 标头是否存在。任何有关如何执行此操作的建议将不胜感激!
在 Apache 2.2.15 的全局配置部分,我有以下内容(根据建议)
<IfModule mod_headers.c>
Header add Strict-Transport-Security "max-age=15768000;includeSubDomains" env=HTTPS
</IfModule>
Run Code Online (Sandbox Code Playgroud)
我想仅当请求不是针对特定主机 (dev.host.com) 时才添加此标头。仅当不针对特定主机时,我使用哪个指令来添加标头?
PS:这个问题的第二部分已经移动了。
文档是这样说的:
当且仅当在当前级别上没有定义 add_header 指令时,这些指令才从上一级继承。
我的问题是我有几个location要缓存的块,如下所示:
add_header X-Frame-Options SAMEORIGIN;
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
location ~ ^/img/(.*)\.(png|jpg|jpeg|gif|bmp)$ {
expires 1w;
add_header Cache-Control public;
}
Run Code Online (Sandbox Code Playgroud)
但这将使我丢失在块外声明的所有标头。所以显然唯一的方法是在每个位置块上复制这些标题,例如:
add_header X-Frame-Options SAMEORIGIN;
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
location ~ ^/img/(.*)\.(png|jpg|jpeg|gif|bmp)$ {
expires 1w;
add_header Cache-Control public;
add_header X-Frame-Options SAMEORIGIN;
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
}
Run Code Online (Sandbox Code Playgroud)
好像不太对 有任何想法吗?
为了满足PubSubHubbub 0.4 规范的要求,我必须rel=self为每个文件发送一个标头。
我现在正在尝试使用Apachemod_headers和环境变量来做到这一点:
Header append Link '<http://example.org%{REQUEST_URI}e>; rel="self"'
Run Code Online (Sandbox Code Playgroud)
只要文件由 PHP 处理,这就会起作用,但不适用于*.htm未由mod_php或任何 CGI 进程处理的静态文件(如)。
似乎没有办法获取所有当前 Apache 环境变量的列表,因此我无法检查哪些实际上可用。
所以我的问题是:如何访问Header append指令中当前请求的 URL 的相对路径?
发生在带有 Apache 的 Debian 7 上2.2.22-13+deb7u4。
当 Nginx 收到缺少 Host 标头的请求时,它会拒绝该请求并返回 400 响应。正如它应该。
有没有办法解决?
有一个硬件需要能够对我的 Nginx Web 服务器进行 REST 调用,但该设备未发送主机标头。我对此无能为力,我无法控制该设备的内部运作。
这将是唯一一个与我的 Web 服务器通信且缺少主机标头的设备,并且它将始终连接到同一位置。服务器使用基于名称的虚拟主机。
我尝试使用headers-more-nginx模块重建我的服务器,因为我相信它可以在处理请求之前向请求添加标头。我将以下行添加到该虚拟主机的 server{} 块中:
more_set_input_headers "Host: device.myserver.com";
Run Code Online (Sandbox Code Playgroud)
但请求仍然被 400 拒绝。
编辑:
我忘了提及这些设备目前能够向 lighttpd 1.4.28 Web 服务器发出请求。我正在尝试让他们在 Nginx 上工作。我在 lighttpd 配置文件中找不到任何应该允许它工作的特殊内容,似乎 lighttpd 不需要这个标头。
编辑2:
tcpdump 的结果(我删除了不应该放在网上的内容):
POST http://XXX.XXX.XXX.com/index/get-next-command HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Connection: keep-alive
Content-Length: 62
user=XXX&pass=XXX&v=0103HTTP/1.1 200 OK
X-Powered-By: PHP/5.3.10-1ubuntu3.21
Set-Cookie: PHPSESSID=XXX; path=/
Set-Cookie: username=XXX; path=/
Set-Cookie: password=XXX; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: …Run Code Online (Sandbox Code Playgroud) 我有用于服务器生成的缓存的简单位置:
location /api/get-hloc {
#add acccess-allow headers
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
#try cached files
root /dev/shm/get-hloc/;
try_files /$arg_hash.hloc /stocks/graphics/get-iis-graphic?$args;
}
Run Code Online (Sandbox Code Playgroud)
它能做什么?它只是检查内存中是否有可以为请求提供服务的文件,如果没有文件,则尝试实际为将来的请求生成文件的位置并将其提供给客户端。
add_header除了被忽略的指令外,一切都按预期工作。
是否可以在尝试 try_files 中的新位置之前添加标头,或者我应该仅在端点位置添加标头?
是否有适用于通过 SNI 或 HTTP Host 标头发送错误主机名(或根本没有)的客户端的 HTTP 状态代码?
一个较旧的问题首先解决了此类请求如何以及为何发生,以及如何在 Apache 中从技术上处理它们。然而,它没有解决响应状态代码的选择问题。
过去,我实现了一个 HTTP 代理,它会发送状态代码 502 和一个 html 页面,解释为什么会产生错误消息。我使用 502 的理由是期望我看到它主要是由于配置错误,这意味着代理找不到合适的后端。实际上,仅仅看到完全虚假的主机名的频率要高得多。
是否有另一个状态代码更合适,更清楚地向客户端发出信号,表明此 IP 地址上的服务器无法识别通过 SNI 和/或主机标头发送的值?
我有一个在 nginx 1.15 后面反向代理的 Web 应用程序服务器,如下所示:
location / {
proxy_pass https://some.awesome.IP:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
add_header Content-Security-Policy "default-src 'self'; frame-ancestor https://subdomain.domain.org 'self'";
Run Code Online (Sandbox Code Playgroud)
现在这个 Web 应用程序服务器认为将标头设置Content-Security-Policy为frame-ancestors 'self'- 这会破坏我的前端,因为我需要将该页面包装在托管于 的 iframe 中https://subdomain.domain.org。
那么,在将响应传递给客户端之前,如何在 nginx 中更改/覆盖/删除从 Web 应用程序服务器返回的标头?add_header这里显然被忽略了。
我刚刚为我的网页购买了新域名。使用 php 重定向到新域是否好,我必须发送到 google bot 以更新地址并保持页面排名而不会丢失特定关键字在搜索结果中的位置的确切标头是什么?问候
尝试在 Windows Server 2008 R2 Standard 上新安装的 IIS7.5 上设置自定义 HTTP 响应标头,但它们不起作用。默认标题工作正常(X-Powered-By 等...)。修改默认标头值有效(即将 X-Powered-By 更改为 ASP.NET2)。修改默认标题名称会导致标题停止输出(即,将 X-Powered-By 更改为 X-Powered-By2)。
有问题的站点是具有单个 html 页面的测试站点。自定义标头也不适用于 ASP.NET 2.0 站点。
我试过在全局级别和站点级别设置标题无效。
http-headers ×10
nginx ×5
http ×3
apache-2.2 ×2
https ×2
domain ×1
google ×1
iis-7.5 ×1
sni ×1
ssl ×1