搜尋
首頁運維NginxNginx+Tomcat反向代理、負載平衡、叢集部署的方法

nginx與其他伺服器的效能比較:

tomcat伺服器面向java語言,是重量級的伺服器,而nginx是輕量級的伺服器。 apache伺服器穩定、開源、跨平台,但是apache伺服器不支援高並發,nginx能支援處理百萬級的tcp連接,10萬以上的並發連接,並且是一個很好的跨平台伺服器。
nginx主要優點有可以實現高並發、部署簡單、記憶體消耗少、成本低等,主要缺點有rewrite功能不夠強大,模組沒有apache的多。

本篇主要說明 nginx tomcat 反向代理與負載平衡的部署,以通俗實用為主。本篇文章每個部分之間沒有太大關係,可依需求分開學習。

下來看nginx反向代理的過程:

Nginx+Tomcat反向代理、負載平衡、叢集部署的方法

nginx負載平衡的過程(會自動選擇壓力較小的伺服器來存取):

Nginx+Tomcat反向代理、負載平衡、叢集部署的方法

可以看出,負載平衡是透過反向代理的原理來實現的,所以也稱為反向代理的負載平衡。所以我們會部署負載平衡,那麼反向代理也就會了。

總的來說,負載平衡實現的方式分為軟體實作和硬體實現兩種,硬體實現運作的效率非常高,但是對應的成本也非常高。軟體實現運行效率不如硬件,但是成本相對來說低得多。而使用nginx伺服器實現負載平衡,那麼就是透過軟體的方式來實現負載平衡,而nginx本身支援高並發等。故而使用nginx伺服器實現負載平衡,能大幅節省企業的成本,並且由於nginx是伺服器軟體,其執行效率也是非常高。本篇的目的也就是幫助大家使用nginx來實現負載平衡。

負載平衡的核心就是建立一個伺服器集群,然後用戶首先訪問到第三方代理伺服器(這裡我們選用nginx),然後由代理伺服器選擇一個集群中的伺服器,然後將請求引入選定的伺服器(這裡我們選用tomcat)。

如下圖,透過反向代理我們實現下面的負載平衡,這裡我們假定四台伺服器公網的ip,一台做代理伺服器,三台做負載平衡下的伺服器:

Nginx+Tomcat反向代理、負載平衡、叢集部署的方法

好了,整體架構已經基本上清晰了,下來我們來具體實現下:

提示:本篇我們基本上都是使用ssh進行相關操作的,windows下方可以嘗試安裝putty,mac下直接使用系統自帶的終端工具即可。

1.linux下搭建nginx伺服器

我們在192.168.2.20 這台伺服器上建置nginx伺服器:

#1)下載nginx

2)上傳伺服器nginx安裝套件

$ scp ~/downloads/nginx-1.10.2.tar.gz root@192.168.2.20:/usr/local

3)安裝nginx

$ ssh root@192.168.2.20             //ssh连接
# yum -y install gcc gcc-c++ autoconf automake  //gcc、gcc-c++的库文件
# yum install -y pcre pcre-devel         //安装nginx依赖包
# yum install -y zlib zlib-devel

注意:-y表示遇到判斷全部yes,autoconf表示自動配置,automake表示自動編譯。

# cd /usr/local
# tar -zxvf nginx-1.10.2.tar.gz         //解压缩
# cd nginx-1.10.2                //切换到该目录下
# ./configure                  //配置
# make
# make install                 //安装

檢驗是否完成安裝:

# cd /usr/local
# ls                      //如果存在nginx文件夹,则安装成功

經過上面的安裝步驟和目錄設置,nginx的啟動程序就是/usr/local/nginx/sbin/nginx,預設設定檔是/usr /local/nginx/conf/nginx.conf,但不建議直接編輯nginx.conf,一般我們都選擇新建設定文件,然後在新建的設定檔中修改連接埠、反向代理路徑等。

2.nginx的啟動、停止、訊號控制

1)啟動nginx伺服器(格式:nginx執行檔-c nginx設定檔):

# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

2)停止nginx伺服器:

停止nginx伺服器首先要查詢nginx的主程序號碼(master process),假設此處查詢得到1060(方便下面示範使用):

# ps -ef|grep nginx

下來看如何停止nginx伺服器,停止nginx有三種方式:

從容停止:

# ps -ef|grep nginx  //查看nginx的主进程号(master process),假设此处查询得到1060
# kill -quit 1060

