linux运维、架构之路-Nginx反向代理
一、 Nginx负载均衡和反向代理知识
1、集群概念
一堆服务器合作做同一件事,这些机器可能需要整个技术团队架构、设计和统一协调管理,这些机器可以分布在一个机房,也可以分布在全国各个地区的多个机房。
2、集群作用
①提高网站处理用户请求能力
②提高网站稳定运行高可用性
3、集群分类
①高可用集群HA
②负载均衡集群LB
1)硬件实现负载
F5硬件设备
A10硬件设备
2)软件实现负载
Nginx(7层,1.9版本之后也支持4层负载)
LVS(4层)
Haproxy(4、7层)
说明: 所谓四层就是基于IP+端口的负载均衡;七层就是基于URL等应用层信息的负载均衡
4、负载均衡与反向代理对比
负载均衡 |
反向代理 |
对用户的访问请求进行调试管理 |
接收用户请求代替用户向后端访问 |
对用户的访问请求进行压力分担 |
5、反向代理与数据转发区别
二、反向代理部署
1、快速部署
useradd -s /sbin/nologin -M www
mkdir -p /server/tools/
cd /server/tools/
wget http://nginx.org/download/nginx-1.10.3.tar.gz
tar xf nginx-1.10..tar.gz
yum install pcre-devel openssl-devel -y
cd /server/tools/nginx-1.10.
./configure --prefix=/application/nginx-1.10. --user=www --group=www --with-http_stub_status_module --with-http_ssl_module
make && make install
ln -s /application/nginx-1.10./ /application/nginx
ln -s /application/nginx/sbin/nginx /usr/local/sbin/
nginx
lsof -i:
2、 统一编写nginx配置(web01,web02)
worker_processes ;
error_log logs/error.log error;
events {
worker_connections ;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout ;
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;
include extra/www.conf;
include extra/blog.conf;
include extra/bbs.conf;
include extra/status.conf;
}
3、统一两台web服务器测试环境
①web01
[root@web01 html]# cat {www,bbs}/index.html
10.0.0.8 www
10.0.0.8 bbs
②web02
[root@web02 html]# cat {www,bbs}/index.html
10.0.0.7 www
10.0.0.7 bbs
4、编辑nginx.conf配置文件实现负载功能(lb01)
worker_processes ;
events {
worker_connections ;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout ;
upstream server_pools {
server 10.0.0.7:;
server 10.0.0.8:;
}
server {
listen ;
server_name bbs.etiantian.org;
location / {
proxy_pass http://server_pools;
proxy_set_header host $host;
}
}
server {
listen ;
server_name www.etiantian.org;
location / {
proxy_pass http://server_pools;
proxy_set_header host $host;
}
}
}
注:主要应用到nginx的ngx_http_upstream_module,官方例子
upstream backend {
server backend1.example.com weight=;
server backend2.example.com:;
server unix:/tmp/backend3; server backup1.example.com: backup;
server backup2.example.com: backup;
} server {
location / {
proxy_pass http://backend;
}
}
5、浏览器测试或linux下进行web服务
[root@lb01 conf]# curl www.etiantian.org
10.0.0.7 www
[root@lb01 conf]# curl www.etiantian.org
10.0.0.8 www
[root@lb01 conf]# curl bbs.etiantian.org
10.0.0.7 bbs
[root@lb01 conf]# curl bbs.etiantian.org
10.0.0.8 bbs
注:浏览器测试之前,重启nginx服务程序(lb01 web01 web02)
6、upstream参数说明
upstream模块内参数 |
参数说明 |
server 10.0.0.8:80 |
负载均衡后面的RS配置,可以是IP或域名,默认80端口,高并发场景下,IP可换成域名,通过DNS做负载均衡 |
weigth=1 |
代表服务器的权重,默认值是1,权重数字越大表示接受的请求比例越大 |
max_fails=5 |
尝试连接后端主机失败的次数,这个值是配合proxy_net_upstream、fastcgi_next_upstream和memached_net_upstream这三个参数使用,当nginx接收后端服务器返回这三个参数定义的状态码时,会将这个请求转发给正常工作的后端服务器,例如404、502、503、Max_fails的默认值是1;企业场景下建议2-3次 |
fail_timeout=10s |
在max_fails定义的失败次数后,距离下次检查的间隔时间,默认是10s,如果max_fails是5,就检测5次,如果5次都是502,那么会根据fail_timeout的值,等待10s再去检查,还是只检查一次,如果持续502,在不重新加载nginx配置的情况下,每隔10s都只检查一次,常规业务2~3秒比较合理 |
backup |
热备配置(RS节点高可用),当前面RS都失败后会自动启用热备RS,这标志着这个服务器作为备份服务器,若主服务器全部宕机了,就会向它转发请求,注意:当负载调度算法为ip_hash时,后端服务器在负载均衡调度中的状态不能是weight和backup |
down |
这标志着服务器永远不可用,这个参数可配合ip_hash使用,类似注释效果 |
7、调度算法
rr |
定义轮询调度算法,默认调度算法 |
wrr |
定义权重调度算法 |
ip_hash |
定义静态调度算法 |
least_conn |
定义最小的连接数 |
三、Nginx反向代理
1、记录用户访问真实IP地址
cat nging.conf
worker_processes ;
events {
worker_connections ;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout ;
upstream server_pools {
server 10.0.0.7:;
server 10.0.0.8:;
}
server {
listen ;
server_name bbs.etiantian.org;
location / {
proxy_pass http://server_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;#此模块记录用户访问真实地址
}
}
server {
listen ;
server_name www.etiantian.org;
location / {
proxy_pass http://server_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
}
2、Nginx反向代理参数
Nginx反向代理重要参数 |
参数说明 |
proxy_pass http://server_pools; |
通过proxy_pass功能把用户的请求转向反向代理定义的upstream服务器池 |
proxy_set_header Host $host |
在代理向后端服务器发送的http请求头中加入host字段信息,用于当后端服务器配置有多个虚拟主机时,可以识别代理的是哪个虚拟主机,这是节点服务器多虚拟主时的关键配置。 |
proxy_set_header X-Forwarded-For $remote_addr; |
在代理向后端服务器发送的http请求头中加入X-Forward-For字段信息,用于后端服务器程序、日志等接收记录真实用户的ip,而不是代理服务器的IP,这是反向代理时,节点服务器获取用户真实IP的必要功能配置 |
四、企业案例:动静分离
1、配置多个upstream实现uri转发
/upload |
10.0.0.8:80 |
html/www/upload |
upload服务器 |
/static |
10.0.0.7:80 |
html/www/static |
static静态服务器 |
/ |
10.0.0.9:80 |
html/www |
默认 |
2、调用多个upstream
worker_processes ;
events {
worker_connections ;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout ;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
upstream upload_pools {
server 10.0.0.8:;
} upstream static_pools {
server 10.0.0.7:;
} upstream default_pools {
server 10.0.0.9:;
}
server {
listen ;
server_name www.etiantian.org;
location /static/ {
proxy_pass http://static_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
location /upload/ {
proxy_pass http://upload_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
location / {
proxy_pass http://default_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
access_log logs/access_www.log main;
}
}
3、模拟环境
①web01
mkdir -p /application/nginx/html/www/upload
echo "web01 upload" >/application/nginx/html/www/upload/nana.html
②web02
mkdir -p /application/nginx/html/www/static
echo "web02 static" >/application/nginx/html/www/static/nana.html
③web02
mkdir /application/nginx/html/www -p
echo "web03 default" >/application/nginx/html/www/nana.html
④测试
curl -H host:www.etiantian.org 10.0.0.9/upload/nana.html
curl -H host:www.etiantian.org 10.0.0.8/upload/nana.html
curl -H host:www.etiantian.org 10.0.0.7/static/nana.html
4、Wireshark抓包分析
①web01
②web02
③web03
5、根据用户不同的浏览器,客户端进行转发
不同的客户端 访问不同的网站,手机和电脑 访问相同的网站----结果不同
> GET / HTTP/1.1
> User-Agent: curl/7.19. (x86_64-redhat-linux-gnu) libcurl/7.19. NSS/3.21 Basic ECC zlib/1.2. libidn/1.18 libssh2/1.4.
> Host: www.baidu.com
> Accept: */*
User-Agent-------的内容-----nginx有一个变量$http_user_agent
负载均衡配置nginx.conf
worker_processes ;
events {
worker_connections ;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout ;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'; upstream upload_pools {
server 10.0.0.8:;
}
upstream static_pools {
server 10.0.0.7:;
} upstream default_pools {
server 10.0.0.9:;
} server {
listen ;
server_name www.etiantian.org;
location / {
if ($http_user_agent ~* "MSIE")
{
proxy_pass http://static_pools;
}
if ($http_user_agent ~* "Chrome")
{
proxy_pass http://upload_pools;
}
proxy_pass http://default_pools;
}
access_log logs/access_www.log main;
}
}
linux中测试
[root@lb01 ~]# curl -A "iphone" www.etiantian.org/nana.html
www web01
[root@lb01 ~]# curl -A "android" www.etiantian.org/nana.html
www web02
[root@lb01 ~]# curl -A "asdasdasd" www.etiantian.org/nana.html
web03 default
linux运维、架构之路-Nginx反向代理的更多相关文章
- centos6.5环境自动化运维之puppet实现nginx反向代理功能及puppet安装配置详解
puppet是一种Linux.Unix.windows平台的集中配置管理系统,使用自有的puppet描述语言,可管理配置文件.用户.cron任务.软件包.系统服务等.puppet把这些系统实体称之为资 ...
- linux运维架构师职业规划
1.假如你从来未接触过Linux的话,首先要做的就找一本指导书来学习.现在公认的Linux的入门书籍是“鸟哥的私房菜”,讲的很全面,鸟哥的私房菜一共分为两部,一部是基础篇,一部是服务器篇.“鸟哥的私房 ...
- Linux实战教学笔记30:Nginx反向代理与负载均衡应用实践
1.1 集群简介 简单地说,集群就是指一组(若干个)相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立服务器.这些服务器之间可 ...
- (总结)Linux服务器上最简单的Nginx反向代理配置
Nginx不但是一款高性能的Web服务器,也是高性能的反向代理服务器.下面简单说说Nginx的反向代理功能. 反向代理是什么? 反向代理指以代理服务器来接受Internet上的连接请求,然后将请求转发 ...
- linux运维、架构之路-HAProxy反向代理
一.HAProxy介绍 专业反向代理,支持双机热备支持虚拟主机,配置简单,拥有非常不错的服务器健康检查功能,当其代理的后端节点出现故障, HAProxy会自动将该服务器摘除,故障恢复 ...
- Linux运维之--LVS、Nginx、HAproxy有什么区别?
LVS: 是基于四层的转发 HAproxy: 是基于四层和七层的转发,是专业的代理服务器 Nginx: 是WEB服务器,缓存服务器,又是反向代理服务器,可以做七层的转发 区别: LVS由于是基于四层的 ...
- Linux 运维请务必收藏~ Nginx 五大常见应用场景
关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ Nginx 是一个很强大的高性能 Web 和反向代理服务,它具有很多非常优越的特性,在连接高并 ...
- 从苦逼到牛逼,详解Linux运维工程师的打怪升级之路
做运维也快四年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变化挺大,学习了很多新的知识点. 运维工程师是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具有敏锐的嗅觉感 ...
- linux运维升级路线
运维工程师是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具有敏锐的嗅觉感知前方潮流变化.如:今年大数据,人工智能比较火……(相对表示就是 Python 比较火) 之前写过运维 ...
随机推荐
- python-加密(base64)
import base64 #base64也是用来加密的,但是这个是可以解密的 s = "username" byte类型print(base64.b64encode(s.enco ...
- c# Thread——1.为什么Abort中断线程是不可靠的
Thread.Abort 方法在c#中用作强制中断线程的执行,大多用于线程内部满足某个特定条件而自己调用关闭自身,比如下面的代码在i自增到3的时候就会停止打印. class Program { sta ...
- Hibernate异常:MappingException
异常信息: org.hibernate.MappingException: Unknown entity: com.geore.pojo.customer.Customer 造成原因: Mapping ...
- Python函数装饰器原理与用法详解《摘》
本文实例讲述了Python函数装饰器原理与用法.分享给大家供大家参考,具体如下: 装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值 ...
- java基础笔记(1)
---恢复内容开始--- JVM:java虚拟机,java跨平台是通过JVM来实现的, 将java文件执行的过程:源文件----编译器----->字节码文件------解释器------> ...
- ARM汇编2
一. 数据处理汇编指令 1.1. 数据传输指令 1.1.1. mov(Move) 指令 示例:mov r0, r0, LSL#3 ; r0 = r0* 8 mov pc, r ...
- 三大浏览器(火狐-谷歌-IE浏览器)驱动版本下载
1.chrome浏览器: 对于chrome浏览器,有时候会有闪退的情况,有时候也许是版本冲突的问题,我们要对照着这个表来对照查看是不是webdriver和chrome版本不对应 点击下载chrome的 ...
- Appium+Python之异常自动截图
运行过程中出现异常情况,我们怎么直观的看到呢?最简单的方法就是可以把异常现象截图下来. 思路:我这里采用get_screenshot_as_file(filename)方法,filename通过获取时 ...
- SCUT - 297 - 狂符「幻视调律(Visionary Tuning)」 - 重链剖分
https://scut.online/p/297 一般的树剖是关于点权的,但是突发奇想好像边权也是一样的.做一些小改动. #include<bits/stdc++.h> #define ...
- Python 内置函数raw_input()和input()用法和区别
我们知道python接受输入的raw_input()和input() ,在python3 输入raw_input() 去掉乐,只要用input() 输入,input 可以接收一个Python表达式作为 ...