Nginx简介
Nginx是一款轻量级的Web 服务器/反向代理服务器 ,占有内存少,并发能力强,官方测试nginx能够支撑5万并发链接,并且CPU、内存等资源消耗却非常低,运行非常稳定。
Tengine淘宝基于Nginx研发的web服务器。
使用场景
高并发场景
高并发通常是指通过设计保证系统能够同时并行处理很多请求。通俗来讲,高并发是指在同一个时间点,有很多用户同时的访问同一 API 接口或者 Url 地址。它经常会发生在有大活跃用户量,用户高聚集的业务场景中。
负载均衡(load Balance ):将请求/数据【均匀】分摊到多个操作单元上执行,负载均衡的关键在于【均匀】
正向代理
一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。
反向代理
客户只需要发送请求到代理服务器,代理服务器会将请求转发给内部的服务器去处理,处理完毕之后会将结果返回给客户,整个过程中客户和实际处理服务器是不会直接建立连接的。
Ngin源码安装
- 将安装包上传到Linux虚拟机上
- 解压,把Nginx存放到指定目录
tar -zxf nginx-1.8.1.tar.gz
- 安装nginx依赖的软件
yum install gcc pcre-devel zlib-devel openssl-devel -y
- 下载完成后进入 nginx-1.8.1目录就会看到如图内容
- 配置安装路径
./configure --prefix=/opt/oykj/nginx-1.8.1
- 开始编译并安装nginx
make && make install
- 进入到sbin目录下开启Ngxin
cd /opt/oykj/nginx-1.8.1/sbin
./nginx
服务器端口就是自己虚拟机的IP
常用命令
关闭nginx服务
kill `cat /usr/local/nginx/logs/nginx.pid`
nginx -s reload :修改配置后重新加载生效
nginx -s reopen :重新打开日志文件
nginx -t -c /path/to/nginx.conf 测试nginx配置文件是否正确
关闭nginx:
nginx -s stop :快速停止nginx
quit :完整有序的停止nginx
其他的停止nginx 方式:
ps -ef | grep nginx
kill -QUIT 主进程号 :从容停止Nginx
kill -TERM 主进程号 :快速停止Nginx
pkill -9 nginx :强制停止Nginx
启动nginx:
nginx -c /path/to/nginx.conf
平滑重启nginx:
kill -HUP 主进程号
安装目录
Nginx负载均衡
集群搭建
- 一共四台虚拟机
- 节点搭建
节点\角色 | Nginx | Tomcat | JDK |
basenode | * | * | |
node01 | * | * | |
node02 | * | * | |
node03 | * | * |
- BaseNode修改配置文件
cd /opt/oykj/nginx-1.8.1/conf
vi nginx.conf
进入文件后,修改为
#user nobody;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 0;
upstream oykj {
server 192.168.88.101:8080;
server 192.168.88.102:8080;
server 192.168.88.103:8080;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://oykj;
}
}
}
Tomcat配置信息
- 在node01节点上配置
vi /opt/oykj/apache-tomcat--8.5.47/webapps/ROOT/index.jsp
<%@ page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>xxxxx</title>
<link href="favicon.ico" rel="icon" type="image/x-icon" />
<link href="favicon.ico" rel="shortcut icon" type="image/x-icon" />
</head>
<body>
<h1>welcome to xxxxx</h1>
<h2>Server:<%=request.getLocalAddr() %></h2>
<h2>Port:<%=request.getLocalPort() %></h2>
<h2>Client:<%=request.getRemoteAddr() %></h2>
<h2>Session:<%=session.getId() %></h2>
</body>
</html>
- 配置完成后拷贝到node02,node03节点上
scp index.jsp root@192.168.88.102:`pwd`
- 拷贝完成后启动三台服务器,三台均输入此命令
#进入目录
cd /opt/oykj/apache-tomcat-8.5.47/bin/
#启动服务器
./startup.sh
进入服务器
负载策略
请求轮回
- 依次转发给配置的服务器
增加权重
- 使用服务器权重,还可以进一步影响nginx负载均衡算法,谁的权重越大,分发到的请求就越多。
upstream xxxweight {
server 192.168.88.101:8080 weight=1;
server 192.168.88.102:8080 weight=2;
server 192.168.88.103:8080 weight=3;
}
最少连接数
- 在连接负载最少的情况下,nginx会尽量避免将过多的请求分发给繁忙的应用程序服务器,而是将新请求分发给不太繁忙的服务器,避免服务器过载。
upstream xxxleast {
least_conn;
server 192.168.88.101:8080;
server 192.168.88.103:8080;
}
IpHash
- 确保来自同一客户端的请求将始终定向到同一台服务器,除非此服务器不可用
upstream xxxhash {
ip_hash;
server 192.168.88.101:8080;
server 192.168.88.103:8080;
}
单Linux搭建多Tomcat
- 把Tomcat改名为apache-tomcat-8080
mv apache-tomcat-8.5.47 apache-tomcat-8080
- 拷贝一份apache-tomcat-8080并改名为apache-tomcat-18080
cp -r apache-tomcat-8080 apache-tomcat-18080
- 修改环境变量
vi /etc/profile
- 进入之后Ctrl+G跳到最后一行,加入下方代码
#tomcat8080
export CATALINA_HOME=/opt/oykj/apache-tomcat-8080
export CATALINA_BASE=/opt/oykj/apache-tomcat-8080
export TOMCAT_HOME=/opt/oykj/apache-tomcat-8080
#tomcat18080
export CATALINA_HOME18080=/opt/oykj/apache-tomcat-18080
export CATALINA_BASE18080=/opt/oykj/apache-tomcat-18080
export TOMCAT_HOME18080=/opt/oykj/apache-tomcat-18080
- 修改server.xml文件
#进入目录
cd /opt/oykj/apache-tomcat-18080/conf/
vi server.xml
进入后ctrl+:
输入set nu
此命令是显示行数
22行--默认为8005--》修改为18005
<Server port="18005" shutdown="SHUTDOWN">
69行--默认为8080--》修改为18080
<Connector port="18080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
116行-默认为8009--》修改为18009
<Connector port="18009" protocol="AJP/1.3" redirectPort="8443" />
- 进入bin目录下修改catalina.sh
####################第二台tomcat配置,113行开始
export CATALINA_BASE=$CATALINA_BASE18080
export CATALINA_HOME=$CATALINA_HOME18080
export TOMCAT_HOME=$TOMCAT_HOME18080
重新加载环境变量
source /etc/profile
- 分别启动两台Tomcat
./apache-tomcat8080/bin/startup.sh
./apache-tomcat18080/bin/startup.sh
- 此时8080端口,18080端口都能访问