反向代理实战
1. 反向代理介绍
所谓代理功能,就是用户和应用服务器之间,Nginx只是转发请求,传递数据作用(类似中间商),不处理数据业务。所谓反向代理是服务器端的代理,代表服务器接收客户端请求,隐藏真实服务器。 从图中看出代理服务器(比如Nginx)是和服务器是在一起的,客户端无法感知真实的服务器。
2. 正向代理介绍
正向代理是客户端的代理,代表客户端向服务器发送请求,隐藏真实客户端。常见于公司内部上网,科学上网、内网穿透场景。 此时外网是无法感知真实的客户端信息。 正向代理由于是代理客户端请求,当请求过于频繁和客户端较多时,正向代理服务器的压力会变得很大,造成整个系统的性能瓶颈。
3. Nginx反向代理应用
3.1 传统系统中Nginx的反向代理应用
3.2 中小型互联网中Nginx的反向代理应用
4. Nginx反向代理配置
主要涉及的配置就是proxy_pass,在http块->server子块->location子块中。proxy_pass不能和(root
属性、index
属性同时存在),修改nginx.conf文件:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name mvnhub.com;
location / {
proxy_pass http://jiebaba.cn;
#root /www/www;
#index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
运行效果: 但是配置qq.com,会发现nginx并不能直接代理,而是通过302重定向转向https://qq.com。这是因为proxy_pass如果反向代理的地址是https类型的话,需要配置https相关证书才能生效。
5. 配置负载均衡
反向代理一个重要的应用就是支持负载均衡特性。由于负载均衡特性是作用在多个主机上面,直接在proxy_pass后面接上一个ip地址就不合适了,需要使用upstream配置,在upstream配置块中可以配置多个机器的地址信息,一般我们配置2个以上。
5.1 前期准备
提前安装三台nginx服务器:hadoop102, hadoop103, hadoop104, 其中hadoop103, hadoop104在/www/www/目录下分别创建index.html文件:
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<h2>这是首页, 我是hadoop103</h2>
</body>
</html>
hadoop104机器上就改成我是hadoop104
即可。
5.2 修改nginx配置
这里我们使用hadoop102作为负载均衡器,去反向代理hadoop103, hadoop104。所以修改hadoop102的nginx.conf配置文件,在http块->server子块->添加upstream:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream load_balance_info{
server 192.168.101.103:80;
server 192.168.101.104:80;
}
server {
listen 80;
server_name mvnhub.com;
location / {
proxy_pass load_balance_info;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}