nginx部署基于http负载均衡器
nginx跨多个应用程序实例的负载平衡是一种用于优化资源利用率,最大化吞吐量,减少延迟和确保容错配置的常用技术。
环境介绍
配置nginx负载均衡器因会用到多台服务器来进行,所以下面我会用到docker,具体docker的使用请移步docker实战
系统环境:
root@ubuntu:~# lsb_release -a #查看系统版本 No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 19.10 Release: 19.10 Codename: eoan root@ubuntu:~# uname -a #查看系统是多少位 Linux ubuntu 5.3.0-18-generic #19-Ubuntu SMP Tue Oct 8 20:14:06 UTC 2019 x86_64 x86_64 x86_64 GNU/Linuxdocker版本和相关操作系统版本
docker版本: root@ubuntu:~# docker --version #查看docker版本 Docker version 19.03.3, build a872fc2f86 操作系统版本: [root@57b669db1de1 /]# cat /etc/redhat-release #查看系统版本 CentOS Linux release 8.0.1905 (Core) [root@57b669db1de1 /]# uname -a Linux 57b669db1de1 5.3.0-18-generic #19-Ubuntu SMP Tue Oct 8 20:14:06 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux软件版本:
nginx版本: root@ubuntu:~# nginx -v 查看nginx版本 nginx version: nginx/1.16.1 (Ubuntu) docker中nginx版本: [root@57b669db1de1 /]# nginx -v #查看nginx版本 nginx version: nginx/1.14.1
安装nginx
具体nginx的安装请参考nginx安装部署
安装依赖软件
更新软件包: root@ubuntu:~# apt-get update 安装依赖软件: root@ubuntu:~# apt -y install openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev make gcc编译安装nginx
下载nginx: root@ubuntu:~# wget http:#nginx.org/download/nginx-1.17.6.tar.gz 解压: root@ubuntu:/opt# tar zxf nginx-1.17.6.tar.gz root@ubuntu:/opt# cd nginx-1.17.6/ root@ubuntu:/opt/nginx-1.17.6# ls #列出目录 auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src root@ubuntu:/opt/nginx-1.17.6# 配置: root@ubuntu:/opt/nginx-1.17.6# ./configure --prefix=/usr/local/nginx 编译以及部署: root@ubuntu:/opt/nginx-1.17.6# make && make install root@ubuntu:/opt/nginx-1.17.6# cd /usr/local/nginx/ root@ubuntu:/usr/local/nginx# ls conf html logs sbin 启动: root@ubuntu:/usr/local/nginx# ln sbin/nginx /usr/local/sbin/ #创建nginx软连接,设置为命令 root@ubuntu:/usr/local/nginx# nginx #启动nginx root@ubuntu:/usr/local/nginx# netstat -anpl | grep nginx #查看nginx端口是否开启 root@ubuntu:/usr/local/nginx# lsof -i:80 #查看80端口是否开启
docker安装nginx
创建容器
下载镜像: root@ubuntu:~# docker pull registry.cn-beijing.aliyuncs.com/blxt/centos 创建容器并启动: root@ubuntu:~# root@ubuntu:~# docker run -itd --name nginx1 --privileged registry.cn-beijing.aliyuncs.com/blxt/centos /sbin/init root@ubuntu:~# docker ps -a #查看容器是否创建并启动 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAME 6801d55682a3 registry.cn-beijing.aliyuncs.com/blxt/centos "/sbin/init" 5 minutes ago Up 5 minutes nginx1 相同方法创建第二个容器: root@ubuntu:~# docker run -itd --name nginx2 --privileged registry.cn-beijing.aliyuncs.com/blxt/centos /sbin/init root@ubuntu:~# docker ps -a root@ubuntu:~# root@ubuntu:~# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1d31d3fc0ec1 registry.cn-beijing.aliyuncs.com/blxt/centos "/sbin/init" 4 minutes ago Up 4 minutes nginx2 6801d55682a3 registry.cn-beijing.aliyuncs.com/blxt/centos "/sbin/init" 5 minutes ago Up 5 minutes nginx1 连接到容器: root@ubuntu:~# docker exec -it nginx1 /bin/bash root@ubuntu:~# docker exec -it nginx2 /bin/bash [root@6801d55682a3 /]# hostname nginx1 #更改主机名称 [root@6801d55682a3 /]# bash #使更改的名称生效 [root@1d31d3fc0ec1 /]# hostname nginx2 [root@1d31d3fc0ec1 /]# bash安装nginx
更新软件包: [root@nginx1 /]# yum clean all #清空缓存 [root@nginx1 /]# yum makecache #更新软件包 安装nginx: [root@nginx1 /]# yum -y install nginx [root@nginx1 /]# rpm -qa | grep nginx #查看是否已经安装 启动nginx: [root@nginx1 /]# systemctl start nginx [root@nginx1 /]# netstat -anpl | grep nginx #查看nginxnn端口是否开启 [root@nginx1 /]# lsof -i:80 #查看80端口是否开启 安装第二个nginx使用相同方法即可!此处省略!!! 访问nginx: [root@nginx1 /]# curl 127.0.0.1修改网页内容
查看网页存在目录: [root@nginx1 nginx]# more nginx.conf #查看配置文件 在配置文件中找到下面root行,后面目录即网页文件存放目录 root /usr/share/nginx/html; [root@nginx1 html]# cd /usr/share/nginx/html/ [root@nginx1 html]# ls #列出目录内容 404.html 50x.html index.html nginx-logo.png poweredby.png [root@nginx1 html]# echo nginx1 > index.html #清空nginx主页文件内容,并重新写入内容为nginx1 nginx2如同,注意不要设置一样的主页内容 访问nginx: [root@nginx1 html]# curl 127.0.0.1 nginx1 [root@nginx2 ~]# curl 127.0.0.1 nginx2修改配置文件
nginx1修改内容如下: server { listen 80; server_name www.nginx1.com; //设置域名 #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; } } nginx2修改内容如下: server { listen 80; server_name www.nginx2.com; //设置域名 #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; } }
配置http负载均衡器
要开始使用NGINX Plus或NGINX开源对一组服务器的HTTP流量进行负载均衡,使用upstream指令定义该组,该指令放置在http上下文中,proxy_pass指令用来转发请求到后端一般指定在loction上下文中
基本配置方法:
http {
upstream nginx { #test为组名
server www.nginx1.com ; #server用来指定后端服务器的访问地址,一般指定域名、ip、端口,域名和ip二选一,端口可忽略
server www.nginx2.com weight=5; #weight指定权重值
server www.nginx3.com down; #down用来停止对此服务器的转发
......省略其他配置
}
server{
location / {
proxy_pass http://nginx; #http://nginx为转发那个组的后端服务器
......省略其他配置
}
......省略其他配置
}
}
nginx做负载均衡官方提供了4种方法,下面逐一介绍这四种方法:
Round Robin
请求在服务器之间平均分配,同时考虑了服务器权重。默认情况下使用此方法(没有启用它的指令)
默认配置就是Round Robin,配置方法:
http {
upstream nginx { #test为组名
server www.nginx1.com ; #server用来指定后端服务器的访问地址
server www.nginx2.com ; #weight指定权重值
......省略其他配置
}
server{
location / {
proxy_pass http://nginx; #http://nginx为转发那个组的后端服务器
......省略其他配置
}
......省略其他配置
}
}
最少连接
将活动连接最少的请求发送到服务器,也是在考虑到服务器的权重问题才设置的这种方法
配置方法:
http {
upstream nginx { #test为组名
less_conn ;
server www.nginx1.com ; #server用来指定后端服务器的访问地址
server www.nginx2.com ; #weight指定权重值
......省略其他配置
}
server{
location / {
proxy_pass http://nginx; #http:#nginx为转发那个组的后端服务器
......省略其他配置
}
......省略其他配置
}
}
ip_hash
从客户端IP地址确定向其发送请求的服务器。在这种情况下,可以使用IPv4地址的前三个八位位组或整个IPv6地址来计算哈希值。该方法保证了来自同一地址的请求将到达同一服务器,除非它不可用。
配置方法:
http {
upstream nginx { #test为组名
ip_hash ;
server www.nginx1.com ; #server用来指定后端服务器的访问地址
server www.nginx2.com ; #weight指定权重值
......省略其他配置
}
server{
location / {
proxy_pass http://nginx; #http:#nginx为转发那个组的后端服务器
......省略其他配置
}
......省略其他配置
}
}
hash
向其发送请求的服务器是根据用户定义的键确定的,该键可以是文本字符串,变量或组合。
配置方法:
http {
upstream nginx { #test为组名
hash $request_uri consistent;
server www.nginx1.com ; #server用来指定后端服务器的访问地址
server www.nginx2.com ; #weight指定权重值
......省略其他配置
}
server{
location / {
proxy_pass http://nginx; #http://nginx为转发那个组的后端服务器
......省略其他配置
}
......省略其他配置
}
}
nginx部署基于http负载均衡器的更多相关文章
- Centos6.5中Nginx部署基于IP的虚拟…
Centos6.5 中Nginx 部署基于IP 的虚拟主机 王尚2014.11.18 一.介绍虚拟主机 虚拟主机是使用特殊的软硬件技术,把一台真实的物理电脑主机 分割成多个逻辑存储单元,每个单元都没有 ...
- 在云主机上基于nginx部署基于Flask的网站服务器 (自己部署 )
1.申请云主机 a.阿里云 (注意:阿里云的服务器需要手动添加安全规则使能80端口) b.腾讯云 2.把网站服务器程序拷贝到云主机 3.远程登录云主机 4.解压网站服务器程序 yum install ...
- 部署基于.netcore5.0的ABP框架后台Api服务端,以及使用Nginx部署Vue+Element前端应用
前面介绍了很多关于ABP框架的后台Web API 服务端,以及基于Vue+Element前端应用,本篇针对两者的联合部署,以及对部署中遇到的问题进行处理.ABP框架的后端是基于.net core5.0 ...
- Ubuntu 14.04 上使用 Nginx 部署 Laravel
本教程将会涉及以下工具: Ubuntu 14.04 LTS PHP 5.5 MySQL Laravel 5.0 Nginx 参考文章:Ubuntu 14.04 上使用 Nginx 部署 Laravel ...
- 使用uWSGI+nginx部署Django项目
最近使用django写了一些项目,不过部署到服务器上碰到一些问题,还有静态文件什么的一堆问题,这里总结一下碰到的问题和解决方案,总体思路是按照官方文档走的. 原文地址:http://uwsgi-doc ...
- linux vue uwsgi nginx 部署路飞学城 安装 vue
vue+uwsgi+nginx部署路飞学城 有一天,老男孩的苑日天给我发来了两个神秘代码,听说是和mjj的结晶 超哥将这两个代码,放到了一个网站上,大家可以自行下载 路飞学城django代码#这个代码 ...
- SpringBoot集成FastDFS+Nginx整合基于Token的防盗链
为什么要用SpringBoot? SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人 ...
- 【Nginx】基于Consul+Upsync+Nginx实现动态负载均衡
一.Http动态负载均衡 什么是动态负载均衡 动态负载均衡实现方案 常用服务器注册与发现框架 二.Consul快速入门 Consul环境搭建 三.nginx-upsync-module nginx-u ...
- Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx)
Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx) 一丶集群和Nginx反向代理 ...
随机推荐
- Hbase简介以及简单的入门操作
Hbase是一个分布式的.面向列的开源数据库,可实时的读写.随机访问超大规模的数据集. Hbase主要分为两种模型: 逻辑模型和物理模型 1. 逻辑模型 Hbase的名字的来源是Hadoop data ...
- Matlab 文件格式化/Matlab Source File Formator
由于需要使用到别人编写的Matlab代码文件,但是呢不同的人有不同的风格,有的写得就比较糟糕了. 为了更好地理解代码的内容,一个比较美观的代码会让人身心愉悦. 但是在网上并没有找到一个比较好的实现,此 ...
- C语言程序设计100例之(14):丑数
例14 丑数 问题描述 丑数是其质因子只可能是2,3或5的数.前10个丑数分别为1, 2, 3, 4, 5, 6, 8, 9, 10, 12.输入一个正整数n,求第n个丑数. 输入格式 每行为一个 ...
- Python 面向对象-上篇
概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 面向过程编程最易被初学 ...
- [Part 3] 在Ubuntu 16.04源码编译PCL 1.8.1支持VTK和QT
本文首发于个人博客https://kezunlin.me/post/137aa5fc/,欢迎阅读! Part-3: Install and Configure PCL 1.8.1 with vtk q ...
- config system setting for elasticsearch
1. disable swapping. swap 分区会导致garbage collections 花费太多时间,elasticsearch 响应变慢. 方法1:swapoff -a 方法2:vi ...
- PostGIS 结合Openlayers以及Geoserver实现最短路径分析(三)
接上篇,前面在ArcMap中和Postgis中将数据都已经进行了预处理. 接下来回到Geoserver中,进行数据发布. 1.新建工作区 2.填写完工作区信息 3.打开数据存储,添加新的数据存储 4. ...
- 研究Java语言的编译器和虚拟机源代码
现在使用Java语言的人很多,但是了解Java语言实现的人非常少.如果要研究Java语言的实现,推荐研究Javac和虚拟机HotSpot的源代码实现,其中Javac相当于Java编译的前端,HotSp ...
- python变量、输入输出-xdd
1.注释 #输入身高,计算BMI 注释1,单行注释... 注释2,多行注释xiedong.. 2.中文编码声明,UTF-8编码声明 # coding=编码 # coding=utf-8 3.建议每行不 ...
- App自动化测试-1.App自动化介绍和环境搭建
App自动化测试-1.App自动化介绍和环境搭建 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-b ...