【发布时间】:2016-01-27 23:41:33
【问题描述】:
我需要将 ssi 中的 caller 参数设置为当前 uri,但 $document_uri 工作异常
带有ssi-include的模板部分:
<div class="panel">
<div class="ym-wrapper">
<div class="ym-wbox">
<!--# set var="panel"
value="<!--# include virtual='/panel/?project=project_name&color=dark&caller=$http_referer' -->" -->
<!--# echo var="panel" encoding="none" -->
</div>
</div>
</div>
没错,$http_referer,而不是$document_uri
Nginx 日志格式:
log_format subtimed '$remote_addr - $remote_user [$time_local] '
'"INC $uri$is_args$args" $status $bytes_sent "$http_referer" '
'"$http_user_agent"
/panel/ 的 Nginx 位置:
location /panel/ {
internal;
ssi on;
proxy_set_header Host panel.domain.zone;
proxy_method GET;
proxy_pass http://panel.domain.zone/;
proxy_set_header X-Real-IP $remote_addr;
proxy_connect_timeout 1s;
proxy_send_timeout 2s;
proxy_read_timeout 2s;
proxy_intercept_errors on;
log_subrequest on;
}
我打开页面http://devel.domain.zone,我在 nginx 日志中看到:
xxx.xxx.xxx.xxx - - [15/Oct/2015:18:29:31 +0300] "INC /panel/?project=project_name&color=dark&caller=http://devel.domain.zone" 200 0 "http://devel.domain.zone/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:41.0) Gecko/20100101 Firefox/41.0"
好的,转到页面http://devel.domain.zone/sec/?theme=102 Nginx 日志:
xxx.xxx.xxx.xxx - - [15/Oct/2015:18:30:29 +0300] "INC /panel/?project=project_name&color=dark&caller=http://devel.domain.zone/sec/?theme=102" 200 0 "http://devel.domain.zone/sec/?theme=102" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:41.0) Gecko/20100101 Firefox/41.0"
原来$http_referer 的行为类似于$document_uri...
所以,如果我在 ssi include 中设置 $document_uri 而不是 $http_referer,我会在 nginx 日志中看到如下内容:
xxx.xxx.xxx.xxx - - [15/Oct/2015:18:30:29 +0300] "INC /panel/?project=project_name&color=dark&caller=/ga/ga.js" 200 0 "http://devel.domain.zone/sec/?theme=102" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:41.0) Gecko/20100101 Firefox/41.0"
WTF?!!在什么时候计算$document_uri 变量?如何将变量传递给 include:作为名称还是作为值?
【问题讨论】:
-
仅供参考:不知道你在问什么!你做了什么,你期望什么,你得到了什么?
-
ping。你能澄清我的答案是否遗漏了什么吗?如果没有,如果它被接受/承诺赏金,我将不胜感激。 :-)
标签: nginx