Nginx作为代理服务
代理服务简介
什么是代理服务
- 代理-代理办理(代理理财、代理收货、代理购物等等)。
HTTP请求没有代理服务的模型图
HTTP请求具有代理服务的模型图
代理分类
- 正向代理
- 反向代理
正向代理
- 当局域网不能上网时,可以在浏览器设置正向代理满足上网要求
- 当我们想通过翻墙访问国外网站查询资料,可以在浏览器设置正向代理
- 当服务器只允许某个端的IP访问(比如googe),所以我们需要请求运行访问的那个客户端,在让其帮我们转发请求
正向代理模型图
反向代理
- 服务端有很多工程模块的时候,需要通过Nginx代理实现流量的分发
反向代理模型图
反向代理模型图解释:
- 客户端需要自己去请求DNS获取服务端地址;
- 代理是为服务端服务的;
- 红色虚线表示防火墙;
- 配置在服务端,分发客户端请求到不同的服务端
- 主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息
代理区别
- 区别在于形式上服务的对象不一样
- 正向代理代理的对象是客户端,为客户端服务
- 反向代理代理的对象是服务端,为服务端服务
代理模式和模块介绍
Nginx可支持的代理协议
常见的Nginx作为反向代理支持的协议
反向代理模式与Nginx代理模块
常见的Nginx作为正向代理支持的协议
注意:
- 不能支持使用HTTPS协议
- Nginx使用HTTP协议作为正向代理的协议
- Nginx使用正向代理范围比较窄
nginx 反向代理
代理服务proxy_pass配置语法
- Syntax: proxy_pass
URL
; - Default: —
- Context:
location
,if in location
,limit_except
反向代理配置场景模拟
假设有两个服务一个对外暴露,一个不对外暴露只能内部访问,对外暴露的端口是80,在内部访问的端口是8080,通过访问对外暴露的80服务来访问8080服务
(1)创建两个HTML静态资源文件
http_proxy.html文件
<h1>Welcome to http_proxy!!!!</h1>
http_proxy_redirect.html
<h1>Welcome to http_proxy_redirect_81!!!!</h1>
(2) 编辑location
配置对外暴露的代理
server {
listen 80;
server_name www.zhangbiao.com;
location ~ /test_proxy.html$ {
proxy_pass http://127.0.0.1:8080;
}
}
内部才能访问的服务
server {
listen 8080;
server_name 127.0.0.1;
location / {
root /opt/app/code2;
index http_proxy_redirect.htm;
}
Nginx作为代理服务_代理配置语法补充
proxy-缓冲区
- Syntax: proxy_buffering on | off;
- Default: proxy_buffering on;
- Context: http, server, location
扩展:
proxy_buffer_size-设置缓冲区大小(内存页大小)
proxy_buffers-设置缓冲区数量和大小(内存页数量和大小)
proxy_busy_buffers_size-设置最大缓冲区大小
proxy-重定向
- Syntax: proxy_redirect default; proxy_redirect off; proxy_redirect redirect replacement;
- Default: proxy_redirect default;
- Context: http, server, location
proxy-头信息
- Syntax: proxy_set_header field value;
- Default: proxy_set_header Host $proxy_host; proxy_set_header Connection close;
- Context: http, server, location
扩展:
proxy_hide_header-设置隐藏头信息字段
proxy_set_body-设置请求体返回信息
proxy-超时
- Syntax: proxy_connect_timeout time;
- Default: proxy_connect_timeout 60s;
- Context: http, server, location
扩展:
proxy_read_timeout-从代理服务器读取响应的超时时间
proxy_send_timeout-设置将请求传输到代理服务器的超时时间
代理配置及配置规范
代理通用配置
location / {
proxy_pass http://127.0.0.1:8080;
include proxy_params;
}
proxy_params
proxy_redirect default; proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr; proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60; proxy_buffer_size 32k;
proxy_buffering on;
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;
proxy_max_temp_file_size 256k;
代理配置详解:
proxy_redirect default;
- 没有重定向就配置成默认,除非后端返回301情况下设置成具体重定向地址
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
- 设置字段重新定义或附加到传递给代理服务器的请求头
proxy_connect_timeout 30;
- 设置代理连接超时时间
proxy_read_timeout 60;
- 设置从代理服务器读取响应的超时时间
proxy_send_timeout 60;
- 设置向代理服务器发送请求的超时时间
proxy_buffering on;
- 设置启用或禁用来自代理服务器的响应缓冲
proxy_buffer_size 32k;
- 设置用于读取从代理服务器接收的响应的第一部分的缓冲区的大小
proxy_buffers 4 128k
- 设置用于从代理服务器读取响应的缓冲区的数量和大小,用于单个连接。
proxy_busy_buffers_size 256k;
- 设置当启用来自代理服务器的响应缓冲时,限制可能忙于向响应客户端发送响应的缓冲区的总大小,而响应尚未完全读取。
proxy_max_temp_file_size 256k;
- 设置当启用来自代理服务器的响应缓冲,并且整个响应不适合proxy_buffer_size和proxy_buffers指令设置的缓冲区时,响应的一部分可以保存到临时文件中。 该指令设置临时文件的最大大小。 一次写入临时文件的数据大小由proxy_temp_file_write_size指令设置。
location / {
index index.jsp;
proxy_pass http://hello; #在这里设置一个代理,和upstream的名字一样
#以下是一些反向代理的配置可删除
proxy_redirect off;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m; #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数
proxy_connect_timeout 300; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 300; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 300; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
}
}
Nginx作为代理服务的更多相关文章
- Nginx作为代理服务之正反代理
Nginx作为代理服务之正反代理 首先什么是代理,就跟明星的经纪人类似,比如作为苍老师经纪人的我,如果你们需要和苍老师拍小电影,可以跟我这个经纪人来商量比如价格啊,时间等相关信息,那么我就作为一个代理 ...
- Nginx作为代理服务之反向代理
Nginx作为代理服务之反向代理 需求:我们需要访问一个服务,但是服务端只接受8080端口,所以需要在nginx中配置反向代理,帮助客户端代理实现. 1. 创建一个html放入到一个文件夹中 2. 在 ...
- 11、Nginx反向代理服务
1Nginx代理服务基本概述 1.代理一词并不陌生, 该服务我们常常用到如(代理理财.代理租房.代理收货等等),如下图所示 2.在没有代理模式的情况下,客户端和Nginx服务端,都是客户端直接请求服务 ...
- nginx的代理服务
nginx的代理服务 正向代理和反向代理 正向代理服务器就是用来让局域网的客户端接入外网访问外网资源,反向代理就是让外网的客户端接入局域网中的站点以访问点中的资源 正向代理 我是一个用户,我访问不了某 ...
- nginx 反向代理服务
目录 Nginx代理服务基本概述 Nginx代理服务常见模式 Nginx代理服务支持协议 Nginx反向代理配置语法 Nginx反向代理场景实践 配置代理实战 在lb01上安装nginx Nginx代 ...
- windows上 nginx 配置代理服务,配置多域名,以及最简单实现跨域配置
Nginx,不用多说啦,大家都熟悉的不能再熟悉了,它是一款轻量级的高性能Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,最近在本地研究将nginx和resin配合使用,使服务 ...
- Nginx 作为代理服务与负载均衡
代理服务 代理一代为办理(代理理财.代理收货等等) 代理区别 区别在于代理的对象不一样 正向代理代理的对象是客户端 反向代理代理的对象是服务端 反向代理配置 server { listen 80; s ...
- Linux 部署Nginx反向代理服务 使用openssl自生成证书并配置https
1.安装Nginx编译所依赖的包 正常centos中可以使用yum安装一下依赖包: yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel ...
- 搭建Nginx正向代理服务
需求背景: 前段时间公司因为业务需求需要部署一个正向代理,需要内网服务通过正向代理访问到外网移动端厂商域名通道等效果,之前一直用nginx做四层或者七层的反向代理,正向代理还是第一次配置,配置的过程也 ...
随机推荐
- WindowChrome
"chrome"一词在设计术语中是"框架"的意思,即浏览器的除了网页之外的部分. https://www.cnblogs.com/dino623/p/Cus ...
- django @login_required登录限制(2)-返回登陆成功后的页面
本次要实现的功能是,访问未登录的视图函数,需要先跳转到登录页面,登陆成功在跳转回来. 之前在网上找了很多资料,都没有找到解决方案. 跳转到登录页面很好弄,就是登陆成功跳转回来出了问题,原因是登录后的p ...
- ABP 从core降到级.net framework
后台: Application层得先写接口 再写实现,不然 abp.services.app 这个里面就没有该service.并且service保留的接口,就是interface里面定义的接口. 文件 ...
- The import junit cannot be resolved解决问题
第一次安装Junit,配置环境之后发现添加语句import junit.framework.TestCase; 编译错误 解决:项目右键Properties->Java Build Path-& ...
- Linux 内核启动信息的打印 --- dev_driver_string函数/dev_name函数
内核启动时,常会打印出一些信息:开头是 "驱动模块的名字: + 具体的信息" 如:在运行的linux系统设备上,插入鼠标,就会打印出鼠标的相关信息; [ 402.134068] i ...
- 如何保证redis数据都是热点数据
mySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据? 1.限定 Redis 占用的内存,Redis 会根据自身数据淘汰策略,加载热数据到内存.所以,计算 ...
- win 10 禁用后置摄像头
2.双摄像头电脑,甄别时默认开启的是后置摄像头,识别不到人脸. (1)更换设备参加甄别: (2)自行调整:停用电脑后置摄像头,停用后甄别时会默认调取前置摄像头: 以下操作适用于Windows surf ...
- button 在chrome浏览器下被点击时会出现一个橙色的边框
问题描述: button在chrome浏览器下被点击时会出现一个橙色的边框 在button上添加 :focus{outline:none;}也无法解决. 解决办法: 在button上添加 :focus ...
- CentOS环境Tomcat配置JDK的另一种方式
如下图catalina.sh中的描述,JAVA_HOME环境变量可以配置在CATALINA_BASE/bin/目录下的setenv.sh文件中(默认这个文件是不存在的) 创建文件setenv.sh,在 ...
- C++ getline()的两种用法
getline():用于读入一整行的数据.在C++中,有两种getline函数.第一种定义在头文件<istream>中,是istream类的成员函数:第二种定义在头文件<string ...