前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx Porxy反向代理

Nginx Porxy反向代理

作者头像
用户1560186
发布2019-11-19 20:51:03
9760
发布2019-11-19 20:51:03
举报
文章被收录于专栏:运维录运维录


什么时候需要使用反向代理?

我这里有个例子,早期的WEB服务器使用的是HTTP/1.0协议,是不支持keep-alive功能的,为了解决这个问题当时主流的解决方案是使用nginx做反向代理(支持HTTP/1.1当时优势之一),为客户端浏览器链接HTTP/1.1,并为后端WEB服务器链接HTTP/1.0,经过nginx代理后就可以愉快的使用keep-alive功能了。

让我们顺便八卦下

,说说为什么HTTP/1.1协议中的keep-alive功能这么重要(HTTP/2笑而不语),这是因为HTTP/1.0开销很大而速度又很慢,HTTP/1.0为每一个请求/响应都打开一个TCP连接,打开一个TCP连接需要多次往返消息传递因此速度较慢。HTTP/1.1引入了持久连接(俗称长连接)的概念: 底层的TCP连接可以通过Connection头部来被部分控制。使得对于同一个服务器的请求可以继续在该连接上完成后续请求。(一图胜千言)

八卦完HTTP/1.0协议,让我们回到nginx反向代理上,由于时间太过久远找不到当时的nginx代理配置文件,下面的示例是以一个python项目来讲解nginx如何配置反向代理。两个案例功能类似都是反向代理后端服务器,所以能够说明问题。

说明下项目环境,这个python项目是基于django框架开发的,django框架内置web服务可以直接运行项目,不过django官方明确内置的web服务适用于开发环境,不建议直接用于生产环境,更不用说nginx静态文件处理能力是"这些框架"内置web服务所望尘莫及的。

所以这里增加了nginx用于反向代理django内置web服务,拓扑图如下。


配置文件


示例配置文件中,使用proxy_set_header指令设置Http头部,最后使用proxy_pass指令转发请求到后端服务器。

X-Forwarded-For

代码语言:txt
复制
用来记录代理服务器的地址,每经过一个代理该字段会追加上一个记录。例如:6.6.6.6, 8.8.8.8。

X-Real-IP

代码语言:txt
复制
同样用来记录代理服务器的地址,但是和上面的不同它不把记录追加到尾部,而是直接替换掉。

Host

代码语言:txt
复制
为后端服务器重新设定Host主机头,$host变量的值在请求包含"Host"请求头时为"Host"字段的值,在请求未携带"Host"请求头时为虚拟主机的主域名。

remote_addr

代码语言:txt
复制
表示客户端地址,_**注意**_如果存在代理服务器,则是最后的代理服务器地址,而非真正的客户端地址。

proxy_pass

代码语言:txt
复制
经过调整/封装Http头部信息后将请求转发到后端的服务器。

proxy_set_header 指令


语法: proxy_set_header field value 默认值: proxy_set_header Host $proxy_host; proxy_set_header Connection close; 使用字段: http, server, location字段。 功能: 这个指令允许重新定义或者添加发往后端服务器的请求头。 value可以包含文本、变量或者它们的组合。

proxy_pass 指令


语法: proxy_pass URL 默认值: none 使用字段: location, location中的if字段。 功能: 这个指令设置被代理服务器的地址和被映射的URI。 地址可以使用主机名或IP加端口号的形式。 proxy_pass http://localhost:8000/uri/; 或者unix socket,路径在unix关键字的后面指定,位于两个冒号之间。 proxy_pass http://unix:/tmp/backend.socket:/uri/;

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维录 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
轻量应用服务器
轻量应用服务器(TencentCloud Lighthouse)是新一代开箱即用、面向轻量应用场景的云服务器产品,助力中小企业和开发者便捷高效的在云端构建网站、Web应用、小程序/小游戏、游戏服、电商应用、云盘/图床和开发测试环境,相比普通云服务器更加简单易用且更贴近应用,以套餐形式整体售卖云资源并提供高带宽流量包,将热门开源软件打包实现一键构建应用,提供极简上云体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档