我正在尝试设置用户子域,从特定文件夹提供内容: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。此外,所有用户都共享stylesheets
和javascripts
文件夹。
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;
}