nginx 负载均衡详解
配置文件
upstream abc {
server 192.168.2.188:8080 weight=1 max_fails=3 fail_timeout=30;
定义集群,weight=权重轮询,max_fails=请求失败次数,fail_timeout=失败超时时间
}
server {
listen 8000;
server_name web1.abc.com;
location / {
proxy_read_timeout 300; #连接成功后,等候后端服务器响应时间(后端服务器处理请求的时间)
proxy_connect_timeout; #后端服务器连接的超时时间
proxy_send_timeout; #后端服务器数据回传时间,在规定时间内后端服务器必须传完所有的数据
proxy_set_header Host $host; #代理服务器发送请求头部中加入host字段信息,用于后端多个虚拟主机。
proxy_set_header X-Real-IP $remote_addr; #远端真实ip,多级代理中正向代理记录真实ip,反向代理记录连接的客户端ip
proxy_set_header X-Forwarded-For $remote_addr; #远端真实ip,多级代理会追加记录
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #在原有请求头X-Forwarded-For字段的基础上增加了连接nginx的服务器ip地址
proxy_set_header X-Forwarded-For "$http_x_forwarded_for, $remote_addr"; #相当于上面的命令
proxy_next_upstream error timeout http_404 http_502 non_idemponent(请求方法POST,LOCK,PATCH); #访问错误,允许转发到其他服务器
}
}
server {
listen 8000;
server_name aaa.com
access_log logs/aaa.access.log; #访问日志
error_log logs/aaa.error.log; #错误日志
location ^~ /.well-known {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://www.weixin.com;
}
location /tomcat {
proxy_read_timeout 300;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass abc;
}
location /solr {
proxy_read_timeout 300;
proxy_pass abc
}
server {
listen 8000;
server_name images.abc.com;
access_log logs/image.access.log;
error_log logs/image.error.log;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 150;
proxy_send_timeout 100;
proxy_read_timeout 100;
proxy_buffers 4 32k; #缓冲区的数量和大小
client_max_body_size 1m; #上传文件最大值
client_body_buffer_size 64k; #请求体缓存区大小
root /home/tom/data/images/; #图片目录
}
location /images.abc.com {
rewrite '^/images.abc.com/(.*)$' http://images.abc.com/$1;
}
}
server {
listen 8001;
server_name api.tt.com;
access_log logs/proxy.access.log;
error_log logs/proxy.error.log;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://www.tt.com;
}
}
log_format mainAccess '$remote_addr - $remote_user [$time_local] $http_host $request_method "$uri" "$query_string" $status "$http_x_forwarded_for" [$request_body] [$ssl_client_s_dn]';
日志格式
$remote_addr #客户端地址 211.28.65.253
$remote_user #客户端用户名称 --
$time_local #访问时间和时区 18/Jul/2012:17:00:01 +0800
$http_host #请求地址,即浏览器中你输入的地址(IP或域名) www.abc.com 192.168.100.100
$request_method #访问页面的请求方法 get
$uri #请求的文件和路径,不包含”?”或者”#”之类的东西
$query_string #GET请求中的参数 foo=123&bar=blahblah;这个变量只可以被修改
$status HTTP #请求状态 200
$http_x_forwarded_for #真实IP地址
$request_body #记录POST请求
$ssl_client_s_dn #返回建立的SSL连接中客户端证书的DN主题字段
-------------------------------------------------------------------------------------------------------
$upstream_status #upstream状态 200
$body_bytes_sent #发送给客户端文件内容大小 1547
$http_referer #url跳转来源 https://www.baidu.com/
$http_user_agent #用户终端浏览器等信息
$upstream_addr #后台upstream的地址,即真正提供服务的主机地址 10.10.10.100:80
$request_time #整个请求的总时间 0.205
$upstream_response_time #请求过程中,upstream响应时间 0.002日志格式 客户端地址 客户端用户 访问时间和时区
$request #请求的URI和HTTP协议 GET /article-10000.html HTTP/1.1
$request_uri #请求的整个字符串,包含了后面请求的东西
$ssl_cipher #返回SSL连接中使用的密码字段的算法。 RC4-SHA
$ssl_client_serial #返回SSL连接中客户端证书的序列号。
$ssl_client_s_dn #返回SSL连接中客户端证书的DN主题字段。
$ssl_client_i_dn #返回SSL连接中客户端证书的DN发行者字段。
$ssl_protocol #返回SSL连接中使用的协议。 TLSv1
$ssl_session_id #需要0.8.20以上版本。
$ssl_client_verify #如果客户端证书审核通过,这个变量为“SUCCESS”。
$ssl_client_raw_cert #返回SSL连接的PEM格式客户端证书;
server {
listen 9001;
server_name api.tt.com;
access_log logs/proxy.access.log mainAccess;
error_log logs/proxy.error.log;
location / {
proxy_set_header Host 'api.tt.com';
proxy_set_header X-SSL-CERT $ssl_client_raw_cert; #通过X-SSL-Cert包头向服务器提供证书信息
proxy_ssl_certificate /home/tom/data/cert/apiclient_cert.pem;
proxy_ssl_certificate_key /home/tom/data/cert/apiclient_cert.key;
proxy_pass https://123.123.123.123;
}
}
server {
listen 9002;
access_log logs/proxy.access.log;
error_log logs/proxy.error.log;
location / {
resolver 8.8.8.8; #正向代理,DNS 解析 IP 地址
proxy_pass $scheme://$http_host$request_uri;
#$scheme: 所用的协议,http或https
#$http_host: 始终等于HTTP_HOST请求标题
#$host :等于$http_host,小写且无端口号,若HTTP_HOST不存在或空值,等于server_name的值
#$request_uri: 完整url中去最前面$host的部分,如:www.qq.com/a/b?c=6,$request_uri== /a/b?c=6
proxy_buffers 256 4k; #缓冲区的数量和大小
proxy_max_temp_file_size 0k; #关闭临时文件缓冲
}
}
server {
listen 9003;
server_name 192.168.2.2;
access_log logs/proxy.access.log;
error_log logs/proxy.error.log;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://192.168.2.100:9000;
}
}
server {
listen 9004;
server_name 192.168.2.2;
access_log logs/file.access.log;
error_log logs/file.error.log;
location / {
root /home/tom/data/files;
}
}
server {
listen 9000;
server_name 192.168.2.2 down.abc.com;
access_log logs/file.access.log;
error_log logs/file.error.log;
location / {
root /home/tom/data/files;
}
}
server {
listen 9443;
server_name 192.168.2.2 down.abc.com;
access_log logs/file.access.log;
error_log logs/file.error.log;
location / {
root /home/tom/data/files;
}
}
第一版配置:
proxy_set_header X-Forwarded-For $remote_addr;
#如上配置只能增加负载均衡ip地址,丢失了客户端真实ip和任意中间代理ip
第二版配置
proxy_set_header X-Forwarded-For "$http_x_forwarded_for, $remote_addr";
#如上配置在原有请求头X-Forwarded-For字段的基础上增加了连接nginx的服务器ip地址
第三版配置(最为简单)
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#$proxy_add_x_forwarded_for已经实现了第二版的功能,直接使用该内置变量即可
最常用的配置
nginx 负载均衡详解的更多相关文章
- Nginx负载均衡详解
upstream mysvr { server 192.168.10.121:3333; server 192.168.10.122:3333; } server { .... location ...
- 160517、nginx负载均衡详解
1:什么是负载均衡 负载平衡(Load balancing)是一种计算机网络技术,用来在多个计算机(计算机集群).网络连接.CPU.磁盘驱动器或其他资源中分配负载,以达到最佳化资源使用.最大化吞吐率. ...
- Nginx代理功能与负载均衡详解
序言 Nginx的代理功能与负载均衡功能是最常被用到的,关于nginx的基本语法常识与配置已在上篇文章中有说明,这篇就开门见山,先描述一些关于代理功能的配置,再说明负载均衡详细. Nginx代理服务的 ...
- Nginx 反向代理与负载均衡详解
序言 Nginx的代理功能与负载均衡功能是最常被用到的,关于nginx的基本语法常识与配置已在Nginx 配置详解中有说明,这篇就开门见山,先描述一些关于代理功能的配置,再说明负载均衡详细. Ngin ...
- Docker Swarm 负载均衡详解 or 模式选择
Docker Swarm 负载均衡详解 Swarm模式内置DNS组件,可以自动为集群中的每个服务分配DNS记录. Swarm manager使用内部负载均衡,根据服务的DNS名称在集群内的服务之间分发 ...
- Spring Cloud:使用Ribbon实现负载均衡详解(下)
在上一篇文章(Spring Cloud:使用Ribbon实现负载均衡详解(上))中,我对 Ribbon 做了一个介绍,Ribbon 可以实现直接通过服务名称对服务进行访问.这一篇文章我详细分析一下如何 ...
- Nginx的upstream反向代理、负载均衡详解
这篇文章的前提是已经配置好了NGINX,而且tomcat已经配置好了,而且能能够访问了. 说反向代理之前,我们先看看正向代理,正向代理也是大家最常接触的到的代理模式. 正向代理最大的特点是客户端非常明 ...
- Tomcat安装、配置、优化及负载均衡详解
一.常见JavaWeb服务器 1.WebLogic:是BEA公司的产品.WebSphereAS:是IBM公司的产品.JBossAS:红帽公司的产品,可以自行了解 2.Tomcat服 ...
- 项目详解2—LVS负载均衡详解
一.负载均衡集群介绍 1.集群 ① 集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能.可靠性.灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技 ...
随机推荐
- mybatis和spring的xml基本配置
mybatis 导入依赖环境 <dependency> <groupId>org.mybatis</groupId> <artifactId>mybat ...
- LeetCode-055-跳跃游戏
跳跃游戏 题目描述:给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 . 数组中的每个元素代表你在该位置可以跳跃的最大长度. 判断你是否能够到达最后一个下标. 示例说明请见LeetCod ...
- out与err输出流
System.in.System.out与System.err 当我们查阅文档可知,out与err都是Java中的输出流,in是"标准"输入流,System.out是"标 ...
- Vue基础语法-数据绑定、事件处理和扩展组件等知识详解(案例分析,简单易懂,附源码)
前言: 本篇文章主要讲解了Vue实例对象的创建.常用内置指令的使用.自定义组件的创建.生命周期(钩子函数)等.以及个人的心得体会,汇集成本篇文章,作为自己对Vue基础知识入门级的总结与笔记. 其中介绍 ...
- web -- ssrf
web学习之SSRF 最开始玩ctf接触的就是web但是随着开始逐渐专注于pwn,在加之web的知识体系本来就繁杂,所以准备写一期关于web大体的知识 day1 SSRF SSRF(Server-Si ...
- insert一个表的数据到另外一个表
insert into a(real_name,is_main,mobile,password,property_id,create_time) select linkman as real_name ...
- java方法学习
java方法学习 方法概念 什么是方法 方法就是完成某些事情的过程,如:实现两个数相加,用方法add(数值1,数值2). 1.System.out.print(),System是系统的一个类,out是 ...
- LGP7704题解
来一个特别暴力的做法. 首先,如果删掉 \(x\) 和 \(y\) 的效果一定和删掉 \(xy\) 的效果相同,且代价一定不大于后者. 于是我们只删除质数,题目就变成了寻找 \(i!(1 \leq i ...
- [递归回溯] LeetCode 504七进制数(摸鱼版)
LeetCode 七进制数 前言: 这个就没什么好说的了 题目:略 步入正题 进位制转换 10 -n 余数加倒叙 没什么好讲的直接上七进制代码 偷个懒 10进位制转7 class Solution { ...
- VB、VBA、VBS的区别与联系
概念 VB Visual Basic(简称VB)是Microsoft公司开发的一种通用的基于对象的程序设计语言,为结构化的.模块化的.面向对象的.包含协助开发环境的事件驱动为机制的可视化程序设计语 ...