Nginx用户子域名,我应该是proxy_pass吗?

时间:2011-03-09 17:41:09

标签: nginx subdomain proxypass

我正在尝试设置用户子域,提供来自特定文件夹的内容:www.example.com/username来自username.example.com(就像github页面一样)。

我看过Nginx重写,但我不希望浏览器重定向 - 我希望域名为username.example.com。 无论如何,对this question的评论说我不能重写主机,只能代理主机。 我尝试设置proxy_pass,但所有文档和示例都显示它被用于(显然)代理到另一个主机或端口上的服务,但在我的情况下,我想只代理到另一个位置上的相同的主机和端口。

这是解决此问题的适当方法,如果是,那么Nginx配置语法是什么?

1 个答案:

答案 0 :(得分:0)

这样的事情几乎可以奏效:

server {
  location / {
    # simple version
    if ( $host ~ "user1.example.com" ) {
      proxy_pass http://example.com/user1;
    }

    # generic version
    if ( $host ~ ^(.+)\.example\.com$ ) {
      proxy_pass http://example.com/$1;
    }


  }
}

但是我怀疑它会按预期工作,因为代理网址中有“/ user1”部分,但我不确定其后果。

这样做的另一种方法肯定是使用相同的nginx服务器为所有应用程序服务,或者为每个其他nginx分配给定端口。 我将如何做到这一点:

server {
  location / {

    if ( $host ~ "user1.example.com" ) {
      proxy_pass http://127.0.0.1:8000;
    }

    if ( $host ~ "user2.example.com" ) {
      proxy_pass http://127.0.0.1:8001;
    }
  }
}

上次我这样做是为了一个大学项目并且我使用了一个特定的插件来处理它,也可能有一些插件可以为nginx执行此操作但是在快速搜索后我没有找到任何插件。