0

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

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

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

4

1 回答 1

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;
    }


  }
}

但我怀疑它是否会按预期工作,因为代理 url 中的“/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 做这个,但我在快速搜索后没有找到任何插件。

于 2011-04-07T17:37:45.517 回答