iT邦幫忙

0

关于nginx301重定向的问题 高手帮忙看一下是什么问题

if ($host != 'www.xx27.net' ) {
rewrite ^/(.*)$ http://www.xx27.net/$1 permanent;
#proxy_set_header $Host "www.xx27.net";
}
加上这个参数会报错proxy_set_header
错误意思是这个地方不支持这个参数
那我该如何用呢?

1 個回答

2
逮丸逮丸
iT邦大師 1 級 ‧ 2011-02-18 13:56:56

proxy_set_header 是用在 proxy 的模块里,
没用 proxy 功能,就没什么作用吧。
就我有现成使用 proxy 模块的例子来测试:

<pre class="c" name="code">    location / {
    proxy_set_header  X-Real-IP  $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    #proxy_set_header Host $http_host;
    proxy_set_header Host iThelp.ithome.com.tw;
    proxy_redirect off;
    if (-f $request_filename/index.html) {
      rewrite (.*) $1/index.html break;
    }
    if (-f $request_filename.html) {
      rewrite (.*) $1.html break;
    }
    if (!-f $request_filename) {
      proxy_pass http://my_app;
      break;
    }
client_max_body_size 100m;
    }

如果设定成功的话,
是在后端的 my_app 端的 http 环境变数里的 HTTP_HOST 会显示所指定的值。

如果想在 rewrite 后加上 header,
应是可用 add_header
但在 rewrite 上加 Host 好像没那么必要。

所以,如果您的机器有提供多个虚拟主机服务Virtual Host的话,
您可在 server_name _; 的这个缺省名称下设这个rewrite的规则:

<pre class="c" name="code">rewrite ^/(.*)$ http://www.xx27.net/$1 permanent;

并且再设其他的 server_name www.xx27.net; 这区块,
(如果 www.xx27.net 是同一台机器的话)
来指定这virtual host的设定。
这样应不需用到 proxy_set_header 的设定。

我要發表回答

立即登入回答