设为首页 加入收藏

TOP

Linux-Nginx负载均衡与代理(一)
2023-07-23 13:40:48 】 浏览:143
Tags:Linux-Nginx 衡与代

Nginx负载均衡与代理

一、代理概述

代理:外卖/中介/中间商 用户无法直接做某些事情,通过中介进行处理,这个中介就是代理

用户--->代理--->web节点,后面只有一个节点,一般使用的是nginx代理功能即可,后面如果有多个节点(也就是集群)的话,需要使用nginx负载均衡功能

二、代理分类

代理分类 方向 应用
正向代理 用户(服务器)--->代理--->外部(某网站) 服务器通过代理实现共享上网/访问某个网站
反向代理 用户(app/浏览器)--->代理--->网站服务器(WEB) 给网站设置个统一入口,后面是网站集群

三、极速上手指南

1.环境概述

角色 主机名 ip
代理 lb01 10.0.0.5/172.16.1.5
web web01 10.0.0.7/172.16.1.7
域名 proxy.cn
站点目录 /app/code/proxy/index.html
#配置nginx源
[root@lb01 ~]# cat /etc/yum.repos.d/nginx.repo 
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
#安装nginx
[root@lb01 ~]# yum -y install nginx

2.环境准备

2.1 web服务器

#配置代理使用的子配置文件
[root@web01 ~]# cat /etc/nginx/conf.d/proxy.cn.conf 
server{
	listen 80;
	server_name proxy.cn;
	root /app/code/proxy;
	error_log  /var/log/nginx/proxy.cn-error.log notice;
	access_log  /var/log/nginx/proxy.cn-access.log  main;

	location /{
		index index.html;
	
	}
	
}

#配置首页文件
[root@web01 ~]# cat /app/code/proxy/index.html 
web01.proxy.cn

#测试web服务器
[root@web01 ~]# curl -H Host:proxy.cn http://10.0.0.7
web01.proxy.cn

2.2 lb01代理服务器

不需要配置站点目录,仅仅配置转发即可proxy_pass

[root@lb01 ~]# cat /etc/nginx/conf.d/proxy.cn.conf 
server{
	listen 80;
	server_name proxy.cn;
	error_log  /var/log/nginx/proxy.cn-error.log notice;
        access_log  /var/log/nginx/proxy.cn-access.log  main;
	
	location / {
		proxy_pass http://10.0.0.7;
		proxy_set_header Host $http_host;
		proxy_set_header X-Forwarded-For $remote_addr;	
	}

}

#测试代理
[root@lb01 ~]# curl -H Host:proxy.cn http://10.0.0.5
web01.proxy.cn

补充

proxy_pass指令: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass

四、代理案例

4.1 web有多个虚拟主机故障案例

故障现象:

web服务器有多个虚拟主机的时候,通过代理访问web出现异常,访问的不是我们想要的虚拟主机

原因:

代理向后端web节点发出请求的时候,请求头中的Host,呗修改成ip地址形式

相当于代理通过ip地址访问web服务器,只显示默认的虚拟主机了

解决:

修改代理到web的请求头,Host部分

proxy_set_header Host $http_host;



server{
	listen 80;
	server_name proxy.cn;
	error_log  /var/log/nginx/proxy.cn-error.log notice;
        access_log  /var/log/nginx/proxy.cn-access.log  main;
	
	location / {
		proxy_pass http://10.0.0.7;				#这一行的作用是,请求传递给指定的节点
		proxy_set_header Host $http_host;		#加了这一行,就会修改Host,不加的话,传过去就是ip
	}
}

补充:

$http_host 是nginx的变量之一,用于取出Host的内容(域名)

4.2 web记录用户真实的ip地址

现象:用户请求经过代理,然后访问web,web服务器没有记录真实的客户端的ip地址,而是记录了代理的ip

解决:

在代理上面修改请求头,最后在web服务器上记录真实的ip地址

proxy_set_header X-Forwarded-For $remote_addr;	


server{
	listen 80;
	server_name proxy.cn;
	error_log  /var/log/nginx/proxy.cn-error.log notice;
        access_log  /var/log/nginx/proxy.cn-access.log  main;
	
	location / {
		proxy_pass http://10.0.0.7;
		proxy_set_header Host $http_host;
		proxy_set_header X-Forwarded-For $remote_addr;	#加了这一行用来记录真实的ip
	}
}

image

补充:

$proxy_add_x_forwarded_for  
变量相当于$remote_addr 客户ip地址.
多层代理的时候,会记录每个代理的ip地址.相当于记录了多个$remote_addr

XFF头的内容需要通过$http_x_forwarded_for变量获取并写入到日志中.


#实际应用:
server{
	listen 80;
	server_name nginxconf.cn;
	error_log  /var/log/nginx/nginxconf.cn-error.log notice;
     access_log  /var/log/nginx/nginxconf.cn-access.log  main;

	location / {
		proxy_pass http://1
首页 上一页 1 2 3 4 5 6 7 下一页 尾页 1/10/10
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Prometheus安装部署(主体) 下一篇Ubuntu安装Zabbix6.0

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目