Nginx+Tomcat構建動、靜分離WEB架構

1、簡介javascript

2、環境介紹css

3、後端服務器安裝配置html

4、安裝論壇前端

5、安裝配置前端Nginx服務器java

6、驗證服務mysql


1、Tomcat簡介linux

Tomcat是Apache 軟件基金會(Apache Software Foundation)的Jakarta 項目中的一個核心項目,由Apache、Sun 和其餘一些公司及我的共同開發而成。因爲有了Sun 的參與和支持,最新的Servlet 和JSP 規範老是能在Tomcat 中獲得體現,Tomcat 5 支持最新的Servlet 2.4 和JSP 2.0 規範。由於Tomcat 技術先進、性能穩定,並且免費,於是深受Java 愛好者的喜好並獲得了部分軟件開發商的承認,成爲目前比較流行的Web 應用服務器。目前最新版本是8.0nginx


Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,屬於輕量級應用服務器,在中小型系統和併發訪問用戶不是不少的場合下被廣泛使用,是開發和調試JSP 程序的首選。對於一個初學者來講,能夠這樣認爲,當在一臺機器上配置好Apache 服務器,可利用它響應對HTML 頁面的訪問請求。實際上Tomcat 部分是Apache 服務器的擴展,但它是獨立運行的,因此當你運行tomcat 時,它實際上做爲一個與Apache 獨立的進程單獨運行的c++


當配置正確時,Apache 爲HTML頁面服務,而Tomcat 實際上運行JSP 頁面和Servlet。另外,Tomcat和IIS、Apache等Web服務器同樣,具備處理HTML頁面的功能,另外它仍是一個Servlet和JSP容器,獨立的Servlet容器是Tomcat的默認模式。不過,Tomcat處理靜態HTML的能力不如Apache服務器。目前Tomcat最新版本爲8.0.0-RC3 (alpha) Released程序員


Tomcat 很受廣大程序員的喜歡,由於它運行時佔用的系統資源小,擴展性好,支持負載平衡與郵件服務等開發應用系統經常使用的功能;並且它還在不斷的改進和完善中,任何一個感興趣的程序員均可以更改它或在其中加入新的功能


Tomcat最初是由Sun的軟件構架師詹姆斯·鄧肯·戴維森開發的。後來他幫助將其變爲開源項目,並由Sun貢獻給Apache軟件基金會。因爲大部分開源項目O'Reilly都會出一本相關的書,而且將其封面設計成某個動物的素描,所以他但願將此項目以一個動物的名字命名。由於他但願這種動物可以本身照顧本身,最終,他將其命名爲Tomcat(英語公貓或其餘雄性貓科動物)。而O'Reilly出版的介紹Tomcat的書籍(ISBN 0-596-00318-8)[1]的封面也被設計成了一個公貓的形象。而Tomcat的Logo兼吉祥物也被設計成了一隻公貓


2、環境介紹

193659426.gif

系統版本: CentOS 6.4_x86_64

Nginx版本: nginx-1.4.2 點此下載

JDK版本: jdk-7u40-linux-x64 點此下載

Tomcat版本:apache-tomcat-7.0.42 點此下載

論壇版本: JspRun!_6.0.0_GBK 點此下載

環境介紹:

當用戶訪問時"www.allen.com"網站時,經過Nginx服務器代理,將請求的靜態內容(如:.html|.jpg等)讓web服務器來響應,而請求的動態內容都讓java服務器來響應;這樣就實現了動、靜的分離


3、後端服務器的安裝與配置

一、安裝java服務器

