Nginx - 根据 server_name 更改根目录?

Xeo*_*oss 6 nginx

我试图通过不为我测试的每个新站点创建新的 nginx 服务器配置来节省我的开发机器上的一些时间。我想知道 nginx 是否有办法根据我正在加载的域更改根目录。

所以如果我有

mysite.loc
myothersite.loc
something.loc
Run Code Online (Sandbox Code Playgroud)

Nginx 会往里面看

www/mysite.loc
www/myothersite.loc
www/something.loc
Run Code Online (Sandbox Code Playgroud)

这将使我能够更快地在模拟域上测试新事物,因为我不必为每个人都使用新的 /etc/nginx/sites-available 配置。

server {
    listen 80;
    server_name *.loc;
    root /www/$host;
    index index.html;
}
Run Code Online (Sandbox Code Playgroud)

这可能吗?还有另一种方法吗?

cor*_*ump 7

nginx的配置有什么可以帮助你:

server {
  server_name   ~^(www\.)?(?<domain>.+)$;
  root  /sites/$domain;
}
Run Code Online (Sandbox Code Playgroud)

我认为这正是您想要的,对吗?搜索命名捕获以获取文档的这一部分,但我强烈建议您阅读server_name.


小智 7

你也可以这样做

  server_name _; 
  root   /opt/railo/tomcat/webapps/$host;
Run Code Online (Sandbox Code Playgroud)

不确定这是否是一个好主意,但我已经对其进行了测试并且它有效。


nor*_*ree 6

因为if 条件中不允许使用root指令。如果您判断复杂,请参考此解决方案。

set $PROJECT "release";
if ($host ~ "beta.my.site") {
    set $PROJECT "beta";
}
root /home/northtree/$PROJECT/;
Run Code Online (Sandbox Code Playgroud)