Article Directory
1. Principles of Nginx Load Balancing Implementation
1. Nginx realizes load balancing through reverse proxy
2. Nginx configures the main parameters of reverse proxy
(1), upstream service pool name {}
- Configure the backend server pool to provide response data
(2), proxy_pass http:// service pool name
- Configure server processing that forwards access requests to the back-end server pool
3. Principle of reverse proxy
Two, Nginx dynamic and static separation principle
1. The principle of dynamic and static separation
- The server receives the request from the client, there are both static resources and dynamic resources. The static resources are served by Nginx, and the dynamic resources are forwarded by Nginx to the backend.
2. Nginx static processing advantages - Nginx's processing efficiency of static pages is much higher than that of Tomcat
- If Tomcat requests 1000 times, Nginx requests 6000 times
- Tomcat's throughput per second is 0.6M, Nginx's throughput per second is 3.6M
- Nginx's ability to handle static resources is 6 times that of Tomcat
Three, Nginx + Tomcat dynamic separation, load balancing configuration steps
Environmental preparation:
Nginx server: 192.168.200.30
Tomcat server 1: 192.168.200.50
Tomcat server 2: 192.168.200.40
1. Deploy Nginx load balancing server
首先将 nginx-1.12.0.tar.gz 压缩包上传到 /opt 目录下
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
yum install -y pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
useradd -M -s /sbin/nologin nginx
cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/
cd nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-file-aio \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-http_flv_module \
--with-http_ssl_module
make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile =/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service
2. Deploy two Tomcat application servers
所需安装包为:
apache-tomcat-9.0.16.tar.gz
jdk-8u201-linux-x64.rpm
#scp apache-tomcat-9.0.16.tar.gz root@192.168.200.40:/opt #将所需的压缩包在Tomcat1上传给Tomcat2 server,当然我们也可以自己直接将压缩包拉到/opt目录下
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
rpm -qpl jdk-8u201-linux-x64.rpm
rpm -ivh jdk-8u201-linux-x64.rpm
java -version
vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
source /etc/profile.d/java.sh
java -version
cd /opt
vim abc.java
public class abc {
public static void main(String[] args){
System.out.println("Hello World!")
}
}
[root@localhost?opt]#javac abc.java #用来检测JDK环境是否设置成功
[root@localhost?opt]#java abc
Hello World!
cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat
##启动tomcat##
/usr/local/tomcat/bin/startup.sh
netstat -natp | grep 8080
3. Dynamic and static separation configuration
(1)、Tomcat1 server 配置
mkdir /usr/local/tomcat/webapps/test
vim /usr/local/tomcat/webapps/test/index.jsp #动态页面的配置
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>
</head>
<body>
<% out.println("动态页面 1,http://www.test1.com");%>
</body>
</html>
vim /usr/local/tomcat/conf/server.xml #修改配置文件
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true" />
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
------------------------------------------------------------------------------------------
(2)、Tomcat2 server 配置
mkdir /usr/local/tomcat/webapps/test
vim /usr/local/tomcat/webapps/test/index.jsp #动态页面的配置
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title>
</head>
<body>
<% out.println("动态页面 2,http://www.test2.com");%>
</body>
</html>
vim /usr/local/tomcat/conf/server.xml #修改配置文件
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true" />
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
--------------------------------------------------------------------------------
(3)、Nginx server 配置
#准备静态页面和静态图片
echo '<html><body><h1>this is static</h1></body></html>' > /usr/local/nginx/html/index.html
mkdir /usr/local/nginx/html/img
cd /usr/local/nginx/html/img/
#上传一张图片到此目录下
[root@localhost img]#ls
game.jpg
vim /usr/local/nginx/conf/nginx.conf
......
http {
......
#gzip on;
#配置负载均衡的服务器列表,weight参数表示权重,权重越高,被分配到的概率越大
upstream tomcat_server {
server 192.168.200.50:8080 weight=1;
server 192.168.200.40:8080 weight=1;
}
}
server {
listen 80;
server_name www.hahaha.com;
#charset koi8-r;
#access_log logs/host.access.log main;
#配置Nginx处理动态页面请求,将 .jsp 文件请求转发到Tomcat 服务器处理
location ~ .*\.jsp$ {
proxy_pass http://tomcat_server;
#设置后端的 Web 服务器可以获取远程客户端的真是IP
#设定后端的Web服务器接收到的请求访问的主机名(域名或IP、端口),默认host的值为proxy_pass指令设置的主机名
proxy_set_header HOST $host;
#把$remote_addr赋值给X-Real-IP,来获取源IP
proxy_set_header X-Real-IP $remote_addr;
#在Nginx作为代理服务器时,设置的IP列表,会把经过的机器ip,代理机器ip都记录下来
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#配置Nginx处理静态图片请求
location ~ .*\.(jpg|png|jepg|gif|bmp|swf|css)${
root /usr/local/nginx/html/img/
expires 10d;
}
location / {
root html;
index index.html index.htm;
}
systemctl restart nginx.service
At this time, if you visit http://192.168.200.30/game.jpg on a new machine, the picture of the static page set on Nginx will appear,
and when you visit http://192.168.200.30/index.jsp, it will be dynamically Switch access between Tomcat1 and Tomcat2.