2013-03-11 258 views
0

我知道这个问题是asked before on SO,但我无法在我的服务器上复制它。将网址映射到子网域(NGINX)

我想要做的是,当用户去medicine.example.com,子域应映射到example.com/sites/medicine。所以用户看到的网址是medicine.example.com。 index.php通过PHP被剥离。

以下代码给我一个502 bad gateway错误。

server { 
    listen  80; 
    listen  443 ssl; 
    server_name medicine.example.com; 

    location/{ 
     rewrite    ^([^.]*[^/])$ $1/ permanent; 
     proxy_pass_header Set-Cookie; 
     proxy_pass   https://example.com/sites$request_uri; 
    } 
} 

理想地,该解决方案将是一个通配符/正则表达式为基础的,使得不止medicine.example.com可以被映射。思考?

+0

简单地说'https://example.com/sites/medicine/$uri;'的'proxy_pass'值是否可以工作(不需要重写)?顺便说一句,你在看重定向还是真的代理? – 2013-03-11 14:48:27

+0

@Jack谢谢,不行不行。 '$ request_uri'与'$ uri'变量来自哪里呢?我从来没有真正明白这一点? – 2013-03-11 14:48:52

+0

我**不要**想重定向的网址。我想保留它,'medicine.example.com'。顺便说一句,我不知道代理是什么。 – 2013-03-11 15:07:41

回答

0

我相信,如果你希望浏览器中的URL保持不变,你不需要重写。所以你只需要这个(@Jack在$ uri前面有一个额外的/)。什么是用户输入的

server { 
    listen  80; 
    listen  443 ssl; 
    server_name medicine.example.com; 

    location/{ 
     proxy_pass  $scheme://example.com/sites/medicine$request_uri 
} 

这里有一个链接,$ URI与$ REQUEST_URI

$方案应该返回HTTP或HTTPS视。基本上$ uri不包含参数。 http://wiki.nginx.org/HttpCoreModule#.24request_uri

+0

谢谢,但我试过,没有去 – 2013-03-14 11:34:52

+0

你的日志说什么?这个问题可能与你的'proxy_pass_header'语句有关。尝试'proxy_pass_header主机$主机;'甚至'proxy_pass_header主机example.com'我认为你需要使用add_header的cookie。 – haley 2013-03-14 14:24:16

0

额外的路径将被自动转发到上游服务器。所以不需要附加$ request_uri。 Nginx很简单。

location/{ 
    proxy_pass  http://example.com/sites/medicine 
} 

也不需要为上游服务器使用https,因为它浪费了ssl协商的资源。使用http更好,因为你的上游服务器是内部的。交通安全。