찾다
운영 및 유지보수엔진스Nginx+Tomcat 역방향 프록시, 로드 밸런싱, 클러스터 배포 방법

nginx와 다른 서버의 성능 비교:

tomcat 서버는 Java 언어를 지향하며 중량급 서버인 반면 nginx는 경량 서버입니다. Apache 서버는 안정적이고 오픈 소스이며 크로스 플랫폼입니다. 그러나 Apache 서버는 높은 동시성을 지원하지 않습니다. nginx는 수백만 개의 TCP 연결과 100,000개 이상의 동시 연결 처리를 지원할 수 있으며 우수한 크로스 플랫폼 서버입니다.
nginx의 주요 장점은 높은 동시성, 간단한 배포, 낮은 메모리 소비 및 저렴한 비용을 포함합니다. 주요 단점은 다시 쓰기 기능이 충분히 강력하지 않고 Apache만큼 모듈이 많지 않다는 것입니다.

이 기사에서는 주로 대중적이고 실용적인 nginx + Tomcat 역방향 프록시 배포 및 로드 밸런싱에 대해 설명합니다. 이 기사의 각 부분 사이에는 큰 연관성이 없으며 필요에 따라 별도로 공부할 수 있습니다.

nginx 역방향 프록시 프로세스를 살펴보겠습니다.

Nginx+Tomcat 역방향 프록시, 로드 밸런싱, 클러스터 배포 방법

nginx 로드 밸런싱 프로세스(액세스에 대한 부담이 덜한 서버를 자동으로 선택합니다):

Nginx+Tomcat 역방향 프록시, 로드 밸런싱, 클러스터 배포 방법

로드 밸런싱이 역방향을 통해 수행되는 것을 볼 수 있습니다. 프록시 프록시의 원리를 기반으로 구현되므로 역방향 프록시 로드 밸런싱이라고도 합니다. 따라서 로드 밸런싱을 배포하고 역방향 프록시도 사용할 수 있습니다.

일반적으로 로드 밸런싱 구현 방법은 소프트웨어 구현과 하드웨어 구현의 두 가지 유형으로 구분됩니다. 하드웨어 구현은 매우 효율적이지만 그에 따른 비용도 매우 높습니다. 소프트웨어 구현은 하드웨어만큼 효율적이지는 않지만 비용은 상대적으로 훨씬 낮습니다. 로드 밸런싱을 위해 nginx 서버를 사용하는 경우 소프트웨어를 통해 로드 밸런싱이 이루어지며, nginx 자체는 높은 동시성 등을 지원합니다. 따라서 nginx 서버를 사용하여 로드 밸런싱을 수행하면 기업의 비용을 크게 절감할 수 있으며 nginx는 서버 소프트웨어이므로 실행 효율성도 매우 높습니다. 이 문서의 목적은 nginx를 사용하여 로드 밸런싱을 달성하는 데 도움을 주는 것입니다.

로드 밸런싱의 핵심은 서버 클러스터를 설정하는 것입니다. 그런 다음 사용자가 먼저 타사 프록시 서버(여기에서는 nginx 선택)에 액세스한 다음 프록시 서버가 클러스터에서 서버를 선택한 다음 요청을 도입합니다. 선택한 서버로 이동합니다(여기에서는 tomcat을 선택합니다).

아래 표시된 대로 역방향 프록시를 통해 다음과 같은 로드 밸런싱을 달성합니다. 여기서는 4개의 서버(하나는 프록시 서버로, 3개는 로드 밸런싱 서버)의 공용 IP 주소를 가정합니다. 아키텍처는 기본적으로 명확하므로 자세히 구현해 보겠습니다.

팁: 이 기사에서는 기본적으로 관련 작업에 SSH를 사용하고, Mac에서는 시스템과 함께 제공되는 터미널을 직접 사용할 수 있습니다. 도구.

Nginx+Tomcat 역방향 프록시, 로드 밸런싱, 클러스터 배포 방법

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의 마스터 프로세스 번호를 쿼리하고 여기서 쿼리는 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 및 웹 호스팅 : 파일 제공 및 트래픽 관리Nginx 및 웹 호스팅 : 파일 제공 및 트래픽 관리May 03, 2025 am 12:14 AM

Nginx는 파일을 제공하고 트래픽을 관리하는 데 사용될 수 있습니다. 1) nginx 서비스 정적 파일 구성 : 청취 포트 및 파일 디렉토리를 정의하십시오. 2)로드 밸런싱 및 트래픽 관리 구현 : 업스트림 모듈 및 캐시 정책을 사용하여 성능을 최적화하십시오.

Nginx vs. Apache : 웹 서버 기술 비교Nginx vs. Apache : 웹 서버 기술 비교May 02, 2025 am 12:08 AM

Nginx는 높은 동시성 및 정적 컨텐츠를 처리하는 데 적합한 반면 Apache는 동적 컨텐츠 및 복잡한 URL 재 작성에 적합합니다. 1.NGINX는 높은 동시성에 적합한 이벤트 중심 모델을 채택합니다. 2. Apache는 동적 컨텐츠에 적합한 프로세스 또는 스레드 모델을 사용합니다. 3. Nginx 구성은 간단하지만 Apache 구성은 복잡하지만 더 유연합니다.

Nginx 및 Apache : 배포 및 구성Nginx 및 Apache : 배포 및 구성May 01, 2025 am 12:08 AM

Nginx와 Apache는 각각 고유 한 장점이 있으며 선택은 특정 요구에 따라 다릅니다. 1.nginx는 간단한 배포와 함께 높은 동시성에 적합하며 구성 예에는 가상 호스트 및 역 프록시가 포함됩니다. 2. Apache는 복잡한 구성에 적합하며 배포하기에도 간단합니다. 구성 예제에는 가상 호스트 및 URL 재 작성이 포함됩니다.

Nginx 장치의 목적 : 웹 응용 프로그램 실행Nginx 장치의 목적 : 웹 응용 프로그램 실행Apr 30, 2025 am 12:06 AM

NginxUnit의 목적은 웹 응용 프로그램의 배포 및 관리를 단순화하는 것입니다. 장점은 다음과 같습니다. 1) Python, PHP, Go, Java 및 Node.js와 같은 여러 프로그래밍 언어를 지원합니다. 2) 동적 구성 및 자동 재 장전 기능을 제공합니다. 3) 통합 API를 통해 응용 프로그램 수명주기를 관리합니다. 4) 고 동시성 및 하중 밸런싱을 지원하기 위해 비동기 I/O 모델을 채택하십시오.

Nginx : 고성능 웹 서버 소개Nginx : 고성능 웹 서버 소개Apr 29, 2025 am 12:02 AM

Nginx는 2002 년에 시작하여 Igorsysoev가 C10K 문제를 해결하기 위해 개발했습니다. 1.NGINX는 고성능 웹 서버, 이벤트 중심의 비동기 아키텍처로 높은 동시성에 적합합니다. 2. 리버스 프록시,로드 밸런싱 및 캐싱과 같은 고급 기능을 제공하여 시스템 성능 및 신뢰성을 향상시킵니다. 3. 최적화 기술에는 HTTP/2 및 보안 구성을 사용하여 작업자 프로세스 수 조정, GZIP 압축 가능성이 포함됩니다.

Nginx vs. Apache : 아키텍처를 살펴 봅니다Nginx vs. Apache : 아키텍처를 살펴 봅니다Apr 28, 2025 am 12:13 AM

Nginx와 Apache의 주요 아키텍처 차이점은 Nginx가 이벤트 중심의 비동기 비 블로킹 모델을 채택하는 반면 Apache는 프로세스 또는 스레드 모델을 사용한다는 것입니다. 1) NGINX는 이벤트 루프 및 I/O 멀티플렉싱 메커니즘을 통해 고유 한 연결을 효율적으로 처리하며, 정적 컨텐츠 및 리버스 프록시에 적합합니다. 2) Apache는 다중 프로세스 또는 다중 스레드 모델을 채택하는데,이 모델은 매우 안정적이지만 자원 소비가 높으며 풍부한 모듈 확장이 필요한 시나리오에 적합합니다.

Nginx vs. Apache : 장단점 검사Nginx vs. Apache : 장단점 검사Apr 27, 2025 am 12:05 AM

Nginx는 동시 및 정적 컨텐츠가 높은 반면 Apache는 복잡한 구성 및 동적 컨텐츠에 적합합니다. 1. Nginx는 교통량이 많은 시나리오에 적합한 동시 연결을 효율적으로 처리하지만 동적 컨텐츠를 처리 할 때 추가 구성이 필요합니다. 2. Apache는 복잡한 요구에 적합하지만 동시성 성능이 좋지 않은 풍부한 모듈과 유연한 구성을 제공합니다.

Nginx 및 Apache : 주요 차이점 이해Nginx 및 Apache : 주요 차이점 이해Apr 26, 2025 am 12:01 AM

Nginx와 Apache는 각각 고유 한 장점과 단점이 있으며 선택은 특정 요구에 기초해야합니다. 1.NGINX는 비동기 비 블로킹 아키텍처로 인해 높은 동시 시나리오에 적합합니다. 2. Apache는 모듈 식 설계로 인해 복잡한 구성이 필요한 저소성 시나리오에 적합합니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기