如何在nginx(1.4.6 ubuntu)配置中有条件地添加标头?
起初我试过这样的.
location / {
add_header X-TEST-0 always-0;
set $true 1;
if ($true) {
add_header X-TEST-1 only-true;
}
add_header X-TEST-2 always-2;
}
Run Code Online (Sandbox Code Playgroud)
虽然我期望我的nginx设置所有标题(X-TEST-0,1,2),但它只添加了标题X-TEST-1.
接下来我试着这样.
location / {
add_header X-TEST-0 always-0;
##set $true 1;
##if ($true) {
## add_header X-TEST-1 only-true;
##}
add_header X-TEST-2 always-2;
}
Run Code Online (Sandbox Code Playgroud)
我的nginx按照我的预期添加了标题X-TEST-1和X-TEST-2.
我的问题是......
如何有条件地添加标题?
为什么nginx只添加X-TEST-1和我上面的第一个例子?
提前致谢!
我有一个API服务器的nginx代理.API有时会设置缓存控制标头.如果API没有设置缓存控件,我希望nginx覆盖它.
我怎么做?
我想我想做这样的事情,但它不起作用.
location /api {
if ($sent_http_cache_control !~* "max-age=90") {
add_header Cache-Control no-store;
add_header Cache-Control no-cache;
add_header Cache-Control private;
}
proxy_pass $apiPath;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个可以同时在http和https上处理两个站点的nginx配置,只要客户端从未访问过两个站点,它似乎就可以工作,但是如果这样做的话,则存在缓存/跨站点问题。
# Allow cross origin
location ~* \.(eot|svg|ttf|woff|woff2|json)$ {
if ($http_origin ~* (https?://(admin\.)?example\.com(:[0-9]+)?)) {
add_header 'Access-Control-Allow-Origin' "$http_origin";
}
}
Run Code Online (Sandbox Code Playgroud)
因此,如果我加载example.com,则一切正常,但是当我加载admin.example.com时,会遇到类似问题
(索引):1 XMLHttpRequest无法加载 http://origin.example.com/js/data-lib/currency.json。“ Access-Control-Allow-Origin”标头具有值“ http:// example”。com”不等于提供的来源。来源'http:// admin。例子 因此,不允许访问“ com”。
据我所知,这是因为浏览器将原始请求及其附带的标头缓存了起来,现在,即使来自服务器的另一个请求允许它,它也拒绝了我。证明是,如果我在Chrome开发者工具中选中了“禁用缓存”,则该问题将永远不会发生。
我该如何解决这个问题?是否可以在一个配置中同时完成多个域+ ssl / http,还是有必要根据请求的域和协议将其拆分?
(对我示例中的可怕空间感到抱歉,显然,StackOverflow认为我在编写示例时试图发布链接)