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

我试图设置用户子域名,提供来自特定文件夹的内容: www.example.com/usernameusername.example.com (就像github页面)。

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

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

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

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

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

作为参考,这是我最终把我的nginx网站configuration。 请注意,我正在匹配子域,并从中设置根,而不是从$host因为在Shane的答案,所以我可以在磁盘上使用/ var / www /用户名。 此外,所有用户共享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; }