下圖是我們要設計的服務器集羣結構,所有的請求都經過Nginx,如果是靜態資源的請求,則直接訪問Ngnix的本地磁盤(或者NAS),其餘的動態資源請求均由Nginx轉發到後端服務器。
OpenResty安裝
Nginx官網提供源碼,選擇想要加載的模塊,下載後需要手動編譯。如果要增刪模塊,需要在編譯階段指定,比較複雜。推薦直接使用OpenResty框架,該框架已經將Nginx和LuaJIT的相關配置打包,且集成了大部分Nginx常用特性,比如反向代理、Redis等。
參考官網文檔:
https://openresty.org/en/installation.html
按上述文檔操作後,OpenResty會安裝在/usr/local/openresty目錄下。該目錄下nginx/conf目錄存放Ngnix的所有配置;ngnix/html目錄放置Ngnix的html文件。
啓動nginx
在/usr/local/openresty/nginx目錄下,執行
sbin/nginx -c conf/nginx.conf
默認是後臺加載啓動的方式,會啓動在conf/nginx.conf指定的端口。此時就可以通過瀏覽器訪問了,可以看到Welcome to OpenResty頁面。
按照我們之前的架構部署,當請求靜態資源時,路由到本地磁盤路徑;其餘的所有請求都使用動態代理,訪問後端server。
部署前端資源
打包前端資源上傳到服務器。進入nginx目錄下的html下,然後新建resources目錄用於存放前端靜態資源。
默認配置中,Ngnix會將所有路徑的訪問都轉發到html路徑。我們需要修改conf/nginx.conf,設置指向resources目錄下的location可以訪問對應的html下的靜態資源文件。
將server中
location / {
root html;
index index.html index.htm
}
修改爲
location /resources/ {
alias /usr/local/openresty/nginx/html/resources/;
index index.html index.htm
}
至此,我們的靜態資源訪問可以指向Ngnix對應的路徑。
配置反向代理
修改conf/nginx.conf,設置upstream server,指定後端服務器的地址。
我的兩臺服務器地址分別爲172.22.97.43、172.22.97.42。weight代表權重,我現在配置的輪循比例爲1:1。
upstream backend_server {
server 172.22.97.43 weight=1;
server 172.22.97.42 weight=1;
}
剛纔我們指定了靜態資源的路由路徑,除此之外所有請求我們都當做動態資源,在server中增加
location / {
proxy_pass http://backend_server;
proxy_set_header Host $http_host:$proxy_port;
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
開啓tomcat access log
爲了確保Nginx確實訪問到了後端server,我們可以查看後端server的Tomcat日誌。只需要在SpringBoot項目的配置文件中添加相關配置。在線上環境中,修改外掛配置文件即可。
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.directory=/var/www/project/tomcat ## 你的項目目錄中新增/tomcat
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D
需要注意的配置
- 前端接入的超時時間一般需要大於反響代理的服務超時時間,因爲數據流是通過nginx轉發,若前端超時時間小於後端超時時間則會出現後端服務還未超時,前端就超時的情況。
- 配置長連接keepalive以解決網絡建連的問題,提高路由性能。