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

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

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

我查看了 Nginx 重写,但我不想让浏览器重定向——我希望域名为 username.example.com。无论如何,对这个问题说我无法重写主机,只能代理到它。我尝试设置一个proxy_pass,但所有文档和示例都显示它用于(显然)代理到另一台主机或端口上的服务,但就我而言,我只想代理到同一主机和端口上的另一个位置。

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

答案1

处理这个问题的简单方法是让 nginx 将每个目录视为不同的虚拟主机。

server_name _;
root /var/www/$host;

这将要求文件的物理路径为 而/var/www/username.example.com/不是/var/www/username/

答案2

作为参考,这是我最终在 nginx 站点配置中输入的内容。请注意,我匹配子域并从中设置根目录,而不是$host像 Shane 的回答中那样从中设置,因此我可以使用磁盘上的 /var/www/username。此外,所有用户都共享stylesheetsjavascripts文件夹。

server_name _;

set $myroot "";
if ($host ~ (.*)\.example\.com) {
          set $myroot $1;
}
if ($host ~ ^www\.example\.com) {
  set $myroot "";
}

location / {
  root   /var/www/$myroot;
  index  index.html index.htm;
  autoindex on;
}

location ~ ^(/stylesheets|/javascripts) {
  root /var/www;
}

相关内容