百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

一次说清-Nginx反向代理及参数配置

off999 2025-02-15 00:38 63 浏览 0 评论

我们在配置服务时常常会用到Nginx来设置反向代理,虽然常用,但是我们真的了解各个参数的意思吗?

不如我们一起来看下吧。

1、反向代理

反向代理(reverse proxy)方式是指用代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络中的上游服务器,并将从上游服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外表现局势一个web服务器。

2、Nginx反向代理

Nginx的反向代理,当用户发送一个HTTP请求时,Nginx不会立刻转发到上游服务器,而是先把用户的请求(包括HTTP包体)完整地接收到Nginx所在的服务器的磁盘或内存中,然后再向上游服务器发起连接,把缓存的客户端请求转发到上游服务器。

优点:降低上游服务器的负载,尽量把压力放在Nginx服务器上

缺点:延长了一个请求的处理时间,并增加了用于缓存请求内容的内存和磁盘空间。

3、负载均衡的基本配置

3.1 upstream

语法:upstream name{......};

配置块:http

upstream块定义了一个上游服务器的集群,便于反向代理中的proxy_pass使用。

ini复制代码upstream backend {
	server backend1.example.com;
	server backend2.example.com;
	server backend3.example.com;
}
server {
	location / {
			proxy_pass http://backend;
	}
}

3.2 server

语法:server name[parameters];

配置块:upstream

server指定一台上游服务器的名字,该名字可以是域名、ip地址端口、UNIX句柄等,后面可跟参数:

.weight=number:设置向这台上游服务器转发的权重,默认是1。

.max_fails=number:该选项与fail_timeout配合使用,指在fail_timeout时间段内,如果向当前的上游服务器转发失败次数超过number,则认为在当前的fail_timeout时间段内这台上游服务器不可用。max_fail默认为1,如果设置为0,表示不检查失败次数。

.fail_timeout=time:fail_timeout表示该时间段内转发失败多少次后认为上游服务器暂时不可用,用于优化反向代理功能。它与向上游服务器建立连接的超时时间、读取上游服务器的响应超时时间等完全无关。默认为10s。

.down:表示所有的上游服务器永久下线,只在使用ip_hash配置项时才有用。

.backup:在使用ip_hash配置项时它是无效的。表示所在的上游服务器只是备份服务器,只有在所有的非备份上游服务器都失效后,才会向所在的上游服务器转发请求。

ini复制代码upstream backend {
    server backend1.example.com weight=5;
    server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
    server unix:/tmp/backend3;
}

3.3 ip_hash

语法:ip_hash;

配置块:upstream

ip_hash是某个用户的请求始终落在固定的一台上游服务器上。它根据用户端的ip计算出一个key,将key按照upstream集群里的上游服务器数量进行取模,然后以取模后的结果把请求转发到相应的上游服务器中,这样确保了同一个客户端的请求只会转发到指定的上游服务器中。

ip_hash与weight(权重)配置不可同时使用。如果upstream中一台服务器不能使用时,不能直接删除,而是使用down标识,来确保转发策略的一惯性。

ini复制代码upstream backend {
    ip_hash;
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com down;
    server backend4.example.com;
}

4、反向代理的基本配置

1、proxy_pass

语法:proxy_pass URL;

配置块:location、if

将当前请求反向代理到URL参数指定的服务器上,URL可以是主机名或IP地址+端口。

bash复制代码location / {
     proxy_pass http://localhost:8000/uri
}

默认情况下反向代理是不会转发请求中的Host头部的,如需转发需加上配置:proxy_set_header Host $host;

2、proxy_method

语法:proxy_method [
GET/POST/DELETE/UPDATE/......];

配置块:http、server、location

表示转发时的协议方法名。

ini复制代码proxy_method POST;

3、proxy_hide_header

语法:proxy_hide_header the_header;

配置块:http、server、location

Nginx将上游服务器的响应转发给客户端,但默认不会转发:Date、Server、X-Pad和X-Accel-*。使用proxy_hide_header后可以任意地指定哪些HTTP头部字段不能被转发。

4、proxy_pass_header

语法:proxy_pass_header the_header

配置块:http、server、location

与proxy_hide_header功能相反,将原来禁止转发的header设置为允许转发。

5、proxy_pass_request_body

语法:proxy_pass_requst_body on|off;

默认:proxy_pass_request_body on;

配置块:http、server、location

表示确定是否向上游服务器发送HTTP包体部分。

6、proxy_pass_request_headers

语法:
proxy_pass_request_headers on|off;

默认:
proxy_pass_request_headers on;

配置块:http、server、location

作用为确定是否转发HTTP头部

7、proxy_redirect

语法:proxy_redirect[default|off|redirect replacement];

默认:proxy_redirect default;

配置块:http、server、location

当上游服务器返回的响应是重定向或刷新(如301或302)请求时,proxy_redirect可以重设http头部的location或refresh字段。

bash复制代码proxy_redirect http://localhost:8000/two/  http://frontendone;

上述代码如果上游服务器返回302,location字段的URL是
http://localhost:8000/two/some/uri/ 转发给客户端的location就是:
http://frontendonesome/uri/

.replacement:可以省略replacement参数中的主机名部分,此时会用虚拟主机名称来填充。

.off:将使location或refresh字段维持不变。

.default:按照proxy_pass配置项和所属的location配置项重组发往客户端的location头部。

bash复制代码location one {
  proxy_pass http://upstream:port/two/;
  proxy_redirect default;
}
location one {
  proxy_pass http://upstream:port/two/;
  proxy_redirect http://upstream:port/two/one;
}

