精华内容
下载资源
问答
  • ngix server_name_in_redirect指令
    千次阅读
    2020-09-05 18:29:43
    Syntax:	server_name_in_redirect on | off;
    Default:	
    server_name_in_redirect off;
    Context:	http, server, location
    
    启用和禁用primary server name的失业 通过server_name指令
    
    当primary server name的使用是禁用的 
    
    HOST请求header字段的名字被使用  ,如果这个字段不存在,
    
    server 的IP地址被使用 
    
    设置server_name_in_redirect 为on时:
    
    访问https://192.168.137.3/download 会跳转到https://10.1.1.1:2443/download/
    
    设置server_name_in_redirect 为off时:

     

    更多相关内容
  • Nginx server_name _ 啥意思?_=localhost?

    千次阅读 2021-12-02 14:11:15
    server_name _ 是啥意思? server_name _没啥意思。我觉得应该把这个替换掉。 假设配置是这样的 nginx.conf ... http { ... # Load modular configuration files from the /etc/nginx/conf.d directory. # See ...

    前言

    • nginx version: nginx/1.20.1
    • CentOS Linux release 7.9.2009 (Core)

    server_name _ 是啥意思?

    server_name _没啥意思。我觉得应该把这个替换掉。

    假设配置是这样的

    nginx.conf

    ...
    http {
        ...
    
        # Load modular configuration files from the /etc/nginx/conf.d directory.
        # See http://nginx.org/en/docs/ngx_core_module.html#include
        # for more information.
        include /etc/nginx/conf.d/*.conf;
    
        server {
            listen       80;
            listen       [::]:80;
            server_name  _;
            root         /usr/share/nginx/html;
    
            # Load configuration files for the default server block.
            include /etc/nginx/default.d/*.conf;
    
            ...
        }
    }
    ...
    

    /etc/nginx/default.d/目录下包含2个conf:

    • domainA.conf
    • domainB.conf

    nginx中有3个server_name,且生效顺序如下:

    • domainA
    • domainB
    • _

    当访问 http://localhost 时

    当访问 http://localhost 时,展示/usr/share/nginx/html/index.html的内容。
    localhost_匹配了(_=localhost)。

    当访问 http://127.0.0.1 时

    当访问 http://127.0.0.1 时,展示domainA的内容。
    127.0.0.1domainA匹配了( 127.0.0.1 无法与三者之中的任何一个匹配,默认选取第一个)。

    当访问 http://domainA 时

    当访问 http://domainA 时,展示domainA的内容。

    当访问 http://domainB 时

    当访问 http://domainB 时,展示domainA的内容。

    _=localhost

    server_name _;server_name localhost; 等效

    server_name 默认配置

    nginx.conf中的顺序改为:

    ...
    http {
        ...
        server {
            listen       80;
            listen       [::]:80;
            server_name  _;
            root         /usr/share/nginx/html;
    
            # Load configuration files for the default server block.
            include /etc/nginx/default.d/*.conf;
    
            ...
        }
        
        # Load modular configuration files from the /etc/nginx/conf.d directory.
        # See http://nginx.org/en/docs/ngx_core_module.html#include
        # for more information.
        include /etc/nginx/conf.d/*.conf;
    }
    ...
    
    展开全文
  • $_SERVER["SERVER_NAME"]获取问题

    千次阅读 2020-05-13 10:17:15
    在使用nginx中,当nginx里的server_name配置了多个域名的时候,发现$_SERVER["SERVER_NAME"]获取的域名是第一个而不是第二个或者第三个 既然有问题,就肯定有解决方案。。。。。。在百度主翻了N久,终于找到了需要...

    在使用nginx中,当nginx里的server_name配置了多个域名的时候,发现$_SERVER["SERVER_NAME"]获取的域名是第一个而不是第二个或者第三个

    既然有问题,就肯定有解决方案。。。。。。在百度主翻了N久,终于找到了需要的资料!原来:$_SERVER[“SERVER_NAME”] 返回的值是由 Nginx 的 fastcgi_param 中 SERVER_NAME 提供的,而默认的配置为:

    fastcgi_param  SERVER_NAME    $server_name;

    Nginx中 $server_name 变量就是上面设置的域名,只会返回第一个!

    这下好办了,把上面的配置改成:

    fastcgi_param  SERVER_NAME    $host;

    就行了。
    另外还需要在server_name配置后面加一行:

    server_name_in_redirect off;

    意思是 让 nginx 在处理自己内部重定向时不默认使用 server_name 设置中的第一个域名!

    $_SERVER['SERVER_NAME']; 如果有域名返回域名,没有域名返回IP地址

    PS:以下是网友Daze的留言,希望对本文读者有所帮助。

    引用

    在某些情况下(具体可参考 wiki.nginx.org),Nginx 内部重定向规则会被启动,例如,当 URL 指向一个目录并且在最后没有包含“/”时,Nginx 内部会自动的做一个 301 重定向,这时会有两种情况:
    1、server_name_in_redirect on(默认),URL 重定向为: server_name 中的第一个域名 + 目录名 + /;
    2、server_name_in_redirect off,URL 重定向为: 原 URL 中的域名 + 目录名 + /。

     

    当你有多个域名要指向同一个虚拟主机,并且你自己写 301 重定向规则把它们合并到某一个域名时,情况就更复杂了:
    首先,nginx 检查 URL,如果符合条件,就用该规则(你写的)做第一遍重定向,接着,检查新生成的 URL,如果符合内部自动重定向之条件,就用前面提到的规则再做一次重定向。


    于 PHP 的 $_SERVER["SERVER_NAME"],在 nginx 中默认是由 nginx 的变量 $server_name
    提供,这时它和重定向没有关系,始终是 server_name 设置中的第一个域名,但这是可以被改变的,在你的 nginx 配置中找到
    fastcgi_param 部分,修改
    fastcgi_param  SERVER_NAME    $server_name;

    fastcgi_param  SERVER_NAME    $host;
    但现在就要注意了,此时的 $_SERVER["SERVER_NAME"] 会受你写的和 nginx 自己的重定向规则所影响而变化。


    在就清楚了,如果 MediaWiki 是通过 $_SERVER["SERVER_NAME"] 来自己处理 URL 的话,那么在 nginx +
    php 的默认环境下,它获得的将始终是 server_name 设置中的第一个域名,所以造成了“不管通过什么域名访问 MediaWiki
    首页,都会被跳转到其中的一个域名上。”,这不是 nginx 的重定向造成的,虽然默认 server_name_in_redirect 是
    on,但这个指令的影响范围仅仅只是 nginx 自己内部的重定向规则,所以,当你在 nginx + php
    的环境中使用多域名虚拟主机,并且你的 php 库、框架、代码大量使用 $_SERVER["SERVER_NAME"] 时,你也许应该:
    1、设置 fastcgi_param  SERVER_NAME    $host;
    2、设置 server_name_in_redirect off; 让 nginx 在处理自己内部重定向时不默认使用  server_name 设置中的第一个域名;
    3、不要使用 nginx 的 rewrite 规则来重定向、合并多个域名。

    然,后俩条是完全可选的,前提是你清楚你在做什么并且小心处理这时的  $_SERVER["SERVER_NAME"],也许更好的做法是保持
    fastcgi_param  SERVER_NAME    $server_name; ,然后合理使用
    $_SERVER["SERVER_NAME"] 和 $_SERVER["HTTP_HOST"]。

    这个问题确实很微妙,也许我的理解还是不完全,好在还有 curl ,慢慢研究了。 🙂

    P.S. nginx 0.7.x 之前的版本还有一个指令 optimize_server_names 会影响内部重定向规则。

    自己测试实例:
    nginx.conf配置:
    第一个server:
    server_name  *.myhz.com;
    root  /wwwroot/myhz.com;
    第二个server:
    server_name  *.paidc.com;
    root  /wwwroot/paidc.com;
    文件内容:
    /wwwroot/myhz.com/index.php的内容是:
    <?
    if (count(explode('a.myhz.com',$_SERVER['SERVER_NAME']))>1)
    {
    echo "a.myhz";
            exit();
    }
    else if (count(explode('b.test.com',$_SERVER['SERVER_NAME']))>1)
    {
    echo "b.myhz";
            exit();
    }
    else
    echo $_SERVER['SERVER_NAME'];
    ?>

    /wwwroot/paidc.com/index.php的内容是:
    <?
    if (count(explode('a.paidc.com',$_SERVER['SERVER_NAME']))>1)
    {
    echo "a.paidc";
            exit();
    }
    else if (count(explode('b.paidc.com',$_SERVER['SERVER_NAME']))>1)
    {
    echo "b.paidc";
            exit();
    }
    else
    echo $_SERVER['SERVER_NAME'];
    ?>

    访问的结果是:
    a.myhz.com显示*.myhz.com
    b.myhz.com显示*.myhz.com
    a.paidc.com显示*.paidc.com
    b.paidc.com显示*.paidc.com
    知道怎么回事了吧?
    就是nginx能区分出来*.myhz.com和*.paidc.com
    *.myhz.com确实解析到了/wwwroot/myhz.com目录,但是php程序区分不出来a.myhz.com和b.myhz.com
    *.paidc.com确实解析到了/wwwroot/paidc.com目录,但是php程序区分不出来a.paidc.com和b.paidc.com

    如果将两个index.php文件中的$_SERVER['SERVER_NAME']换成 $_SERVER["HTTP_HOST"]
    访问结果是:
    a.myhz.com显示a.myhz
    b.myhz.com显示b.myhz
    a.paidc.com
    显示a.paidc
    b.paidc.com显示b.paidc
    这么说来,就一切OK了

    参考:http://ivan.xin/?p=1620

    展开全文
  • nginx server_name 含义

    千次阅读 2022-03-21 11:12:56
    nginx server_name 含义

    作用

    是对请求同一个主机端口,根据请求头中不同host分发到对应虚拟主机(server_name \ host)

    例如:

    
    server {
    	listen 80;
    	server_name www.a.com;
    	location / {
    		default_type text/html;
    		content_by_lua '
    			ngx.say("<p>first</p>")
    		';
    	}
    }
     
    server {
    	listen  80;
    	server_name www.b.com;
    	location / {
    		default_type text/html;
    		content_by_lua '
    			ngx.say("<p>second</p>")
    		';        
    	}
    }
    
    

    为了请求到自己机器的nginx,需要配置hosts

    127.0.0.1  www.a.com
    127.0.0.1  www.b.com
    

    这样分别访问www.a.com 和www.b.com,其实访问127.0.0.1 的80端口,不同的host,ng中配置server_name和请求中host头匹配,对应分发到location中。

    待补充

    匹配优先级,正则通配符写法

    展开全文
  • nginx负载均衡中的server_name _;

    千次阅读 2019-05-25 20:58:36
    server_name _; ... ... } 官网上是这么解释的 在catch-all server示例中,可以看到奇怪的名称“_”: 这个名字没有什么特别之处,它只是无数无效域名中的一个,这些域名永远不会与任何真实的名字交叉。其...
  • 如果有多个server和81端口匹配 server_name和域名相同的server优先匹配 如果没有server_name和域名匹配, 就使用默认server(如 listen 81 default_server;) 如果没有指定默认server, 就命中匹配的第一个server(同一个...
  • nginx配置server_name 参数详解

    千次阅读 2021-02-28 15:12:04
    Nginx中的server_name指令主要用于配置基于名称的虚拟主机,server_name指令在接到请求后, 将按照下面1,2,3,4的匹配顺序对server name进行匹配,只有有一项匹配以后就会停止搜索,所以我们在使用这个指令的时候一定...
  • nginx 多个 server_name 如何匹配? 简单看这个问题,会觉得这个问题很蠢,怎么匹配?不就是根据 server_name 名字匹配的么? 是的,我最开始也是这么觉得的,并且在之前的笔记:Nginx学习日志(二)通过反向代理将...
  • Nginx中server_name 参数详解

    千次阅读 2021-01-12 17:51:51
    Nginx中的server_name指令主要用于配置基于名称的虚拟主机,server_name指令在接到请求后的匹配顺序分别为: 1、准确的server_name匹配,例如: server { listen 80; server_name domain.com www.domain.com; .....
  • 如果IP地址匹配不成功,会对 域名(server_name属性) 进行匹配;如果域名也匹配不成功,则会默认匹配第一个server服务器(因此,当只有一个Nginx服务器时,客户端的请任何情况下都会匹配到这个服务器上)。 到这里...
  • nginx 的server_name配置详解

    千次阅读 2020-05-23 20:52:43
    server name 为虚拟服务器的识别路径。因此不同的域名会通过请求头中的HOST字段,匹配到特定的server块,转发到对应的应用服务器中去。 案例 修改nginx.conf server { listen 80; server_name www; location /...
  • server_name _;//也不明白 别人说配的域名 location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; }//普通定位 ...
  • nginx 配置的server_name参数

    千次阅读 2019-02-20 15:12:07
    nginx中的server_name指令主要用于配置基于名称虚拟主机. 一、 匹配顺序,server_name指令在接到请求后的匹配顺序如下: 1、确切的server_name匹配,例如: server { listen 80; server_name ...
  • nginx配置文件中server_name的作用

    千次阅读 2020-03-07 12:47:44
    最近学习了Nginx,做一些必要的... server name 为虚拟服务器的识别路径。因此不同的域名会通过请求头中的HOST字段,匹配到特定的server块,转发到对应的应用服务器中去。    当我们通过hosts文件指定IP...
  • nginx配置文件nginx.conf之serverserver_name的意义详解

    万次阅读 多人点赞 2018-12-17 18:37:18
    本人在学习nginx的时候被server_name的意义困扰了很久。又是查资料,又是请教人。最后还是自己测试出来的。 你搜到这篇文章说明你已经经过了基本的配置,但是还不懂其中的含义。 先上一段配置 server { listen...
  • nginx server_name解析

    千次阅读 2019-03-28 14:31:27
    nginx会解析http header里的host 找到匹配的server_name 如果没有则用默认的 或者第一个 禁止ip访问: server { listen 80; server_name _; return 404; } server { listen 80; ...
  • nginx 的 default_server 指令可以定义默认的 server 出处理一些没有成功匹配 server_name 的请求,如果没有显式定义,则会选取第一个定义的 server 作为 default_server。 在了解到如上规则后,我们可以捕获未做...
  • nginx配置:server_name的作用

    千次阅读 2022-02-13 18:02:22
    nginx的server_name最新详解
  • Nginx配置中没有server_name会怎样?

    万次阅读 2019-08-30 19:19:22
    Nginx配置中没有server_name会怎样? 答案:相当于填了server_name “”;,不会匹配任何域名。此时Nginx会将HTTP请求交给监听该端口的默认server处理。 Nginx选用server的规则 配置文件nginx.conf中,http{}中可以...
  • nginx中server_name的匹配规则

    万次阅读 2019-01-16 17:01:59
    在开始学nginx的时候server_name明明没有匹配上,但竟然访问到了,还以为server_name不起作用,后来发现server_name的匹配规则是:先遍历所有配置的server_name,如果找到了,则执行对应的server,如果没有找到,则...
  • Syntax: port_in_redirect on | off; Default: port_in_redirect on; Context: http, server, location
  • 这篇文章主要介绍了Nginx虚拟主机配置中server_name的具体写法,server_name服务器名是虚拟主机中必须配置的重要参数,需要的朋友可以参考下 server_name指令可以设置基于域名的虚拟主机,根据请求头部的内容...
  • 匹配方法就是靠请求携带的host和port正好对应其配置中的server_name 和listen。 如果做过ip和域名绑定,ip和域名二者是对等的 比如: server { listen 8080; server_name www.abc.com; access_log /...
  • nginx server_name 多个

    千次阅读 2020-08-28 20:31:05
    nginx server_name 多个 nginx server_name 多个的话,空格隔开就行 server_name baidu.com baidu.me; 如果很多的话可以用正则,我的需求,xxx-api-dev.zzg.me 统一跳转到127.0.0.1:8888 server { listen 80; ...
  • $_SERVER中HTTP_HOST和SERVER_NAME的区别

    千次阅读 2018-02-25 19:59:28
    PHP获取当前域名有两个变量 HTTP_HOST 和 SERVER_NAME,我想知道两者的区别以及哪个更加可靠。首先我想说,百度上那些转来转去的文章都是扯淡!有说相同的,有说不同的,都没说明原因,没经过验证就互相转来转去的,...
  • nginx的默认 server_name

    千次阅读 2020-05-28 19:41:59
    加一条默认的阻挡。 当所有server的规则都不匹配时,nginx会采用第一条server配置,所以一般第一条server会使用阻止页面。 server { listen 80 default_server;... server_name _; return 404; }
  • 记一个nginx server_name配置多个时的坑

    万次阅读 2020-06-13 18:50:36
    背景为了区分线上环境和测试环境,我弄了个自己测试专用的域名test.daemoncoder.com,线上环境的正式域名是www.daemoncoder.com。nginx里的server...
  • nginx配置server_name后不生效

    千次阅读 2020-10-20 00:23:29
    公司办公网默认解析8080端口,所以nginx需要配置不同server_name,相同端口。 问题描述: nginx配置中配置了 http{ xxx server{ xxx; port 8080; server_namewww.name1.com; } server{ xxx; port 8080; ...
  • 现在假设有三台主机,他们的ip分别为: A: 192.168.1.167 B: 192.168.1.168 C: 192.168.1.169 nginx作为代理服务器部署在主机 A 上面,B 和 C 作为两台应用服务器。现在想实现通过A访问B和C,有以下...server {...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,301,868
精华内容 920,747
关键字:

server_name _;