nginx - server_name - 序列如何重要

时间:2014-10-04 11:03:00

标签: nginx

这里的问题,我建立了nginx版本1.7.6(我和1.4.2一样)我需要管理以下域名:

  • mydomain.company
  • api.mydomain.company
  • secure.mydomain.company
  • www.mydomain.company

其中只有一个由http服务,所有其他重定向到https,在这里我发布我的nginx.conf文件(我把所有内部用于测试,我知道网站可用),但问题是当我添加管理所有请求的api.mysite.company部分为什么?

 #user  nobody;
    worker_processes  1;

    events {
        worker_connections  1024;
    }

    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        #tcp_nopush     on;

        #keepalive_timeout  0;
        keepalive_timeout  65;

        #gzip  on;

    #################### api_backend ###############################

    upstream api_backend {

            server 127.0.0.1:3000;
            server 127.0.0.1:3001 backup;
        }

    ##################### api.mysite.company ############################

    server {
        listen 80;
        server_name api.mysite.company;

        location / {
                proxy_pass http://api_backend;
        }

    }

########################## mysite.company (80) #########################

    server {
        listen       80;
        server_name  mycompany.company secure.mycompany.company;
    return 301 https://$host$request_uri;
    }

###############################  HTTPS  #################################

    server {
        listen       443 ssl;
        server_name  mycompany.company secure.mycompany.company www.mycompany.company;

        ssl_certificate      /var/local/myc.crt;
        ssl_certificate_key  /var/local/myc.pem;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
    ssl_protocols  SSLv3 TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
            root   mycompany/secure;
            index  index.html;
        }
    }
}

如果移动### mysite.company(80)####部分看起来效果很好,但似乎有时候server_name上的冲突引发了!

2 个答案:

答案 0 :(得分:0)

如果server_name有多个匹配项,nginx将使用第一个匹配项。检查您的站点可用目录中的配置评估顺序。

答案 1 :(得分:0)

根据http://nginx.org/en/docs/http/server_names.html

  

按名称搜索虚拟服务器时,如果名称匹配多个   指定的变体之一,例如通配符名称和常规名称   表达式匹配,将在第一个匹配变体中选择   优先顺序如下:

     
      
  • 确切名称
  •   
  • 以星号开头的最长通配符名称,例如“ *.example.org
  •   
  • 以星号结尾的最长通配符名称,例如“ mail.*
  •   
  • 第一个匹配的正则表达式(按在配置文件中出现的顺序)
  •   

我认为,nginx文档的这一部分“无所不包”。