问个nginx配置proxy_set_header的问题

484 views
Skip to first unread message

eN_Joy

unread,
Feb 13, 2014, 6:46:59 PM2/13/14
to open...@googlegroups.com
有个nginx配置的问题,一直很受困扰,跟openresty(正在学习中)关系可能不大,但是在这里借用一下达人们的脑袋;-)
位置是这样配置的:

location /get
{
set $hostx "";
set $addrs "";
if ( $uri ~ "^/get/http./+([^/]+)/(.+)$") {
set $hostx $1;
set $addrs $2;
}
resolver 8.8.8.8;
proxy_set_header Referer " ";
proxy_pass http://$hostx/$addrs;
proxy_redirect off;
access_log /var/log/nginx/get_access.log;
}

基本上浏览器指向:

http://mysite.com/get/http://foo.com/bar/some.html

时会返回:
http://foo.com/bar/some.html

这一步算是达到目的。只是语句 `proxy_set_header referer " "`好像被忽略. 不管填入什么字串(上例置空),  get_access.log 日志总是显示referer域为本站实际链接页面。想请教一下:
proxy_set_header Referer " ";到底是做什么用的呢?

多谢!

Thanks,

Harold.Miao

unread,
Feb 13, 2014, 9:24:39 PM2/13/14
to open...@googlegroups.com
加一个  proxy_set_header   Host  XXX;  试试

eN_Joy <jin...@gmail.com>于2014年2月14日星期五写道:
--
--
邮件来自列表“openresty”,专用于技术讨论!
订阅: 请发空白邮件到 openresty...@googlegroups.com
发言: 请发邮件到 open...@googlegroups.com
退订: 请发邮件至 openresty+...@googlegroups.com
归档: http://groups.google.com/group/openresty
官网: http://openresty.org/
仓库: https://github.com/agentzh/ngx_openresty
教程: http://openresty.org/download/agentzh-nginx-tutorials-zhcn.html


--

Best Regards,
Harold Miao

Jindan Zhou

unread,
Feb 13, 2014, 10:24:47 PM2/13/14
to open...@googlegroups.com
多谢回复。做了两个实验:
1. proxy_set_header host $host;
这个 $host应该取值 http://mysite.com (或mysite.com)。日志显示为404错误。

2. proxy_set_header host $hostx;
这个$hostx应该取值http://foo.com(或foo.com)。日志显示200 OK。

我分析两个实验是有用的,因为显示出`proxy_set_header foo bar` 指令被执行,所以更加值得探寻何以`proxy_set_header referer foo`没有被执行。是否还需要其他指令配合?

·referer·的大小写经实验好像是无关。
.--- .. -. -.. .- -.    --.. .... --- ..-

Weibin Yao

unread,
Feb 13, 2014, 11:07:51 PM2/13/14
to open...@googlegroups.com
proxy_set_header指令只是改变往后端发送的请求头,不会改变原始的 请求头。你的需求是什么?


On 2014/2/14 10:24, Harold.Miao wrote:
加一个  proxy_set_header   Host  XXX;  试试

eN_Joy <jin...@gmail.com>于2014年2月 14日星期五写道:
有个nginx配置的问题,一直很受困扰,跟openresty(正在学习中)关系可能不大,但是在这里 借用一下达人们的脑袋;-)

位置是这样配置的:

location /get
{
set $hostx "";
set $addrs "";
if ( $uri ~ "^/get/http./+([^/]+)/(.+)$") {
set $hostx $1;
set $addrs $2;
}
resolver 8.8.8.8;
proxy_set_header Referer " ";
proxy_pass http://$hostx/$addrs;
proxy_redirect off;
access_log /var/log/nginx/get_access.log;
}

基本上浏览器指向:

http://mysite.com/get/http://foo.com/bar/some.html

时会返回:
http://foo.com/bar/some.html

这一步算是达到目的。只是语句 `proxy_set_header referer " "`好像被忽略. 不管填入什么字串(上例置空),  get_access.log 日志总是显示referer域为本站实际链接页面。想请教一下:
proxy_set_header Referer " ";到底是做什么用的呢?

多谢!

Thanks,
--


-- 
Thanks
-YWB

Jindan Zhou

unread,
Feb 14, 2014, 12:33:56 AM2/14/14
to open...@googlegroups.com
需求是定制请求http://foo.com/bar/some.html页面头信息的referer域。
我试过一个其他的方法:
先设置一个透明代理侦听 8008端口:
server
{
    listen 8008;
    location / {
        resolver 8.8.8.8;
        proxy_pass http://$http_host$request_uri;
    }
    access_log /var/log/nginx/proxy_access.log;
}
透明代理本身是成功的,在浏览器端设置这个代理的话,proxy_access.log记录了所有的流量。
http://foo.com/bar/some.html 的URL转写一下,配置一个location
(范例URL为:
/www.patterns.com/cat/subcat/sample.html

location ~* (patterns) { set $hostx ""; set $addrs ""; if ( $uri ~ "^/(.*?)(/.*)$") { set $hostx $1; # could be www.patterns.com set $addrs $2; # could be /cat/subcat/sample.html } proxy_pass http://127.0.0.1:8008/http://$hostx$addrs; proxy_set_header referer ""; }
这个配置确实将/www.patterns.com/cat/subcat/sample.html 送到了8008端口,日志显示:
127.0.0.1 - - [12/Feb/2014:20:44:28 -0600] "GET /http://www.patterns.com/cat/subcat/sample.html HTTP/1.0" 502 574 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36"

注意:
1. 这时 referer域的设置生效了, 显示为空;
2. 代理收到的请求为: ·
"GET /http://www....",而不是·"GET http://www...`,所以结果为502 Bad Gateway. (通过浏览器设置代理访问时日志为 ·"GET http://www...`,日志显示为200 OK)

不太懂的是,
1.何以在这种情况下,
proxy_set_header referer ""; 又显示指令被执行呢?
2.location的配置,能否使到8008端口收到http://www...的请求,而不是/http://www...这样的呢?

多谢。



--
--
邮件来自列表“openresty”,专用于技术讨论!
订阅: 请发空白邮件到 openresty...@googlegroups.com
发言: 请发邮件到 open...@googlegroups.com
退订: 请发邮件至 openresty+...@googlegroups.com
归档: http://groups.google.com/group/openresty
官网: http://openresty.org/
仓库: https://github.com/agentzh/ngx_openresty
教程: http://openresty.org/download/agentzh-nginx-tutorials-zhcn.html



--

Weibin Yao

unread,
Feb 14, 2014, 12:42:41 AM2/14/14
to open...@googlegroups.com
proxy_set_header referer "http://$hostx$addrs";
是要这样吗?

On 2014/2/14 13:33, Jindan Zhou wrote:
需求是定制请求http://foo.com/bar/some.html页 面头信息的referer域。
有个nginx配置的问题,一直很受困扰,跟openresty(正在学习中)关系 可能不大,但是在这里 借用一下达人们的脑袋;-)
--


-- 
Thanks
-YWB


-- 
Thanks
-YWB

Jindan Zhou

unread,
Feb 14, 2014, 12:52:43 AM2/14/14
to open...@googlegroups.com

抱歉,今天已经洗洗睡了,明天再试。我的猜测是在我的第一段代码中,仍然会被忽略。而在我8008端口代码中会执行,但是因为代码的502错误,所以不能采用。谢谢!
Good night all!

--- Sent from mobile device

Reply all
Reply to author
Forward
0 new messages