如何重定向来自其他服务器的内容,但不更改URL

时间:2013-08-27 16:16:36

标签: php apache redirect nginx rewrite

我有一个任务: 我有一台主服务器托管一个包含所有业务物流的应用程序。

还有其他服务器(可能是未来的云)充当文件存储。

用户如何获取某些文件? (但只有那些有权访问的人)。

我的想法:

在ServerMain上我将拥有Nginx(作为代理)+ Apache 第一个用户向Nginx发出请求 Nginx代理到Apache。 Apache检查对文件的访问。 如果允许,则Apache将重定向返回到另一个服务器(具有内容路径)。 如果被拒绝,则Apache返回被拒绝的响应。

因此,用户无法看到指向其他服务器的链接。

但这对我不起作用,用户可以看到重定向网址。

我的参数: Nginx在端口80上工作 Apache在端口8080上工作

nginx配置主机

server {

        listen  127.0.0.1:80;
        server_name ap-file.loc;


        server_name_in_redirect on;

        location / {
                proxy_pass      http://127.0.0.1:8080/;
                proxy_redirect   off;
                proxy_set_header  Host $host;
                proxy_set_header  X-Real-IP $remote_addr;
                proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
                client_max_body_size 10m;
                proxy_connect_timeout 90;
        }
}

php页面的代码,重定向到其他服务器

<?php
$newURL = 'http://1.bp.blogspot.com/_16lyaJiGldI/TBekxqet-JI/AAAAAAAAAis/jTGCN4Wfo8Q/s320/smile.jpg';

header('Location: '.$newURL);

该代码适用于apache。

告诉我,我做错了什么?可能是Nginx设置吗?

1 个答案:

答案 0 :(得分:0)

问题 您正在使用标题(&#39;位置:&#39;。$ newURL);它将带有新网址的标题返回给浏览器(导致浏览器重定向到新网址)

<强>解决方案 您可以向数据服务器发出curl请求,并在用户通过身份验证后返回输出,而不是在该位置提供真实的URL。