运维学习————nginx2-配置详解及负载均衡

目录

一、配置文件详解

1.1、结构

1.2、重要配置解释 

 1.3、详细配置

全局配置

 Events

HTTP 服务器配置 

 server虚拟主机配置

location URL匹配配置 

1.4、完整配置 

二、负载均衡

2.1、概念

2.2、集群规划及实现 

2.3、具体实现

2.3.1、克隆

2.3.2、修改tomcat1配置

启动测试

2.3.3、修改tomcat2配置 

启动测试

 2.3.4、负载均衡配置

2.3.4.1、轮询roundrobin(默认)

2.3.4.2、weight:指定轮询权值

2.3.4.3、ip_hash 

 2.3.4.4、fair(公平)

2.3.4.5、url_hash 


一、配置文件详解

1.1、结构

全局设置

       全局设置包含Events和HTTP

              HTTP包含upstream和多个Server

                       Server又包含多个location

1.2、重要配置解释 

main(全局设置,设置的指令将影响其他所有设置)

server(主机设置,用于指定主机和端口)

upstream(负载均衡服务器设置,设置一系列的后端服务器)

    location(URL匹配特定位置的设置,用于匹配网页位置)

 1.3、详细配置

全局配置

user是个主模块指令,指定Nginx Worker进程运行用户以及用户组,默认由nonody账号运行。

worker_processes是个主模块指令,指定了Nginx要开启的进程数。每个Nginx进程平均耗费10M~12M内存 ,支持5W并发。建议指定和CPU的数量一致即可。

error_log是个主模块指令,用来定义全局错误日志文件。日志输出级别有debug、info、notice、warn、error、 crit可供选择,其中,debug输出日志最为最详细,而crit输出日志最少。  (web 网站中常见的日志类别有:trace  debug  info   warn   error  fatal   每一个级别配置后向后兼容 )    log.error("日志信息-------进入了什么方法!!")

pid是个主模块指令,用来指定进程pid的存储文件位置。

worker_rlimit_nofile用于绑定worker进程和CPU, Linux内核2.4以上可用

 Events

事件指令是设定Nginx的工作模式及连接数上限

HTTP 服务器配置 

include是个主模块指令,实现对配置文件所包含的文件的设定,可以减少主配置文件的复杂度。类似于Apache中的include方法。

default_type属于HTTP核心模块指令,这里设定默认类型为二进制流,也就是当文件类型未定义时使用这种方式

log_format是Nginx的HttpLog模块指令,用于指定Nginx日志的输出格式。main为此日志输出格式的名称,可以在下面的access_log指令中引用。

client_max_body_size用来设置允许客户端请求的最大的单个文件字节数;

client_header_buffer_size用于指定来自客户端请求头的headerbuffer大小。对于大多数请求,1K的缓冲区大小已经足够,如果自定义了消息头或有更大的Cookie,可以增加缓冲区大小。这里设置为32K;

large_client_header_buffers用来指定客户端请求中较大的消息头的缓存最大数量和大小, “4”为个数,“128K”为大小,最大缓存量为4个128K;

 sendfile 参数用于开启高效文件传输模式。将tcp_nopush和tcp_nodelay两个指令设置为on用于防止网络阻塞;

 keepalive_timeout 设置客户端连接保持活动的超时时间。在超过这个时间之后,服务器会关闭该连接;

 client_header_timeout设置客户端请求头读取超时时间。如果超过这个时间,客户端还没有发送任何数据,Nginx将返回“Request time out(408)”错误;

 client_body_timeout设置客户端请求主体读取超时时间。如果超过这个时间,客户端还没有发送任何数据,Nginx将返回“Request time out(408)”错误,默认值是60;

 send_timeout指定响应客户端的超时时间。这个超时仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,Nginx将会关闭连接。

在安装目录的conf下nginx.conf配置(加入红字部分)

 server虚拟主机配置

server标志定义虚拟主机开始

     listen 用于指定虚拟主机的服务端口

     server_name 用来指定IP地址或者域名,多个域名之间用空格分开

     index 用于设定访问的默认首页地址

     root指令用于指定虚拟主机的网页根目录,这个目录可以是相对路径,也可以是绝对路径。

     Charset用于 设置网页的默认编码格式。

      access_log用来指定此虚拟主机的访问日志存放路径

      main用于指定访问日志的输出格式

location URL匹配配置 

URL地址匹配是进行Nginx配置中最灵活的部分。 location支持正则表达式匹配,也支持条件判断匹配,用户可以通过location指令实现Nginx对动、静态网页进行过滤处理。

    

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {

    root  /root/baidu;

    expires 30d;

}

通过location指令来对网页URL进行分析处理,所有扩展名以.gif、.jpg、.jpeg、.png、.bmp、.swf结尾的静态文件都交给nginx处理,而expires用来指定静态文件的过期时间,这里是30天。

这段设置是将upload和html下的所有文件都交给nginx来处理,当然,upload和html目录包含在/root/baidu/test目录中。

    location ~ ^/(upload|html)/ {

  root /root/baidu/test;

  expires 30d;

}

location是对此虚拟主机下动态网页的过滤处理,也就是将所有以.jsp为后缀的文件都交给本机的8080端口处理。

location ~ .*.jsp$ {

 index index.html;

 proxy_pass http://localhost:8080;

}

1.4、完整配置 

#user  nobody;
worker_processes  1;#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#pid        logs/nginx.pid;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#                  '$status $body_bytes_sent "$http_referer" '#                  '"$http_user_agent" "$http_x_forwarded_for"';#access_log  logs/access.log  main;sendfile        on;#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout  65;#gzip  on;
upstream my_server {                                                         server 192.168.23.112:8080;                                                  keepalive 2000;
}server {listen       80;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {root   html;index  index.html index.htm;}location /my/ {proxy_pass http://my_server/;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {#    proxy_pass   http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {#    root           html;#    fastcgi_pass   127.0.0.1:9000;#    fastcgi_index  index.php;#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;#    include        fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {#    deny  all;#}}# another virtual host using mix of IP-, name-, and port-based configuration##server {#    listen       8000;#    listen       somename:8080;#    server_name  somename  alias  another.alias;#    location / {#        root   html;#        index  index.html index.htm;#    }#}# HTTPS server##server {#    listen       443 ssl;#    server_name  localhost;#    ssl_certificate      cert.pem;#    ssl_certificate_key  cert.key;#    ssl_session_cache    shared:SSL:1m;#    ssl_session_timeout  5m;#    ssl_ciphers  HIGH:!aNULL:!MD5;#    ssl_prefer_server_ciphers  on;#    location / {#        root   html;#        index  index.html index.htm;#    }#}
}

二、负载均衡

2.1、概念

为了保证服务的高可用,服务单元往往都是集群化(相同服务部署多份)部署的,当服务消费者消费服务时,负载均衡组件(F5(硬负载),nginx,ribbon,dubbo(软负载))获取服务提供者所有实例的注册信息,并通过一定的负载均衡策略(可以自己配置)选择一个服务提供者实例,向该实例进行服务消费,这样就实现了负载均衡

2.2、集群规划及实现 

2.3、具体实现

2.3.1、克隆

使用之前的tomcat克隆一个tomcat2,记住要修改tomcat的ip地址,并用远程连接工具连上

2.3.2、修改tomcat1配置

cp -r /usr/apache-tomcat-9.0.52/ /usr/tomcat1
cp -r /usr/apache-tomcat-9.0.52/ /usr/tomcat2
cp -r /usr/apache-tomcat-9.0.52/ /usr/tomcat3

分别修改tomcat1,2,3的server.xml配置和随便改一个页面,知道访问的是当前端口下的项目就行:拿tomcat1举例

启动测试
/usr/tomcat1/bin/startup.sh
/usr/tomcat2/bin/startup.sh
/usr/tomcat3/bin/startup.sh

浏览器访问:

http://192.168.37.181:8081/index.jsp

http://192.168.37.181:8082/index.jsp

http://192.168.37.181:8083/index.jsp

2.3.3、修改tomcat2配置 

cp -r /usr/apache-tomcat-9.0.52/  /usr/tomcat4
cp -r /usr/apache-tomcat-9.0.52/  /usr/tomcat5
cp -r /usr/apache-tomcat-9.0.52/  /usr/tomcat6

修改配置和上面一样,这里就不演示了

启动测试
/usr/tomcat4/bin/startup.sh
/usr/tomcat5/bin/startup.sh
/usr/tomcat6/bin/startup.sh

浏览器输入:

http://192.168.37.182:8084/index.jsp

http://192.168.37.182:8085/index.jsp

http://192.168.37.182:8086/index.jsp

 2.3.4、负载均衡配置

upstream是Nginx的HTTP Upstream模块,这个模块通过一个简单的调度算法来实现客户端IP到后端服务器的负载均衡。

        Nginx的负载均衡模块目前支持5种调度算法,下面进行分别介绍,其中后两项属于第三方的调度方法

2.3.4.1、轮询roundrobin(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响

vim /usr/local/nginx/conf/nginx.conf

#重启nginx服务
/usr/local/nginx/sbin/nginx -s reload

测试:

http://192.168.37.183:8088/index.jsp

 你一直刷新这个页面,你会发现页面依次请求tomcat1,2,3,4,5,6这就是轮询方式

2.3.4.2、weight:指定轮询权值

修改配置

vim /usr/local/nginx/conf/nginx.conf
upstream loadbalanceserver {server  192.168.37.181:8081;server  192.168.37.181:8082;server  192.168.37.181:8083 weight=50;server  192.168.37.182:8084;server  192.168.37.182:8085;server  192.168.37.182:8086 weight=100;}

重启nginx服务

/usr/local/nginx/sbin/nginx -s reload

一直刷新页面,你会发现只会出现tomcat6和3,其它的tomcat也会出现,只是次数很少(多刷几次),并且tomcat6出现次数比3多

2.3.4.3、ip_hash 

每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题

upstream  myservers {ip_hash;server 192.168.170.11:8081;server 192.168.170.11:8082;server 192.168.170.11:8083 weight=20;server 192.168.170.12:8084;server 192.168.170.12:8085;server 192.168.170.12:8086;}

一直都是一个tomcat 

 2.3.4.4、fair(公平)

不演示了

比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块

2.3.4.5、url_hash 

不演示了

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/52421.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python | Leetcode Python题解之第372题超级次方

题目: 题解: class Solution:def superPow(self, a: int, b: List[int]) -> int:MOD 1337ans 1for e in b:ans pow(ans, 10, MOD) * pow(a, e, MOD) % MODreturn ans

C#高效异步文件监控与日志记录工具

优势 异步处理:提高了文件变化处理的效率,避免了阻塞主线程。线程安全:使用了线程安全的队列来避免多线程环境下的竞态条件。日志记录:异步日志记录减少了对主线程的干扰,并且能够处理大量事件。灵活配置:…

【MySQL、Hive】分区表

SQL 本身并不直接支持多线程处理,因为 SQL 是一种声明式语言,主要用于定义和操作数据库中的数据。多线程通常是在应用程序层面实现的。然而,有一些方法可以在 SQL 环境中优化并发处理和提高性能,这些方法在某种程度上可以被视为&q…

How to stream video in a loop via RTP using ffmpeg?

ffmpeg -re -fflags genpts -stream_loop -1 -i conf2-2.mp4 -vcodec copy -an -f rtp rtp://192.168.31.152:2000 vlc 应该可以播放出来的。 这里有一篇文章,有兴趣的可以试试: https://www.wowza.com/docs/how-to-configure-vlc-media-player-for…

MySQL 学习笔记之事务操作

文章目录 MySQL 事务操作事务概述1. 事务操作的基本用法1.1 创建表和插入数据1.2 设置手动提交1.3 正常的转账操作1.4 异常情况处理1.5 使用 START TRANSACTION 2. 事务隔离级别2.1 查看当前事务隔离级别2.2 设置事务隔离级别 完整代码 MySQL 事务操作 事务概述 事务是数据库管…

go+gin+vue入门

后端框架 1、安装go、goland 2、创建空项目 3、下载要用的包:命令行输入go get -u github.com/xxxx 4、安装mysql数据库,使用navicat创建数据库。 5、按照项目框架搭建目录、文件、代码:如router、model… 6、运行测试,go run ma…

云原生之全链路分布式跟踪系统 Zipkin和SkyWalking

贪多嚼不烂 Pinpoint 就不对比了 参考 APM系统简单对比(zipkin,pinpoint和skywalking) springcloud 看云 Zipkin和SkyWalking都是流行的分布式跟踪系统,但它们的设计和实现有明显的不同。 以下是它们之间的一些对比: 数据存储: Zipk…

RedisDistributedLock 分布式锁

设计一个简单的 RedisDistributedLock 类,实现单例模式,并包含基本的锁定机制。这个类将使用 Redis 来管理锁,确保在分布式系统中资源的同步访问 import redis.clients.jedis.Jedis;public class RedisDistributedLock {private static Redi…

nginxlvshaproxy负载均衡的区别

lvs 优势:抗负载能力很强、工作稳定、不占什么流量、pv 超过 1000 万可用 1s nginx:nginx工作第7层,支持 btkp 应用本身分流&#xff0c;s,没有这个功能 nginz 对网络依赖很小&#xff0c;nginx 安装简单也稳定,流量日p<1000 万 nginx 足以能撑住, 一般不是特别大的公司都达…

OpenCV(开源计算机视觉库)

OpenCV&#xff08;开源计算机视觉库&#xff09;是一个专注于实时计算机视觉的全面库&#xff0c;包含了丰富的工具和功能。以下是 OpenCV 中一些关键知识点的详细列表&#xff1a; 核心功能 基本结构&#xff1a;Mat、Scalar、Point、Size、Rect 等。 图像 I/O&#xff1a;读…

# 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群

利刃出鞘_Tomcat 核心原理解析&#xff08;八&#xff09;-- Tomcat 集群 一、Tomcat专题 - Tomcat集群 - 介绍及准备工作 1、Tomcat集群 简介 由于单台Tomcat的承载能力是有限的&#xff0c;当我们的业务系统用户量比较大&#xff0c;请求压力比较大时&#xff0c;单台Tomc…

macOS安装搭建python环境

安装Homebrew apt-get是一个常见于Debian和Ubuntu等基于Linux的操作系统中的包管理工具&#xff0c;用于安装、更新和移除软件包。然而&#xff0c;macOS使用的是Homebrew或者MacPorts等其他的包管理工具&#xff0c;并不使用apt-get。 如果你想在macOS上使用类似apt-get的功…

Python版《超级玛丽+源码》-Python制作超级玛丽游戏

小时候最喜欢玩的小游戏就是超级玛丽了&#xff0c;有刺激有又技巧&#xff0c;通关真的很难&#xff0c;救下小公主还被抓走了&#xff0c;唉&#xff0c;心累&#xff0c;最后还是硬着头皮继续闯&#xff0c;终于要通关了&#xff0c;之后再玩还是没有那么容易&#xff0c;哈…

<C++> 二叉搜索树

目录 二叉搜索树 1. 概念 2. 二叉搜索树操作 2.1 基础结构 2.2 非递归版 1. 查找 2. 插入 3. 删除 2.3 递归版 1. 查找 2. 插入 3. 删除 2.4 拷贝构造函数 2.5 赋值运算符重载 2.6 析构函数 2.7 完整代码 3. 二叉搜索树的应用 4. 二叉搜索树的性能 二叉搜索树 1. 概念 二叉搜索…

Debug-023-Document.createElement()的使用

Document.createElement() document.createElement()是在对象中创建一个对象&#xff0c;要与appendChild() 或 insertBefore()方法联合使用。 appendChild() 方法在节点的子节点列表末添加新的子节点。 insertBefore() 方法在节点的子节点列表任意位置插入新的节点。 用途举…

笔记整理—uboot启动过程(3)栈的二次设置以及常用名词解析,BL1部分完

前文说到了uboot的lowlevel_init都干了些什么&#xff0c;也就是经过了这项初期的低级启动&#xff0c;使得我们能在串口监视器上看见机器打印出的第一句话“OK”。当lowlevel_init结束后&#xff0c;uboot去做了另一件事情&#xff0c;那就是栈的再次设置。 第一次栈设置发生在…

Prompt-Tuning 和 LoRA大模型微调方法区别

Prompt-Tuning 和 LoRA(Low-Rank Adaptation)都是在预训练语言模型基础上进行微调的方法,它们有以下一些区别: 一、调整方式 Prompt-Tuning: 主要是通过优化特定任务的提示(prompt)来实现微调。通常在输入层引入可学习的连续提示向量,这些提示向量与原始输入进行拼接或…

解决Qt多线程中fromRawData函数生成的QByteArray数据不一致问题

解决Qt多线程中fromRawData函数生成的QByteArray数据不一致问题 目录 &#x1f514; 问题背景&#x1f4c4; 问题代码❓ 问题描述&#x1fa7a; 问题分析✔ 解决方案 &#x1f514; 问题背景 在开发一个使用Qt框架的多线程应用程序时&#xff0c;我们遇到了一个棘手的问题&…

Redis的数据结构——Hash表

Redis使用Hash表作为其底层数据结构来存储键值对。每个Redis数据库都维护着两个哈希表(Hash Table):ht[0]和ht[1],其中ht[0]是主要的哈希表,ht[1]是在进行rehash操作时使用的临时表。 Hash表的结构 Redis的哈希表由一个数组和一个链表组成。数组中的每个元素是一个指针,…

数据赋能((185)——开发:提高数据价值密度——实施过程、应用特点

实施过程 提高数据价值密度的实施过程通常包括以下几个步骤&#xff1a; 数据收集&#xff1a;根据业务需求&#xff0c;收集相关的数据资源。数据清洗&#xff1a;对收集到的数据进行清洗和预处理&#xff0c;去除重复、错误和无关的信息。数据分析&#xff1a;运用统计方法…