1. 程式人生 > >Linux+Nginx+Tomcat 多域名,多應用在同一伺服器的配置

Linux+Nginx+Tomcat 多域名,多應用在同一伺服器的配置

Linux+Nginx+Tomcat 多域名,多應用在同一伺服器的整合配置

實現的效果和達到的目的為:

1、有兩個域名www.aaa.com www.bbb.com 分別對應兩個兩個不同的網站,但是公用同一個Nginx和Tomcat伺服器;

2、所有的JSP等動態內容轉發到Tomcat處理,js、圖片等直接由Nginx負責處理;

3、上傳的圖片不在應用的根目錄下面,需要另外指定轉發(Nginx Alias 虛擬目錄)

以下為示例配置檔案:

Tomcat 配置:server.xml

<Host name="www.aaa.com"  appBase="/data/www"      #指定虛擬主機 

www.aaa.com

          unpackWARs="true" autoDeploy="true">

        <Context path="/" docBase="/data/www/aaa"  debug="0"reloadable="true"></Context>

…. ….

<Host name="www.bbb.com"  appBase="/data/www" #指定虛擬主機 ww.bbb.com

  unpackWARs="true" autoDeploy="true">

<Context path="/"docBase="/data/www/bbb" debug="0" reloadable="true"></Context>

… ….

Nginx配置:

編輯Nginx安裝目錄下conf資料夾中的nginx.conf

server {

   listen       80;

   server_name www.aaa.com aaa.com;

    root  /data/www/aaa; #設定網站的資源存放路徑

    index index.html index.htm index.jsp;

   #charset utf-8;

   access_log  /var/log/nginx/aaa.access.log  main;

   location / {

       index index.html index.htm index.jsp;

       root /data/www/aaa;

       proxy_set_header Hostwww.aaa.com; #此引數重要指向tomcatserver.xml中配置的Host name,以轉發給不同的Host處理.

        proxy_pass http://127.0.0.1:8080;

    }

   location ~ /Image/ {  #我這裡嘗試多次只有這種(加“~)才奏效,關於Nginx虛擬目錄其他方式參加後面的參考連結介紹

      root /data/www/;

    }

   #location ~ .*.jsp$ { #所有jsp的頁面均交由tomcat處理

   #     index index.jsp;

   #     proxy_pass http://127.0.0.1:8080; #轉向tomcat處理

   # }

    location~ .*\.(gif|jpg|jpeg|png|bmp|swf)$  #設定訪問靜態檔案直接讀取不經過tomcat

    {

       expires      30d;

    }

   location ~ .*\.(js|css)?$

    {

       expires      1h;

    }

…….

…….

}

server {

   listen       80;

   server_name  www.bbb.com;

    root /data/www/bbb; #設定網站的資源存放路徑

    index index.html index.htm index.jsp;

   #charset utf-8;

   access_log  /var/log/nginx/bbb.access.log  main;

   location / {

       index index.html index.htm index.jsp;

       root /data/www/bbb;

       proxy_set_header Host www.bbb.com;

       proxy_pass http://127.0.0.1:8080;

    }

   #location ~ .*.jsp$ { #所有jsp的頁面均交由tomcat處理

   #     index index.jsp;

   #     proxy_pass http://127.0.0.1:8080; #轉向tomcat處理

   # }

   location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$  #設定訪問靜態檔案直接讀取不經過tomcat

    {

       expires      30d;

    }

   location ~ .*\.(js|css)?$

    {

       expires      1h;

}

… ….


參考文章:http://m.blog.csdn.net/blog/oyxm0/20455153 

http://blog.csdn.net/kobejayandy/article/details/20867351 



【三種Nginx 虛擬目錄使用方式,本人驗證的結果只有(只有這種(加“~”)才奏效,其他兩種方式驗證無果)】

Nginx中有alias與root兩種標籤,最基本的區別是:alias指定的目錄是絕對的地址,root是指定目錄是相對的上級目錄,並且該上級目錄要含有location指定名稱的同名目錄。如:

1 location /Image{
2 alias /data/Image;
3 index index.html index.htm ;
4 }
1 location /Image  {
2 root /data/;
3 index index.html index.htm ;
4 }

這種配置下,訪問http://localhost/Image時,Nginx會去找/data目錄下的Image資料夾

Nginx也有與Apache型別的alias功能,示例配置如下

1 location ~ /Image{
2 root /data/;
3 index index.html index.htm;
4 }

【以下為一篇Nginx虛擬目錄的介紹】

原文出處:http://down.chinaz.com/server/201111/1382_1.htm 

Nginx設定alias實現虛擬目錄 alias與root的用法區別


Nginx 貌似沒有虛擬目錄的說法,因為它本來就是完完全全根據目錄來設計並工作的。如果非要給nginx安上一個虛擬目錄的說法,那就只有alias標籤比較"像",乾脆來說說alias標籤和root標籤的區別吧。最基本的區別:alias指定的目錄是準確的,root是指定目錄的上級目錄,並且該上級目錄要含有location指定名稱的同名目錄。另外,根據前文所述,使用alias標籤的目錄塊中不能使用rewrite的break。

說不明白,看下配置:

location /abc/ {
    alias /home/html/abc/;
}

在這段配置下,http://test/abc/a.html就指定的是/home/html/abc/a.html。這段配置亦可改成

location /abc/ {
    root /home/html/;
}

這樣,nginx就會去找/home/html/目錄下的abc目錄了,得到的結果是相同的。但是,如果我把alias的配置改成:

location /abc/ {
    alias /home/html/def/;
}

  那麼nginx將會從/home/html/def/取資料,這段配置還不能直接使用root配置,如果非要配置,只有在/home/html/下建立一個 def->abc的軟link(快捷方式)了。一般情況下,在location /中配置root,在location /other中配置alias是一個好習慣。至於alias和root的區別,我估計還沒有說完全,如果在配置時發現奇異問題,不妨把這兩者換換試試。

nginx alias的設定

nginx也有像apache的別名功能,格式為:

location ~ /alias {
root /home/www/default;
index index.php;
}

但nginx在處理php指令碼時,需要傳遞給fastcgi才能處理,所以比apache的別名設定多一個,下面我們以phpmyadmin別名設定為例:

location ~ ^/phpmyadmin.+.php$ {
root /home/www/default;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /phpmyadmin {
root /home/www/default;
index index.php;
}

另一篇:nginx虛擬目錄(alias與root的區別) http://www.2cto.com/os/201202/119658.html