######一、安裝JDK並設置環境變量
[root@java ~]# rpm -ihv jdk-7u40-linux-x64.rpm
[root@java ~]# vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/latest
export PATH=$JAVA_HOME/bin:$PATH
[root@java ~]# . /etc/profile.d/java.sh
######驗證JDK是否安裝成功
[root@java ~]# java -version
java version "1.7.0_40"
Java(TM) SE Runtime Environment (build 1.7.0_40-b43)
Java HotSpot(TM) 64-Bit Server VM (build 24.0-b56, mixed mode)
========================================================================
######二、安裝Tomcat
[root@java ~]# tar xf apache-tomcat-7.0.42.tar.gz -C /usr/local/
[root@java ~]# cd /usr/local/
[root@java local]# ln -s apache-tomcat-7.0.42 tomcat
[root@java local]# vim /etc/profile.d/tomcat.sh
export CATALINA_HOME=/usr/local/tomcat
export PATH=$CATALINA_HOME/bin:$PATH
[root@java local]# . /etc/profile.d/tomcat.sh
######驗證Tomcat是否安裝成功
[root@java local]# catalina.sh version
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Server version: Apache Tomcat/7.0.42
Server built:   Jul 2 2013 08:57:41
Server number:  7.0.42.0
OS Name:        Linux
OS Version:     2.6.32-358.el6.x86_64
Architecture:   amd64
JVM Version:    1.7.0_40-b43
JVM Vendor:     Oracle Corporation
----------------------------------------------------------------------
[root@java ~]# catalina.sh start

二、訪問測試Java服務器

######查看監聽端口,Tomcat默認監聽8080端口
[root@java ~]# ss -tanlp | grep 8080
LISTEN     0      100                      :::8080                    :::*      users:(("java",6163,40))

224059215.gif

三、安裝web服務器

######安裝nginx依賴環境
[root@web ~]# yum -y install pcre-devel gcc gcc-c++ openssl-devel
[root@web ~]# useradd -r nginx
[root@web ~]# tar xf nginx-1.4.2.tar.gz
[root@web ~]# cd nginx-1.4.2
[root@web nginx-1.4.2]# ./configure \
   --prefix=/usr/local/nginx \
   --sbin-path=/usr/local/nginx/sbin/nginx \
   --conf-path=/etc/nginx/nginx.conf \
   --error-log-path=/var/log/nginx/error.log \
   --http-log-path=/var/log/nginx/access.log \
   --pid-path=/var/run/nginx/nginx.pid  \
   --lock-path=/var/lock/nginx.lock \
   --user=nginx \
   --group=nginx \
   --with-http_ssl_module \
   --with-http_flv_module \
   --with-http_stub_status_module \
   --with-http_gzip_static_module \
   --http-client-body-temp-path=/var/tmp/nginx/client/ \
   --http-proxy-temp-path=/var/tmp/nginx/proxy/ \
   --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
   --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
   --http-scgi-temp-path=/var/tmp/nginx/scgi \
   --with-pcre
[root@web nginx-1.4.2]# make && make install
======================================================================
######爲Nginx提供Sysv服務腳本
[root@web ~]# vim /etc/init.d/nginx
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig:   - 85 15
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /etc/nginx/nginx.conf
# config:      /etc/sysconfig/nginx
# pidfile:     /var/run/nginx.pid
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
# Source function library.
. /etc/rc.d/init.d/functions
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
# Source networking configuration.
. /etc/sysconfig/network
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
NGINX_CONF_FILE="/etc/nginx/nginx.conf"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
lockfile=/var/lock/subsys/nginx
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
make_dirs() {
   # make required directories
   user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
   options=`$nginx -V 2>&1 | grep 'configure arguments:'`
   for opt in $options; do
       if [ `echo $opt | grep '.*-temp-path'` ]; then
           value=`echo $opt | cut -d "=" -f 2`
           if [ ! -d "$value" ]; then
               # echo "creating" $value
               mkdir -p $value && chown -R $user $value
           fi
       fi
   done
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    make_dirs
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
restart() {
    configtest || return $?
    stop
    sleep 1
    start
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $nginx -HUP
    RETVAL=$?
    echo
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
force_reload() {
    restart
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
rh_status() {
    status $prog
}
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
rh_status_q() {
    rh_status >/dev/null 2>&1
}
case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac
----------------------------------------------------------------------
[root@web ~]# chmod +x /etc/init.d/nginx
[root@web ~]# chkconfig --add nginx
[root@web ~]# service nginx start
[root@web ~]# chkconfig nginx on

四、訪問測試web服務器

[root@web nginx-1.4.2]# ss -tanlp | grep 80
LISTEN     0      128      *:80       *:*      users:(("nginx",30503,6),("nginx",30504,6))

233713612.gif

五、安裝Mysql服務器

root@mysql ~]# yum -y install mysql-server
root@mysql ~]# service mysqld start
[root@mysql ~]# mysql
mysql> create database bbs;
mysql> grant all on bbs.* to 'bbsuser'@'172.16.%.%' identified by 'bbspass';
mysql> flush privileges;
######註釋:建立一個數據庫並受權用戶,方便後面安裝論壇使用到

六、測試受權用戶是否能使用"172.16.0.0"網段的主機鏈接,遠程主機請肯定安裝了mysql客戶端

[root@java ~]# mysql -ubbsuser -pbbspass -h 172.16.14.4 -e 'show databases';
+--------------------+
| Database           |
+--------------------+
| information_schema |
| bbs                |
| test               |
+--------------------+
######能夠遠程查詢到數聽說明已鏈接成功

4、安裝論壇

一、在java服務器上安裝論壇程序

######建立網站存放目錄
[root@java ~]# mkdir /web
[root@java ~]# unzip JspRun\!_6.0.0_GBK.zip
[root@java ~]# mv upload /web/bbs
------------------------------------------------------------------------
######修改Tomcat的默認訪問端口8080爲80
    <Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
######修改tomcat主配置文件添加虛擬主機
    <Engine name="Catalina" defaultHost="www.allen.com">
      <Host name="www.allen.com"  appBase="/web/bbs"
            unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="bbs_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
        <Context path="" docBase="/web/bbs" />
      </Host>
註釋:將"<Host>"標記的段添加到"Engine"中,而"Engine"中的默認主機改成定義的主機名稱;
name:主機名稱
defaultHost:默認訪問的主機名稱
appBase:網站目錄
unpackWARS:是否自動解壓"war"格式的包
autoDeploy:是否自動部署應用程序
className:類名稱
prefix:日誌名稱
suffix:日誌後綴名
pattern:日誌格式
"Context"標記中path:虛擬目錄名稱,docBase:虛擬目錄路徑
======================================================================
######修改論壇配置文件,指定數據庫主機,數據用戶名密碼及數據庫名稱
[root@java conf]# cd /web/bbs/
[root@java bbs]# vim config.properties
dbhost = 172.16.14.4
dbport=3306
dbuser = bbsuser
dbpw = bbspass
dbname = bbs
======================================================================
######啓動Tomcat服務並查看端口
[root@java ~]# catalina.sh start
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@java ~]# ss -tanlp | grep 80
LISTEN     0      100      :::80    :::*      users:(("java",7493,40))
LISTEN     0      1        ::ffff:127.0.0.1:8005   :::*      users:(("java",7493,53))
LISTEN     0      100      :::8009  :::*      users:(("java",7493,41))

二、安裝論壇程序

103047532.gif

三、點擊下一步-->我贊成-->下一步,進入數據庫配置頁面

103229466.gif

四、點下一步-->(填寫管理員密碼)下一步-->進入建立數據表階段-->而後點103517659.gif-->進入首頁

103622430.gif

五、將論壇程序拷貝到web服務器上面一份,由於WEB服務器要解析靜態文件

######建立網站存放目錄
[root@web ~]# mkdir /web
[root@web ~]# scp -r 172.16.14.3:/web/bbs /web/
######修改Nginx主配置文件
[root@web ~]# vim /etc/nginx/nginx.conf
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
        access_log  logs/host.access.log  main;
        location / {
            root   /web/bbs;
            index  index.html index.htm;
######註釋:開啓訪問日誌功能;修改虛擬主機指定網站網站目錄爲"/web/bbs"
----------------------------------------------------------------------
######建立一個靜態測試頁方便後面測試
[root@web ~]# echo '<h1>WEB:172.16.14.2</h1>' > /web/bbs/index.html
[root@web ~]# mkdir /usr/local/nginx/logs  #建立日誌存放目錄
[root@web ~]# service nginx restart

5、安裝配置Nginx前端服務器

一、安裝方法與第三部分的nginx安裝方法相同,這裏就再也不介紹如何安裝

[root@nginx ~]# vim /etc/nginx/nginx.conf
user  nginx nginx;
worker_processes  2;
worker_rlimit_nofile 51200;
#error_log  logs/error.log;
#pid        logs/nginx.pid;
events {
    use epoll;
    worker_connections  51200;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  logs/access.log  main;
    client_max_body_size 20m;
    client_header_buffer_size 16k;
    large_client_header_buffers 4 16k;
    sendfile        on;
    tcp_nopush     on;
    keepalive_timeout  65;
    gzip  on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_proxied   any;
    gzip_http_version 1.1;
    gzip_comp_level 3;
    gzip_types text/plain application/x-javascript text/css application/xml;
    gzip_vary on;
    proxy_temp_path   /tmp/proxy_temp;
    proxy_cache_path  /tmp/proxy_cache levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=3g;
    proxy_connect_timeout    50;
    proxy_read_timeout       600;
    proxy_send_timeout       600;
    proxy_buffer_size        128k;
    proxy_buffers           16 256k;
    proxy_busy_buffers_size 512k;
    proxy_temp_file_write_size 1024m;
    proxy_next_upstream error timeout invalid_header http_500 http_503 http_404 http_502 http_504;
    server {
        listen       80;
        server_name  www.allen.com;
        access_log  logs/host.access.log  main;
        location / {
        proxy_pass http://172.16.14.3;
        }
    location ~* \.(|html|htm|jpg|jpeg|png|gif|bmp|swf|ico)$ {
        proxy_pass http://172.16.14.2;
    }
    location ~* \.(jsp|css|do)$ {
        proxy_pass http://172.16.14.3;
    }
        #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
======================================================================
[root@nginx ~]# service nginx start

二、修改Nginx主配置文件


6、驗證服務

一、在客戶端使用"www.allen.com"域名訪問測試,注意:因爲沒有"DNS"服務器解析須要修改hosts文件來解析

######添加以下內容解析
C:\Windows\System32\drivers\etc\hosts
172.16.14.1    www.allen.com

112659945.gif

二、訪問靜態測試頁

115153642.gif

二、查看web服務器上nginx訪問日誌

[root@web ~]# tail -5 /usr/local/nginx/logs/host.access.log
172.16.14.1 - - [23/Sep/2013:22:38:39 +0800] "GET /p_w_picpaths/common/softkeyboard.gif HTTP/1.0" 304 0 "http://www.allen.com/include/css/keyboard.css" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0" "-"
172.16.14.1 - - [23/Sep/2013:22:38:39 +0800] "GET /p_w_picpaths/default/link.gif HTTP/1.0" 304 0 "http://www.allen.com/forumdata/cache/style_1.css" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0" "-"
172.16.14.1 - - [23/Sep/2013:23:04:02 +0800] "GET /index.html HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0" "-"
172.16.14.1 - - [23/Sep/2013:22:38:39 +0800] "GET /p_w_picpaths/default/forumbox_head.gif HTTP/1.0" 304 0 "http://www.allen.com/forumdata/cache/style_1.css" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0" "-"
172.16.14.1 - - [23/Sep/2013:23:04:01 +0800] "GET /index.html HTTP/1.0" 200 25 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0" "-"
----------------------------------------------------------------------
######由上可見,訪問"www.allen.com"域名時,全部靜態內容都轉發到web服務器上;如圖片

三、查看java服務器上Tomcat訪問日誌

[root@java ~]# tail -5 /usr/local/tomcat/logs/bbs_access_log.2013-09-14.txt
172.16.14.1 - - [14/Sep/2013:23:26:57 +0800] "GET /forumdata/cache/style_1.css HTTP/1.0" 304 -
172.16.14.1 - - [14/Sep/2013:23:26:57 +0800] "GET /forumdata/cache/style_1_append.css HTTP/1.0" 304 -
172.16.14.1 - - [14/Sep/2013:23:27:02 +0800] "GET /member.jsp?action=list HTTP/1.0" 200 6839
172.16.14.1 - - [14/Sep/2013:23:27:02 +0800] "GET /forumdata/cache/style_1_append.css HTTP/1.0" 304 -
172.16.14.1 - - [14/Sep/2013:23:27:02 +0800] "GET /forumdata/cache/style_1.css HTTP/1.0" 304 -
------------------------------------------------------------------------
######由上可見,訪問的動態內容都轉發到Java服務器來解析;如jsp結尾的文件

到此,Nginx+Tomcat實現WEB網站的動、靜分離已經完成;後面將會更新Apache+Tomcat如何實現Apache代理Tomcat及如何實現會話保存...

相關文章
相關標籤/搜索