当出现 HTTP 重定向相关代码(30x)时,我想更改缓存控制标头。
我如何检查响应的 HTTP 代码来确定是否应该运行add_header
答案1
这下列的应该管用:
server {
listen 60729;
error_page 301 @301;
return 301 http://example.su/test;
location @301 {
add_header X-Header value;
return 301 $sent_http_location;
}
}
确认信息如下:
%curl -v localhost:60729 | & fgrep \
-e HTTP/ -e X-Header -e Location -e title | sed 's#^#\t#g'
> GET / HTTP/1.1
< HTTP/1.1 301 Moved Permanently
< Location: http://example.su/test
< X-Header: value
<head><title>301 Moved Permanently</title></head>
请注意,配置的每个部分都非常重要:
这
error_page
指令有效地为 nginx 提供了非常简洁的异常处理功能;如果没有
return 301
,location @301
nginx 将尝试从文件系统提供所需的文件;这可能会导致404
,因此,您将获得一个404
页面;请注意,Location
标题仍将保留,但X-Header
将会丢失404 Not Found
页面,因为根据文档add_header
指令,它不允许你向错误页面添加标题;使用平原
return 301;
内的location @301
,你将有效地清除Location
,所以,你的Location
将是空的;因此你必须使用$sent_http_
保存当前值。
如果你想尝试上述的 POC MVP,你可以在以下位置找到完整配置我的 GitHub在https://github.com/cnst/StackOverflow.cnst.nginx.conf。
答案2
如果您在 nginx 中执行重定向,这应该可以工作。您必须使用 headers_more 模块构建 Nginx,这非常简单 - 请参阅我的Nginx 教程在这里。
location /match/ {
add_header HEADER_NAME "header value";
return 301 https://example.com;
}
如果您要代理返回重定向的应用程序,那么它会稍微复杂一些,可能涉及 IF 语句。nginx 中的 IF 并不总是按预期工作,因此在这种情况下,您最好更改应用程序。