Nginx中server_name 參數詳解


Nginx中的server_name指令主要用於配置基於名稱的虛擬主機,server_name指令在接到請求后的匹配順序分別為:

1、准確的server_name匹配,例如:

 

server {
     listen       80;
     server_name  domain.com  www.domain.com;
     ...
}

 

 

2、以*通配符開始的字符串:

server {
     listen       80;
     server_name  *.domain.com;
... }

3、以*通配符結束的字符串:

server {
     listen       80;
     server_name  www.*;
     ...
}

4、匹配正則表達式:

server {
     listen       80;
     server_name  ~^(?.+)\.domain\.com$;
... }
nginx將按照1,2,3,4的順序對server name進行匹配,只有有一項匹配以后就會停止搜索,所以我們在使用這個指令的時候一定要分清楚它的匹配順序(類似於location指令)。
server_name指令一項很實用的功能便是可以在使用正則表達式的捕獲功能,這樣可以盡量精簡配置文件,畢竟太長的配置文件日常維護也很不方便。下面是2個具體的應用:
1、在一個server塊中配置多個站點:
server
   {
     listen       80;
     server_name  ~^(www\.)?(.+)$;
     index index.php index.html;
     root  /data/wwwsite/$2;
   }

站點的主目錄應該類似於這樣的結構:

/data/wwwsite/domain.com
/data/wwwsite/nginx.org
/data/wwwsite/baidu.com
/data/wwwsite/google.com

 

這樣就可以只使用一個server塊來完成多個站點的配置。

2、在一個server塊中為一個站點配置多個二級域名。

實際網站目錄結構中我們通常會為站點的二級域名獨立創建一個目錄,同樣我們可以使用正則的捕獲來實現在一個server塊中配置多個二級域名:

 

server
   {
     listen       80;
     server_name  ~^(.+)?\.domain\.com$;
index index.html; if ($host = domain.com){
rewrite ^ http://www.domain.com permanent;
} root /data/wwwsite/domain.com/$1/;
}

站點的目錄結構應該如下:

/data/wwwsite/domain.com/www/
/data/wwwsite/domain
.com/nginx/

這樣訪問www.domain.com時root目錄為/data/wwwsite/domain.com/www/,nginx.domain.com時為/data/wwwsite/domain.com/nginx/,以此類推。

后面if語句的作用是將domain.com的方位重定向到www.domain.com,這樣既解決了網站的主目錄訪問,又可以增加seo中對www.domain.com的域名權重。

 

 

server_name 同樣也可以使用 ip進行匹配,以下是自己使用IP進行配置單的:

    upstream web_app {
      server 127.0.0.1:8080 weight=1 max_fails=2 fail_timeout=30s;
      server 127.0.0.1:8081 weight=1 max_fails=2 fail_timeout=30s;
  }
   server{
    listen 8093;
   #server_name 127.0.0.1:8093;
    server_name 192.168.47.128:8093
    access_log  logs/host.access.log  main;
    location /
    {
    proxy_next_upstream http_502 http_504 error timeout invalid_header;
    proxy_set_header Host  $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://web_app;
    expires      3d;
    }

以上配置的為用兩個tomcat做負載均衡,分別為8080、8081,當通過 192.168.47.128:8093 訪問時會隨機分配到這兩個tomcat上,但是在配置時我把 listen 換成 80 就會訪問不到,原因還沒弄清楚,有知道原因的還請留言告知,不勝感激!!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM