Nginx與Tomcat簡易分散式部署操作總結
此次主要為了練習和熟悉Nginx這個反向代理伺服器的反向代理功能和它的負載均衡功能。反向代理,主要用於伺服器叢集分散式部署的情況下,反向代理隱藏了伺服器的資訊。以前沒有自己安裝和配置使用過,這次練習,總結一下安裝和使用心得。
Nginx安裝總結:
Nginx安裝非常容易,類似於Tomcat安裝(下面的所有安裝都在centOS 7系統中安裝),
本人安裝nginx-1.12.2.tar.gz版本。
安裝Nginx時,必須先安裝相應的編譯工具,
#yum -yinstall gcc gcc-c++ autoconf automake
此外,Nginx還需要依賴以下工具:
zlib:Nginx提供gzip模組,需要zlib庫支援
openssl:Nginx提供ssl功能
pcre:支援地址重寫rewrite功能
yum -yinstall zlib zlib-devel openssl openssl--devel pcre pcre-devel
將已下載好的nginx-1.12.2.tar.gz解壓: tar –vxzf nginx-1.12.2.tar.gz
配置configure:./configure --prefix=/usr/local/nginx --user=nobody
prefix是設定安裝目錄,而user是設定nginx的worker使用者
執行編譯和安裝命令 make make install
將Nginx設定Linux系統開機啟動:
建立設定啟動指令碼檔案nginx,然後拷貝到/etc/init.d/下
執行設定檔案的執行許可權chmod a+x /etc/init.d/nginx將指令碼檔案設定成可執行檔案
使用chkconfig進行管理,將nginx服務加入chkconfig管理列表chkconfig --add /etc/init.d/nginx
加完這個之後,就可以使用service對nginx進行啟動,重啟等操作了
servicenginx start
servicenginx stop
然後通過chkconfig將nginx啟動
Chkconfignginx on
Tomcat安裝類似:
解壓apache-tomcat-8.5.23.tar.gz到指定位置
tomcat伺服器執行時是需要JDK支援的,所以必須配置好JDK用到的那些環境變數
編輯/etc下的profile檔案,新增如下資訊(jdk資訊):
# jdkinfoMessage
exportJAVA_HOME=/usr/local/java/jdk1.8.0_161
exportJRE_HOME=/usr/local/java/jdk1.8.0_161/jre
exportPATH=$PATH:/usr/local/java/jdk1.8.0_161/bin
exportCLASSPATH=./:/usr/local/java/jdk1.8.0_161/lib:/usr/local/java/jdk1.8.0_161/jre/lib
本人使用Nginx作為接收請求的伺服器,以下是我的個人Nginx配置檔案:
worker_processes 2;
#工作模式及連線數上限
events {
#epoll是多路複用IO(I/OMultiplexing)中的一種方式,
#僅用於linux2.6以上核心,可以大大提高nginx的效能
use epoll;
#單個後臺worker process程序的最大併發連結數
worker_connections 2048;
}
# http設定
http {
#設定mime型別,型別由mime.type檔案定義
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 指令指定nginx 是否呼叫 sendfile 函式(zerocopy 方式)來輸出檔案
#對於普通應用,必須設為 on,
#如果用來進行下載等應用磁碟IO重負載應用,可設定為 off,
#以平衡磁碟與網路I/O處理速度,降低系統的uptime.
sendfile on;
#tcp_nopush on;
#連線超時時間
#keepalive_timeout 0;
keepalive_timeout 65;
#開啟gzip壓縮
gzip on;
# 負載均衡配置 反向代理伺服器的伺服器池 伺服器的叢集
upstream tomcatDemo {
#ip_hash;
#伺服器1
server 192.168.226.129:8129 weight=2;
#伺服器2
server 192.168.226.130:8130 weight=1;
}
#設定虛擬主機配置 伺服器主機配置
server {
#偵聽 8199 埠
listen 8199;
#定義使用 localhost 訪問
server_name ngdemo.com.cn;
charset utf-8;
#設定本虛擬主機的訪問日誌
access_log logs/host.access.log main;
location / {
add_headerAccess-Control-Allow-Origin *;
root /home/webapp/static/app;
#定義首頁索引檔案的名稱
index index.html index.htm;
}
#路由配置
location /tomcatDemo {
#用於指定反向代理伺服器的伺服器池
proxy_pass http://tomcatDemo;
#作用web伺服器上有多個站點時,用該引數header來區分反向代理哪個域名
proxy_set_header Host $host;
#作用是後端伺服器上的程式獲取訪客真實IP,從該header頭獲取。部分程式需要該功能
proxy_set_header X-Forwarded-For $remote_addr;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
下面是我的nginx執行的專案:
下面是利用了負載均衡的效果:
請求分發到不同的伺服器上了