基于 $hostname 的 nginx server_name

Rob*_*mer 9 nginx hostname

根据Nginx wiki,$hostname变量设置为 gethostname 返回的机器主机名

我试过了,虽然gethostname我的 Debian 盒子不起作用,但它仍然正确地返回主机。然后我尝试使用该变量$hostname来设置server_name,但这不起作用。

为什么会这样,还有其他方法可以实现吗?

server {
    listen   80;

    autoindex off;

    server_name  static.$hostname;
    root   /var/www/static;

    access_log  /var/log/nginx/localhost.access.log;

    location / {
        index  index.html;
    }

    error_page  404  /404.html;
    error_page  500 502 503 504  /50x.html;
}
Run Code Online (Sandbox Code Playgroud)

kol*_*ack 7

nginx 中的大多数变量只存在于运行时,而不存在于配置时。

因此,大多数变量不能与server_name指令一起使用。既然$hostname是一个恒定值,有一个明确的检查准确 $hostnameserver_name处理程序。

它只允许server_name将 设置为$hostname,而不允许设置为static.$hostname。您可以修补源代码以使其支持该功能(ngx_http_core_module.c, 查找$hostname),但是您不能使用现有代码来执行此操作。