nginx Proxy 代理
1、代理原理
- 反向代理服务的实现:
需要有一个负载均衡设备(即反向代理服务器)来分发用户请求,将用户请求分发到后端正真提供服务的服务器上。服务器返回自己的服务到负载均衡设备。负载均衡设备将服务器的服务返回用户。

2、正/反向代理的区别
- 正向代理:(服务器看不到客户端:client通过代理服务器访问server)
正向代理的过程隐藏了真实的请求客户端,服务器不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替请求。我们常说的代理也就是正向代理,正向代理代理的是请求方,也就是客户端;
反向代理:(客户端看不到服务器:server通过代理服务器将数据返回给client)
反向代理的过程隐藏了真实的服务器,客户不知道真正提供服务的人是谁,客户端请求的服务都被代理服务器处理。反向代理代理的是响应方,也就是服务端;我们请求www.baidu.com时这www.baidu.com就是反向代理服务器,真实提供服务的服务器有很多台,反向代理服务器会把我们的请求分转发到真实提供服务的各台服务器。Nginx就是性能非常好的反向代理服务器,用来做负载均衡。
访问www.baidu.com是正向代理的过程

两者的区别在于代理的对象不一样:
正向代理中代理的对象是客户端。
反向代理中代理的对象是服务端。
4、知识扩展2
- HTTP Server和Application Server的区别和联系
Apache/nignx是静态服务器(HTTP Server):
Nginx优点:负载均衡、反向代理、处理静态文件优势。nginx处理静态请求的速度高于apache
Apache优点:相对于Tomcat服务器来说处理静态文件是它的优势,速度快。Apache是静态解析,适合静态HTML、图片等
HTTP Server(Nginx/Apache)常用做静态内容服务和代理服务器,将外来请求转发给后面的应用服务(tomcat,jboss,php等)。
应用服务器(tomcat/jboss/php)是动态服务器(Application Server):
应用服务器Application Server,则是一个应用执行的容器。它首先需要支持开发语言的 Runtime(对于 Tomcat 来说,就是 Java,若是Ruby/Python 等其他语言开发的应用也无法直接运行在 Tomcat 上)。
5、nginx Proxy 配置
1、代理模块
ngx_http_proxy_module
2、启用 nginx proxy 代理
环境:两台nginx真实服务器
真实服务器nginx-server
ip : 10.3.134.98
yum:
[root@biudefor]# cat /etc/nginx/conf.d/default.conf
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
在/usr/share/nginx/html 下建立index.html文件
文件中写入:this is 10.3.134.98 server
编译安装:
[root@biudefor]# vim /etc/nginx/nginx.conf
location / {
root /duan/html;
index index.html index.htm;
}
在自己指定的目录中创建文件index.html
文件中写入:this is 10.3.134.98 server
反向代理nginx-server
ip : 10.3.134.2
yum安装:
[root@biudefor]# vim /etc/nginx/conf.d/default.conf
#配置文件与编译安装一样,只是文件储存路径不一样
编译安装:
[root@biudefor]# vim /etc/nginx/nginx.conf
location / {
proxy_pass http://10.3.134.98:80; #指定真实服务器ip
proxy_redirect default;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#一定要与真实服务器日志格式一致
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
}
重新加载nginx配置文件
[root@biudefor]# nginx -s reload
yum 安装 : systemctl restart nginx
访问测试
测试机ip :10.3.134.3
[root@master ~]# curl 10.3.134.2
this is 10.3.134.98 server
测试机访问反向代理服务器10.3.134.2获取到真实服务器10.3.134.98上的信息
nginx proxy 具体配置详解
proxy_pass :真实服务器的地址,可以是ip也可以是域名和url地址
proxy_redirect :如果真实服务器使用的是的真实IP:非默认端口。则改成IP:默认端口。
proxy_set_header:重新定义或者添加发往后端服务器的请求头
proxy_set_header X-Real-IP $remote_addr;#只记录连接服务器的上一个ip地址信息。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #通过这个选项可以记录真正客户端机器的ip地址
proxy_connect_timeout::后端服务器连接的超时时间发起三次握手等候响应超时时间
proxy_send_timeout:后端服务器数据回传时间,就是在规定时间之内后端服务器必须传完所有的数据
proxy_read_timeout :nginx接收upstream(上游/真实) server数据超时, 默认60s, 如果连续的60s内没有收到1个字节, 连接关闭。像长连接
观察真实服务器10.3.134.98的日志
配置文件:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
日志:
10.3.134.2 - - [08/Jan/2020:20:33:53 +0800] "GET / HTTP/1.0" 200 13 "-" "curl/7.29.0" "10.3.134.3"
-----------------------------------------------------------------
配置文件:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$http_x_real_ip"';
加配置文件proxy_set_header X-Real-IP $remote_addr;
日志格式发生改变
日志:
10.3.134.2 - - [08/Jan/2020:20:43:00 +0800] "GET / HTTP/1.0" 200 13 "-" "curl/7.29.0" "10.3.134.3" "10.3.134.3"
网友评论