上述两种配置效果一样。

8、proxy_next_upstream

语法:proxy_next_upstream[error|timeout|invalid_header|http_500|http_502|http_503|http_504|http_404|off];

默认:proxy_next_upstream error timeout;

配置块:http、server、location

表示当向一台上游服务器转发请求出现错误时,继续换一台上游服务器处理这个请求。

proxy_next_upstream参数则说明在哪些情况下会继续选择下一台上游服务器转发请求:

.error:当向上游服务器发起连接、发送请求、读取响应时出错。

.timeout:发送请求或读取响应时发生超时。

.invalid_header:上游服务器发送的响应是不合法的。

.http_500:上游服务器返回的响应码是500。

.http_502:上游服务器返回的响应码是502。

.http_503:上游服务器返回的响应码是503。

.http_504:上游服务器返回的响应码是504。

·http_404:上游服务器返回的HTTP响应码是404。

.off:关闭proxy_next_upstream功能-出错就选择另一台上游服务器再次转发。

上述就是我整理的一些Nginx反向代理的参数信息,希望对大家有所帮助,谢谢。

相关推荐

Python 打包为 Android 的 APK 文件,环境配置技术要点

现在可以用Flet或PyMe开发python应用程序app,并且打包为安卓APK文件。这对很多梦想用python开发手机应用的小伙伴提供了希望和通道。然而,打包安卓Android也...

Python虚拟环境搭建全指南,轻松解决包冲突

大家好,我是科雷!在Python开发中,虚拟环境是隔离项目依赖的重要工具,能避免不同项目间的包版本冲突。本文将详解Python内置的venv模块和第三方工具virtualenv的核心功能,带你快速掌...

这款 Python 打包exe工具太香了。图形化操作从此告别命令行

不用记命令,点鼠标就能把Python代码变成能直接打开的程序,这款工具把打包步骤从查教程的1小时压缩到3分钟选脚本的时候点“浏览”找文件,不用自己打路径,就像在电脑里找照片一样简单。设计这个功能,是因...

Python的wget库:一键下载网络资源的高效工具

大家好,我是科雷!在Python的网络资源获取工具中,wget库以其简洁高效的特点深受开发者喜爱。它能快速下载网页、图片、视频等各类网络资源,无需复杂的代码编写。本文将带你掌握wget库的核心功能及实...

UV 迄今最快、最好的 Python 包管理器

一个极速的Python包和项目管理器,用Rust编写。亮点一个可以取代pip、pip-tools、pipx、poetry、pyenv、twine、virtualenv等工具的单一工具。比...

Python M3U8下载器v1.2.1:高效解析,轻松获取流媒体资源

在流媒体内容获取场景中,PythonM3U8下载器v1.2.1以轻量化架构与强兼容性,成为开发者与普通用户获取M3U8格式视频的高效工具,解决了传统下载工具解析慢、易中断的痛点。其核心优势集中在...

丢掉Excel,手把手教你用Python做可视化,还能调节动画丝滑度

Pine发自凹非寺量子位|公众号QbitAI数据可视化动画还在用Excel做?现在一个简单的Python包就能分分钟搞定!而且生成的动画也足够丝滑,效果是酱紫的:这是一位专攻Python语言...

18.4K Star!本地部署 AI 写作助手,离线也能写文章

软件介绍:LocalLLaVA是一个本地部署的多模态AI写作助手,支持图像理解与文本生成结合,用户可以上传图片并让AI根据图片内容生成描述、文案、故事等,适合内容创作者、自媒体人使用。特点:...

将安卓手机打造成你的 Python 开发利器

优质文章,第一时间送达!作者|王翔来源|清风Python超神利器…相信多数安卓用户都使用过Qpython这款移动端的Python编辑器吧?之前我也研究过一阵子这个工具,但因为一次简单的爬虫让我...

银河麒麟系统离线安装pip和paramiko

######参考网址:https://blog.csdn.net/chrnhao/article/details/138717281将python库下载到本地安装—Pypi官网wheel版本选择详...

统信UOS服务器操作系统离线安装postgresql数据库

原文链接:统信UOS服务器离线安装postgresql数据库Hello,大家好啊!今天给大家带来一篇关于在统信UOS服务器操作系统上离线安装PostgreSQL数据库的文章。PostgreSQL是一款...

关于Linux下Docker内网离线安装的一些笔记

写在前面博文为内网离线安装docker教程安装前提是你需要有一台最小化安装的Linux机器,可以是虚机如果不是最小化,可能需要手动下载一些依赖理解不足小伙伴帮忙指正我所渴求的,無非是將心中脫穎...

抖音上好看的小姐姐,Python给你都下载了

阅读文本大概需要15分钟。1目标场景相信大家平时刷抖音短视频的时候,看到颜值高的小姐姐,都有随手点赞关注的习惯。如果一条条去刷确实很耗时间,如果Python能帮忙筛选出颜值高的小姐姐那就...

全网最简单易懂!495页Python漫画教程,高清PDF版免费下载

全网最简单易懂!495页Python漫画教程,高清PDF版免费下载今天给那些在学习Python路上有挫折的朋友分享一份《看漫画学Python》,不同的是本书采用漫画的形式,用简单易懂的语言和图片详细解...

Python爬虫-面向知乎的答案提取和图片下载

需求描述:爬取知乎的答案,爬取并下载一个问题下所有回答中的图片。实现平台:开发工具PyCharm2017,语言版本Python3.6,Chrome谷歌浏览器。基本原理:1.发送请求,获取网页HTML源...

取消回复欢迎 发表评论: