目的:nginx處理用戶請求的靜態頁面,tomcat處理用戶請求jsp頁面,來實現動態分離,nginx處理靜態頁面效率遠高於tomcat,這樣一來就能更好的提升併發,處理性能。javascript
準備軟件:css
下載jdk1.7:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.htmlhtml
下載tomcat8.0:http://tomcat.apache.org/download-80.cgijava
下載nginx1.4.4:http://nginx.org/en/download.htmllinux
1、JDK配置nginx
[root@localhost ~]# tar zxvf jdk-7u45-linux-x64.tar.gz [root@localhost ~]# mv jdk1.7.0_45/ /usr/local/jdk [root@localhost ~]# vi /etc/profile JAVA_HOME=/usr/local/jdk PATH=$PATH:$JAVA_HOME/bin CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export JAVA_HOME PATHCLASSPATH [root@localhost ~]# source /etc/profile [root@localhost ~]# java -version #顯示版本說明成功 java version"1.7.0_45"
2、Tomcat配置web
[root@localhost ~]# tar zxvf apache-tomcat-8.0.0-RC5.tar.gz [root@localhost ~]# mv apache-tomcat-8.0.0-RC5/usr/local/tomcat
#默認tomcat是root身份運行的,這樣不安全,咱們設置來用普通用戶
apache
[root@localhost ~]# groupadd tomcat [root@localhost ~]# useradd -g tomcat tomcat [root@localhost ~]# passwd tomcat [root@localhost ~]# chown tomcat.tomcat -R /usr/local/tomcat [root@localhost ~]# su - tomcat /usr/local/tomcat/bin/startup.sh [root@localhost ~]# echo "su - tomcat /usr/local/tomcat/bin/startup.sh" >> /etc/rc.local #開機啓動
3、Nginx安裝配置
後端
[root@localhost ~]# groupadd nginx [root@localhost ~]# useradd -g nginx -s /sbin/nologin nginx [root@localhost ~]# yum install –y make zlib-devel openssl-devel pcre-devel [root@localhost ~]# tar zxvf nginx-1.4.4.tar.gz [root@localhost ~]# cd nginx-1.4.4 [root@localhost nginx-1.4.4]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_gzip_static_module --with-http_stub_status_module [root@localhost nginx-1.4.4]# make && make install
#主配置文件配置
緩存
[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf user nginx; worker_processes 1; error_log logs/error.log; pid logs/nginx.pid; events { worker_connections 1024; } 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; sendfile on; keepalive_timeout 65; #gzip壓縮功能設置 gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 2; gzip_types text/plain application/x-javascripttext/css application/xml; gzip_vary on; server { listen 80; server_name www.test.com; location / { #jsp網站程序根目錄,通常nginx與tomcat在同一個目錄 root /usr/local/tomcat/webapps/ROOT; index index.html index.jsp index.html; } location ~ .*.jsp$ { index index.jsp; proxy_pass http://127.0.0.1:8080; #來自jsp請求交給tomcat處理 proxy_redirect off; proxy_set_header Host $host; #後端的Web服務器能夠經過X-Forwarded-For獲取用戶真實IP proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; #容許客戶端請求的最大單文件字節數 client_body_buffer_size 128k; #緩衝區代理緩衝用戶端請求的最大字節數 proxy_connect_timeout 90; #nginx跟後端服務器鏈接超時時間(代理鏈接超時) proxy_read_timeout 90; #鏈接成功後,後端服務器響應時間(代理接收超時) proxy_buffer_size 4k; #設置代理服務器(nginx)保存用戶頭信息的緩衝區大小 proxy_buffers 6 32k; #proxy_buffers緩衝區,網頁平均在32k如下的話,這樣設置 proxy_busy_buffers_size 64k;#高負荷下緩衝大小(proxy_buffers*2) proxy_temp_file_write_size 64k; #設定緩存文件夾大小,大於這個值,將從upstream服務器傳 } location ~ .*\.(gif|jpg|png|bmp|swf)$ #由nginx處理靜態頁面 { expires 30d; #使用expires緩存模塊,緩存到客戶端30天 } location ~ .*\.( jsp|js|css)?$ { expires 1d; } error_page 404 /404.html; #錯誤頁面 error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
#編寫nginx啓動、中止、重啓等SysV管理腳本,方便使用
[root@localhost ~]# vi /etc/init.d/nginx #!/bin/bash # chkconfig: 345 99 20 # description: Nginx servicecontrol script PROG="/usr/local/nginx/sbin/nginx" PIDF="/usr/local/nginx/logs/nginx.pid" case "$1" in start) $PROG echo "Nginx servicestart success." ;; stop) kill -s QUIT $(cat $PIDF) echo "Nginx service stopsuccess." ;; restart) $0 stop $0 start ;; reload) kill -s HUP $(cat $PIDF) echo"reload Nginx configsuccess." ;; *) echo "Usage: $0{start|stop|restart|reload}" exit 1 esac
[root@localhost ~]# chmod +x /etc/init.d/nginx [root@localhost ~]# service nginx restart [root@localhost ~]# chkconfig --add nginx [root@localhost ~]# chkconfig nginx on
4、性能測試
下面咱們使用的ab壓力測試工具,模擬發起一次1萬的併發請求,使用的index.html頁面是百度首頁代碼
。。。。。
主要參數說明:
Requests per second:平均每秒處理事務數
Time per request:平均事務響應時間
Tranfer rate:平均每秒吞吐量
經上面測試得出:nginx每秒能請求6000次,而tomcat只請求1000次。
nginx每秒吞吐量是3.6M,tomcat每秒吞吐量0.6M
由此看來,nginx是tomcat6倍的處理能力,若是網站程序靜態頁面多的話,就應該考慮使用Nginx與Tomcat整合來使用。
另外兩篇文章: