1. 程式人生 > >Nginx學習---用不同域名訪問同一臺機器的不同專案

Nginx學習---用不同域名訪問同一臺機器的不同專案

Nginx是一款面向效能設計的HTTP伺服器,相較於Apache、lighttpd具有佔有記憶體少,穩定性高等優勢。與舊版本(<=2.2)的Apache不同,nginx不採用每客戶機一執行緒的設計模型,而是充分使用非同步邏輯,削減了上下文排程開銷,所以併發服務能力更強。整體採用模組化設計,有豐富的模組庫和第三方模組庫,配置靈活。 在Linux作業系統下,nginx使用epoll事件模型,得益於此,nginx在Linux作業系統下效率相當高。同時Nginx在OpenBSD或FreeBSD作業系統上採用類似於epoll的高效事件模型kqueue。(來自wikipedia)

我也才接觸

Nginx不久,今天抽空使用了下,感覺非常好,很簡單就可以解決同一臺機器同時跑兩個或者多個專案,而且都通過域名從80埠走。

難得開虛擬機器了,就直接用Windows版本來做測試。
首先我修改了hosts,添加了下面一行:

127.0.0.1 www.ergouge.com www.ergouge.net
即用兩個不同的域名來訪問不同的專案,用tomcat7來作為動態資源伺服器,用Nginx作為靜態資源的伺服器。

下載好nginx-1.8.1,在C盤根目錄解壓,然後在主目錄下新建data目錄,用來存放靜態資源,本次測試只兩張圖片作為測試,因此就在data目錄裡面新建images目錄,然後拷貝進去兩張圖片(1.gif,2.jpg)。

接著在tomcat7主目錄下的webapp目錄中新建兩個專案資料夾testnginx1和testnginx2,裡面就直接放簡單的一個html檔案,也不用動態jsp了,兩個index.hmtl分別如下:

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description"
content="">
<title>Test Nginx</title> </head> <body style="text-align:center;"> 測試NGINX,不同域名對映到同一臺伺服器的不同專案中。此頁面時www.ergouge.com域名。 <div style="margin: 0 auto;"><img src="/images/2.jpg" ></div> </body> </html>
<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
  <title>Test Nginx</title>
 </head>
 <body style="text-align:center;">
   測試NGINX,不同域名對映到同一臺伺服器的不同專案中。此頁面時www.ergouge.net域名。
   <div style="margin: 0 auto;"><img src="/images/1.gif" ></div>
 </body>
</html>

接下去就是nginx配置檔案了,具體配置的含義略過,網上有很多詳細解析每條指令含義的文章。

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
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;
    upstream ergouge_web_server {
         server localhost:8080;
    }
    server {
        listen       80;
        server_name  www.ergouge.com;
        location / {
        proxy_pass http://ergouge_web_server/testnginx1/;
        }
        location ~ \.(gif|jpg|png)$ {
            root   data;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    server {
        listen       80;
        server_name  www.ergouge.net;
        location / {
        proxy_pass http://ergouge_web_server/testnginx2/;
        }
    location ~ \.(gif|jpg|png)$ {
        root   data;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
    }
}

Windows下啟動nginx的方法有三種
* 雙擊nginx.exe
* cmd到nginx主目錄,輸入nginx,回車
* cmd到nginx主目錄,輸入start nginx
建議選擇第三種,這樣控制檯不會被鎖定,然後還有些命令:

  • stop — fast shutdown
  • quit — graceful shutdown
  • reload — reloading the configuration file
  • reopen — reopening the log files

最後做測試,啟動tomcat,確認tomcat啟動無誤,然後啟動nginx

在瀏覽器中輸入www.ergouge.com:
1.gif

在瀏覽器中輸入www.ergouge.net:
2.jpg

實際應用中,可以將兩個域名都解析到同一臺伺服器上,然後如此配置,即可實現同一臺伺服器部署兩個專案,都走80埠