2013-01-24 110 views
26

的想法是把进入的请求http://abc.example.com/...,并将其改写为http://example.com/abc/...Nginx的转换子域路径组件,而不重定向

这是很容易与301/302重定向的事情:

# rewrite via 301 Moved Permanently 
server { 
    listen 80; 
    server_name abc.example.com; 
    rewrite^$scheme://example.com/abc$request_uri permanent; 
} 

诀窍当abc.example.comexample.com指向相同的Nginx实例时,将此URL更改为透明到客户端。

换句话说,可以Nginx的服务从example.com/abc/...内容时被请求abc.example.com/...没有其他客户端往返

与301完成任务的起点配置

Nginx的配置:

# abc.example.com 
server { 
    listen 80; 
    server_name abc.example.com; 
    rewrite^$scheme://example.com/abc$request_uri permanent; 
} 

# example.com 
server { 
    listen 80; 
    server_name example.com; 
    location/{ 
    # ... 
    } 
} 

回答

30
# abc.example.com 
server { 
    listen 80; 
    server_name abc.example.com; 
    location/{ 
    proxy_pass http://127.0.0.1/abc$request_uri; 
    proxy_set_header Host example.com; 
    } 
} 
+2

伟大工程具有Nginx的代理本身。将主机更改为127.0.0.1,否则Nginx必须解析主机名(一个单独的问题)。添加'$ request_uri',以便在代理请求中追加路径。 –

+0

这很好用。注意静态资产可能会有404. –

+1

@KJPrince 404资产有什么问题? –

相关问题