快速停止:

# kill -term 1060

強制停止:

# pkill -9 nginx

3)重啟nginx伺服器:

當我們修改了nginx設定文件,需要重新啟動才能生效。我們在重新啟動之前還需要驗證設定檔的正確性,然後進行重新啟動操作:

# /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf   //验证
# /usr/local/nginx/sbin/nginx -s reload                  //重启

4)平滑升級nginx伺服器

平滑升級不會停掉在運行著的進程,這些進程會繼續處理請求,但不會再接受新請求,在這些舊進程在處理完還在處理的請求後,停止。在此平滑升級的過程中,新開的進程會被處理。這就是平滑升級。

# /usr/local/nginx/sbin/nginx -v       //查看当前版本

下面進行平滑升級:

# cd /usr/local
# tar -zxvf nginx-1.11.6.tar.gz       //解压缩 新版本nginx
# cd nginx-1.11.6              //切换到该目录下
# ./configure                //配置
# make
# cd /usr/local/nginx/sbin          //打开 旧版本nginx可执行文件位置
# cp nginx nginx.old         //备份 旧版本nginx可执行文件,防止升级错误而无法恢复
# cp -rfp /usr/local/nginx-1.11.6/objs/nginx /usr/local/nginx/sbin   //复制新版本可执行文件到旧版本处
# rm -f /usr/local/nginx-1.11.6.tar.gz    //善后工作 删除压缩文件
# rm -rf /usr/local/nginx-1.11.6       //删除文件夹

至此,nginx伺服器平滑升級成功。

3.nginx中負載平衡的實作

我們還是先連接ssh,然後進行下面操作(一般不建議修改預設主設定檔nginx.conf,所以我們新建負載平衡設定檔fzjh.conf,確保伺服器安全,如下):

# cd /usr/local/nginx/conf
# touch fzjh.conf
# vi fzjh.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{
  #主要是用于设置一组可以在proxy_pass和fastcgi_pass指令中使用额代理服务器,默认负载均衡方式为轮询
  upstream tomcat_client {
    #设置同一个cookie的两次/多次请求,请求的是同一台服务器
    ip_hash;
    #weight权重,默认1,权重越大访问概率越大,backup备用服务器,服务器全部崩溃后启动
    server 192.168.2.21:8080 weight=5;
    server 192.168.2.22:8080 weight=5;
    server 192.168.2.23:8080 weight=5 backup;
  }

  #开启gzip压缩,开启后,访问网页会自动压缩
  #gzip on;

  #指定服务器的名称和参数
  server {
    listen 80;
    server_name test.nginxtest.net;

    #设置字符
    #charset koi8-r;

    #location / 指用根目录做负载均衡
    location / {
      proxy_pass http://tomcat_client;
      proxy_redirect default;
      #设置代理
      proxy_set_header host $host;
      proxy_set_header x-real-ip $remote_addr;
    }
  }
}

输入完成后按下esc,然后输入:

:wq!

就可以保存并退出负载均衡的配置文件了,下来我们加载我们的配置文件:

# /usr/local/nginx/sbin/nginx                      //启动nginx
# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/fzjh.conf    //加载配置文件

如果存在端口占用,可以使用如下命令kill掉nginx的程序:

# killall -9 nginx

至此,nginx服务器部署完毕。下面我们开始部署负载均衡下的那三台真实提供数据的服务器。

4.linux下安装jdk

我们在192.168.2.21、192.168.2.22、192.168.2.23这三台服务器安装jdk,以192.168.2.21为例:

1)下载jdk

2)上传服务器jdk安装包

$ scp ~/downloads/jdk-8u112-linux-x64.tar.gz root@192.168.2.21:/usr/local

3)安装jdk

$ ssh root@192.168.2.21         //ssh连接
# cd /usr/local
# tar -zxvf jdk-8u112-linux-x64.tar.gz //解压缩
# mv jdk1.8.0_112/ jdk         //将jdk1.8.0_112重命名为jdk
# vi /etc/profile            //用vi编辑器打开文件,然后按键盘的i

下来我们移动光标至最后面,两个回车换行,然后添加下面代码配置java的环境变量:

java_home="/usr/local/jdk"
class_path="$java_home/lib:$java_home/jre/lib"
path=".:$path:$java_home/bin"
catalina_home="/usr/local/tomcat"
export java_home catalina_home

