1. 程式人生 > >Nginx + Tomcat 反向代理 如何在高效的在一臺伺服器部署多個站點

Nginx + Tomcat 反向代理 如何在高效的在一臺伺服器部署多個站點

首先我們需要安裝好Nginx、jdk、Tomcat,安裝方法已經在 上一篇 說過了,本篇不再贅述。
下來看一下我們的需求,我這裡有三個網站專案工程需要部署(依次對應著三個域名),提供一臺Linux伺服器,要實現訪問對應的域名跳轉到對應的網站。
下來我們看一下為了解決這個問題,我所設計的體系架構圖:

這裡我們假定圖中Linux伺服器公網ip為192.168.2.100,然後假定要在這臺伺服器搭建這麼三個站點:www.nginxtest.NET、admin.nginxtest.Net、app.nginxtest.net。
好了,下來我們具體配置一下:
1.配置Nginx反向代理
我們還是先連線SSH,然後進行下面操作(一般不建議修改預設主配置檔案nginx.conf,所以我們新建負載均衡配置檔案fxdl.conf,保證伺服器安全,如下):
$ ssh

[email protected]             //SSH連線

cd /usr/local/nginx/conf

touch fxdl.conf                 //建立代理配置檔案

vi fxdl.conf                  //用vi編輯器開啟檔案,然後按鍵盤的i

注意:vi編輯器中,鍵盤按 i 進入 INSERT 狀態,按 Esc 退出 INSERT 狀態。
然後輸入以下配置程式碼(域名部分自定義更改成你們自己的域名,註釋部分則按需開啟):

#設定低許可權使用者,為了安全而設定的

user nobody;
 

工作衍生程序數

worker_processes 4;
 

設定錯誤檔案存放路徑

error_log logs/error.log;

error_log logs/error.log notice;

error_log logs/error.log info;

設定pid存放路徑(pid是控制系統中重要檔案)

pid logs/nginx.pid;

設定最大連線數

events{
  worker_connections 1024;
}
 
http {
  #用來設定日誌格式
  log_format main ‘remoteaddrremote_user [t

imelocal]"request” ’
           ‘statusbody_bytes_sent “httprefererhttp_user_agent" "$http_x_forwarded_for”’;
  #用來指定日誌檔案的存放路徑
  access_log /data/wwwlogs/access_nginx.log main;
 
  #開啟高效檔案傳輸模式
  sendfile      on;
  #防止網路阻塞
  tcp_nopush     on;
  #防止網路阻塞
  tcp_nodelay     on;
  #長連線超時時間,單位是秒
  keepalive_timeout  65;
  #散列表的衝突率,預設1024,越大則記憶體消耗更多,但雜湊key的衝突率會降低,檢索速度就更快
  types_hash_max_size 2048;
 
  #副檔名與檔案型別對映表
  include       /usr/local/nginx/conf/mime.types;
  #預設檔案型別
  default_type    application/octet-stream;
 
  #include /etc/nginx/conf.d/*.conf;
 
  #主要是用於設定一組可以在proxy_pass和fastcgi_pass指令中使用額代理伺服器,預設負載均衡方式為輪詢
  upstream tomcat_client {
    server localhost:8080;
  }
 
  #開啟gzip壓縮,開啟後,訪問網頁會自動壓縮
  #gzip on;
 
  #指定伺服器的名稱和引數
  server {
    listen 80;
    server_name app.nginxtest.net;
    location / {
      proxy_pass http://tomcat_client;
      proxy_redirect default;
      #設定代理
      proxy_set_header Host host;proxysetheaderXRealIPremote_addr;
    }
  }
  server {
    listen 80;
    server_name admin.nginxtest.net;
    location / {
      proxy_pass http://tomcat_client;
      proxy_redirect default;
      proxy_set_header Host host;proxysetheaderXRealIPremote_addr;
    }
  }
  server {
    listen 80;
    server_name www.nginxtest.net;
    location / {
      proxy_pass http://tomcat_client;
      proxy_redirect default;
      proxy_set_header Host host;proxysetheaderXRealIPremote_addr;
    }
    location = / {
      #判斷是否為手機移動端
      if ($http_user_agent ~* ‘(iPhone|ipod|iPad|Android|Windows Phone|Mobile|Nokia)’) {
        rewrite . http://www.nginxtest.net/phone break;
      }
      rewrite . http://www.nginxtest.net/pc break;
    }
  }
}
好了就是這麼簡單,Nginx反向代理配置完畢。下來配置Tomcat:
2.配置Tomcat部署多個站點

$ ssh [email protected]             //SSH連線

cd /usr/local/tomcat

cp /usr/local/tomcat/conf/server.xml /usr/local/tomcat/conf/server.xml_bk //備份server.xml原檔案

vi server.xml                  //用vi編輯器開啟檔案,然後按鍵盤的i

我們編輯server.xml,Engine節點下新增以下HOST節點(節點中的域名和站點工程目錄需要自定義修改為你們自己的):

<Host name="www.nginxtest.net" unpackWARs="true" autoDeploy="true"

      xmlValidation=”false” xmlNamespaceAware=”false”>