nginx server_name _;

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx server_name _;相关的知识,希望对你有一定的参考价值。

【解释server_name _】的意思


经常在nginx中看到一段以下的server_name 匹配。在虚拟主机当中。


server_name _;


这里指定的不是什么特别的名字,它只是一个无效的域名。从来不会匹配任何真实名字相匹配。


如:

server {

    listen       8080;

    server_name  _;

    access_log  /data1/logs/nginx/monitor_access.log base;


    root  /data1/www/other/monitor;

    location / { return 403; }


    location ~ "^/(monitor|apc|clear_apc)\.php$" {

        fastcgi_pass   php-fpm;

        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

        include        fastcgi_params;

    }


}



其中当访问:

curl -I  http://localhost:8080/monitor.php


日志格式:


log日志为:

0.001 0.001 127.0.0.1 - unix:/dev/shm/php-fpm1.sock [30/Aug/2016:21:12:52 +0800] localhost "HEAD /monitor.php HTTP/1.1" 200 143 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.16.2.3 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "-" "-" - "127.0.0.1"


其中localhost为nginx的 $host字段。


当其访问:

curl -I http://192.168.100.10:8080/monitor.php


log中$host为192.168.100.10


注意:

变量中$host

功能:该变量的值等于请求头中的Host值,如果Host无效时,那么就处理该请求的Server的名称。

注意:$host和$http_host变量有些情况是有区别的。$host不包括端口号。



疑问:

curl -I  http://localhost:8080/monitor.php



server {

    listen 8080;

    server_name localhost;

    root ...

    location / {

        .....

    }

}


server {

    listen 8080;

    server_name _;

    root ...

    location / {

        .....

    }

}



上面两个虚拟主机,会被匹配到哪个呢?




本文出自 “学通信,第一份工作运维” 博客,请务必保留此出处http://cuidehua.blog.51cto.com/5449828/1844511

以上是关于nginx server_name _;的主要内容,如果未能解决你的问题,请参考以下文章

带有多个“server_name”条目的 nginx“server”指令:始终将第一个传递给 PHP 的 $_SERVER['SERVER_NAME']

nginx在Window平台http自动跳转https设置方法

nginx ssl 拒绝不匹配的 server_name 请求

nginx 80 端口 跳转443端口

Nginx禁止IP访问,只允许域名访问

$_SERVER