输入完成后按下esc,然后输入:

:wq!

就可以保存并退出了。此时我们想让其立即生效,则需要继续输入命令:

# source /etc/profile

此时profile文件就更新了,此时环境变量就配置成功了。下面我们验证一下jdk是否安装配置成功:

# java -version

如果返回java版本号则安装成功。

5.linux下搭建tomcat服务器

我们在192.168.2.21、192.168.2.22、192.168.2.23这三台服务器搭建tomcat服务器,以192.168.2.21为例:

1)下载tomcat

2)上传服务器tomcat安装包

$ scp ~/downloads/apache-tomcat-8.5.9.tar.gz root@192.168.2.21:/usr/local

3)安装tomcat

$ ssh root@192.168.2.21         //ssh连接
# cd /usr/local
# tar -zxvf apache-tomcat-8.5.9.tar.gz //解压缩
# mv apache-tomcat-8.5.9/ tomcat    //将apache-tomcat-8.5.9重命名为tomcat

4)设置tomcat网页文件目录

tomcat默认网页文件的路径是 /usr/local/tomcat/webapps/root,但是一般我们不在这里存放,我们在linux根目录新建 data/wwwroot 目录:

# mkdir /data             //新建目录
# mkdir /data/www
# mkdir /data/www/root
# cd /usr/local/tomcat/conf
# vi server.xml            //用vi编辑器打开server.xml配置文件,打开后键盘按i

我们找到host节点下的appbase=”webapps”,修改为:appbase="/data/www"

输入完成后按下esc,然后输入:

:wq!

就可以保存并退出配置文件了,然后重启tomcat即可生效,此时tomcat的网页文件目录就变成了 /data/www/root 了。

配置tomcat环境变量,我们在配置jdk的时候已经配置好了,可以回头看一下。

6.tomcat的启动、停止

1)启动tomcat服务器

# /usr/local/tomcat/bin/startup.sh

2)停止tomcat服务器:

# /usr/local/tomcat/bin/shutdown.sh

到此,nginx + tomcat 负载均衡 集群 已经部署完毕了。不过有了服务器,肯定也少不了数据库,下面拓展一下linux下安装mysql数据库的方法。

7.linux下安装mysql数据库

我们重新找了 192.168.2.30 这台服务器上mysql数据库:

1)下载mysql数据库

2)上传mysql数据库安装包

$ scp ~/downloads/mysql-5.1.51.tar.gz root@192.168.2.30:/usr/local

3)安装mysql

$ ssh root@192.168.2.30         //ssh连接
# groupadd mysql            //建立mysql的组
# useradd mysql -g mysql        //增加用户mysql到mysql的组中

# yum list|grep ncurses
# yum -y install ncurses-devel
# yum install ncurses-devel

# cd /usr/local
# tar -zxvf mysql-5.1.51.tar.gz     //解压缩
# cd mysql-5.1.51

# ./configure --prefix=/usr/local/mysql --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-readline --with-sll 
//配置,设置安装路径,设置编译mysql不带共享库,设置编译client不带共享库,设置要以rmp的方式安装tar包,设置以rmp的方式安装opensll

# make
# make install             //安装,在make[4]的时候等待时间比较长,几分钟到十几分钟,都是正常现象

# /usr/local/mysql/bin/mysql_install_db --user    //对安装好的mysql进行初始化
# cp ./support-files/mysql.server /etc/init.d/mysql //将mysql启动服务复制到系统中并重命名为mysql
# cp ./support-files/my-medium.cnf /etc/my.cnf    //复制规则文件
# chmod 755 /etc/init.d/mysql            //更改文件权限

//文件权限由三个数字组成,第一位:文件拥有者的权限,第二位:文件拥有者同组的人的权限,第三位:文件拥有者非同组人的权限
//7:可读可写可执行,5:可读可执行

# cd /usr/local/mysql
# chown -r mysql .                  //将 /usr/local/mysql 的拥有者更改为mysql
# chgrp -r mysql .                  //将 /usr/local/mysql 归到mysql组中

# ps -ef|grep mysql
# kill -9 3632          //将mysql所有进程号依次杀死,这里假定是3632
# /usr/local/mysql/bin/mysql_install_db --user=mysql    //再次初始化
# service mysql start                   //启动mysql
# /usr/local/mysql/bin/mysqladmin -u root password '123456' //设置mysql密码

