有一个HTTPredirect相关代码(30x)时,我想更改caching控制标题。
我怎样才能检查响应的HTTP代码,看看我是否应该运行add_header
以下应该工作:
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>
请注意,configuration的每个部分都非常重要:
error_page指令有效地为nginx提供了非常整洁的exception处理能力;
在location @301内没有return 301 ,nginx会尝试从文件系统提供必要的文件; 这可能会导致一个404 ,所以,你会得到一个404页面; 请注意, Location标题仍然会保留,但X-Header将从404 Not Found页面中丢失,因为根据add_header指令的文档,它不允许将标题添加到错误页面;
平原return 301; 在location @301 ,你将有效地清除Location ,所以,你的Location将是空的; 因此您必须使用$sent_http_来保存当前值。
如果你想尝试我的POC MVP如上,你可以在我的GitHub中find完整的configurationhttps://github.com/cnst/StackOverflow.cnst.nginx.conf 。
这应该工作,如果你在做nginx内的redirect。 您将不得不使用headers_more模块构buildNginx,这非常简单 – 请参阅我的Nginx教程 。
location /match/ { add_header HEADER_NAME "header value"; return 301 https://example.com; }
如果你正在代理一个正在返回redirect的应用程序,那么它会更复杂一些,可能涉及到IF语句。 如果在nginx中并不总是像你期望的那样工作,那么在这种情况下你可能会更好的改变应用程序。