到此mysql就安装成功了,下来我们测试一下:

# /usr/local/mysql/bin/mysql -u root -p

如果输入密码后可以登进mysql,那么就测试成功。下面我们设置mysql允许开启远程连接:

# /usr/local/mysql/bin/mysql -u root -p

mysql> grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
//创建用户用于远程连接(root:用户名,%:所有电脑都可以连接,也可以设置某个ip地址运行连接,123456:密码)

mysql> flush privileges;      //立即生效

下面我们查询一下数据库的用户:

mysql> select distinct concat('user: ''',user,'''@''',host,''';') as query from mysql.user;
mysql> \q              //登出

找一台电脑测试一下,使用navicat远程登录mysql,登进成功。

以上是Nginx+Tomcat反向代理、負載平衡、叢集部署的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除
NGINX與Apache:性能,可伸縮性和效率NGINX與Apache:性能,可伸縮性和效率Apr 19, 2025 am 12:05 AM

NGINX和Apache都是強大的Web服務器,各自在性能、可擴展性和效率上有獨特的優勢和不足。 1)NGINX在處理靜態內容和反向代理時表現出色,適合高並發場景。 2)Apache在處理動態內容時表現更好,適合需要豐富模塊支持的項目。選擇服務器應根據項目需求和場景來決定。

終極攤牌:nginx vs. apache終極攤牌:nginx vs. apacheApr 18, 2025 am 12:02 AM

NGINX適合處理高並發請求,Apache適合需要復雜配置和功能擴展的場景。 1.NGINX採用事件驅動、非阻塞架構,適用於高並發環境。 2.Apache採用進程或線程模型,提供豐富的模塊生態系統,適合複雜配置需求。

nginx行動:示例和現實應用程序nginx行動:示例和現實應用程序Apr 17, 2025 am 12:18 AM

NGINX可用於提升網站性能、安全性和可擴展性。 1)作為反向代理和負載均衡器,NGINX可優化後端服務和分擔流量。 2)通過事件驅動和異步架構,NGINX高效處理高並發連接。 3)配置文件允許靈活定義規則,如靜態文件服務和負載均衡。 4)優化建議包括啟用Gzip壓縮、使用緩存和調整worker進程。

NGINX單元:支持不同的編程語言NGINX單元:支持不同的編程語言Apr 16, 2025 am 12:15 AM

NGINXUnit支持多種編程語言,通過模塊化設計實現。 1.加載語言模塊:根據配置文件加載相應模塊。 2.應用啟動:調用語言運行時執行應用代碼。 3.請求處理:將請求轉發給應用實例。 4.響應返回:將處理後的響應返回給客戶端。

在Nginx和Apache之間進行選擇:適合您的需求在Nginx和Apache之間進行選擇:適合您的需求Apr 15, 2025 am 12:04 AM

NGINX和Apache各有優劣,適合不同場景。 1.NGINX適合高並發和低資源消耗場景。 2.Apache適合需要復雜配置和豐富模塊的場景。通過比較它們的核心特性、性能差異和最佳實踐,可以幫助你選擇最適合需求的服務器軟件。

nginx怎麼啟動nginx怎麼啟動Apr 14, 2025 pm 01:06 PM

問題:如何啟動 Nginx?答案:安裝 Nginx啟動 Nginx驗證 Nginx 是否已啟動探索其他啟動選項自動啟動 Nginx

怎麼查看nginx是否啟動怎麼查看nginx是否啟動Apr 14, 2025 pm 01:03 PM

確認 Nginx 是否啟動的方法:1. 使用命令行:systemctl status nginx(Linux/Unix)、netstat -ano | findstr 80(Windows);2. 檢查端口 80 是否開放;3. 查看系統日誌中 Nginx 啟動消息;4. 使用第三方工具,如 Nagios、Zabbix、Icinga。

nginx怎麼關閉nginx怎麼關閉Apr 14, 2025 pm 01:00 PM

要關閉 Nginx 服務,請按以下步驟操作:確定安裝類型:Red Hat/CentOS(systemctl status nginx)或 Debian/Ubuntu(service nginx status)停止服務:Red Hat/CentOS(systemctl stop nginx)或 Debian/Ubuntu(service nginx stop)禁用自動啟動(可選):Red Hat/CentOS(systemctl disable nginx)或 Debian/Ubuntu(syst

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境