Nginx 配置文件的完整指南 (二)
文章目录
- 四、反向代理配置
- 4.1 proxy_pass
- 效果1—路径重写
- 效果2—转发到其他服务器
- 4.2 proxy_pass使用规则
- 4.3 proxy_set_header
- 4.3.1 修改请求协议
- 五、负载均衡配置
- 5.1 upstream
- 5.2 server
- 5.3 负载均衡策略
- 5.3.1 轮询
- 5.3.2 加权轮询
- 5.3.3 最少连接
- 5.3.3 ip_hash:基于IP的负载均衡算法
- 六、SSL/TLS配置
- 七、缓存配置
- 八、日志配置
- 九、性能优化
- 9.1 gzip:启用压缩配置
- 9.2 keepalive_timeout:保持连接超时时间
- 9.3 client_body_buffer_size:客户端请求体缓冲区大小
回顾 Nginx 配置文件的完整指南 (一)
四、反向代理配置
4.1 proxy_pass
proxy_pass指令用于设置反向代理的目标地址。
效果1—路径重写
- 请求路径:http://localhost:80/test
- 最终路径:http://localhost:8800/test1
server {listen 80; # 监听80端口的所有请求location /test {proxy_pass http://localhost:8800/test1/;}
}
效果2—转发到其他服务器
- 请求路径:http://localhost:80/test
- 最终路径:http://xxx.xxx.xxx:8800/test1
server {listen 80; # 监听80端口的所有请求location /test {proxy_pass http://xxx.xxx.xxx:8800/test1/;}
}
4.2 proxy_pass使用规则
在nginx中配置proxy_pass代理转发时,如果在proxy_pass后面的url加/,表示绝对根路径;如果没有/,表示相对路径,把匹配的路径部分也给代理走。
- 第一种:url末尾有/
请求路径:http://127.0.0.1/test/a.html
最终路径:http://xxx.xxx.xxx/a.html
location /test {proxy_pass http://xxx.xxx.xxx/;
}
- 第二种:url末尾没/
请求路径:http://127.0.0.1/test/a.html
最终路径:http://xxx.xxx.xxx/test/a.html
location /test {proxy_pass http://xxx.xxx.xxx;
}
- 第三种:
请求路径:http://127.0.0.1/test/a.html
最终路径:http://xxx.xxx.xxx/sss/a.html
location /test {proxy_pass http://xxx.xxx.xxx/ssss/;
}
- 第四种:
请求路径:http://127.0.0.1/test/a.html
最终路径:http://xxx.xxx.xxx/ssstest/a.html
location /test/ {proxy_pass http://xxx.xxx.xxx/sss;
}
4.3 proxy_set_header
用于设置反向代理请求的头信息,我们可以根据需要自定义、修改或删除请求头字段,以满足代理服务器的要求或与后端服务器进行正确的通信。
location / {# 设置请求头中的 Host 字段为当前请求的主机名proxy_set_header Host $host; # 设置请求头中的 X-Real-IP 字段为客户端的 IP 地址proxy_set_header X-Real-IP $remote_addr; # 设置请求头中的 X-Forwarded-For 字段为客户端的 IP 地址proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 设置请求头中的 User-Agent 字段为客户端的 User-Agent proxy_set_header User-Agent $http_user_agent; # 将请求转发给名为 "backend" 的后端服务器proxy_pass http://backend;
}
4.3.1 修改请求协议
没错,还能修改请求协议,下面的例子是把HTTP协议修改为webSocket:
location /socket {rewrite ^/socket/(.*)$ /$1 break; #拦截标识去除proxy_pass http://cim.tfjy.tech:34567;# 这里是http不是ws,不用怀疑,proxy_http_version 1.1; # http 1.1# 请求协议设置为webSocketproxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";
}
五、负载均衡配置
5.1 upstream
upstream指令用于定义后端服务器组,即负载均衡的目标服务器列表。
upstream指令定义了一个名为backend_servers的后端服务器组,包含了三个服务器
upstream backend_servers {server backend1.xxx.com;server backend2.xxx.com;server backend3.xxx.com;
}
5.2 server
server块用于配置一个负载均衡服务器。location块中的proxy_pass指令将请求转发到backend_servers后端服务器组。
http {upstream backend_servers {server backend1.xxx.com;server backend2.xxx.com;server backend3.xxx.com;}server {location / {proxy_pass http://backend_servers; # backend_servers是后端服务器组名,可以任意命名}}
}
5.3 负载均衡策略
Nginx 负载均衡是指使用 Nginx 作为反向代理服务器,将传入的请求分发到多个后端服务器,以平衡服务器负载并提高系统的可用性和性能。
在 Nginx 的配置文件中,可以指定不同的负载均衡策略来分配请求到后端服务器。
5.3.1 轮询
轮询是默认的负载均衡策略,它按照请求的顺序逐个将请求分配给后端服务器。
upstream backend {server backend1.xxx.com;server backend2.xxx.com;server backend3.xxx.com;
}server {location / {proxy_pass http://backend ;}}
5.3.2 加权轮询
加权轮询策略根据后端服务器的权重值分配请求,权重越高的服务器接收到的请求越多。
upstream backend {server backend1.xxx.com weight=3;server backend2.xxx.com weight=2;server backend3.xxx.com weight=1;
}server {location / {proxy_pass http://backend ;}}
5.3.3 最少连接
最少连接策略将请求分配给当前连接数最少的后端服务器。
upstream backend {least_conn;server backend1.xxx.com;server backend2.xxx.com;server backend3.xxx.com;}server {location / {proxy_pass http://backend ;}}
5.3.3 ip_hash:基于IP的负载均衡算法
基于客户端的IP地址进行负载均衡,使得同一IP的请求始终被转发到同一台后端服务器,解决session不共享问题。
http {upstream backend {ip_hash;server backend1.xxx.com;server backend2.xxx.com;server backend3.xxx.com;}server {location / {proxy_pass http://backend ;}}
}
六、SSL/TLS配置
通过配置SSL证书路径、SSL证书私钥路径、SSL/TLS协议支持版本和SSL加密算法,可以实现安全的HTTPS通信。
-
ssl_certificate:设置SSL证书的路径。 -
ssl_certificate_key:设置SSL证书的私钥路径为 -
ssl_protocols:设置SSL/TLS协议的支持版本 -
ssl_ciphers:指定SSL加密算法
server {listen 443 ssl;ssl_certificate /path/to/certificate.crt;ssl_certificate_key /path/to/private.key;ssl_protocols TLSv1.2 TLSv1.3; # 支持版本为TLSv1.2和TLSv1.3ssl_ciphers "AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256";
}
七、缓存配置
通过配置反向代理缓存路径、缓存键和缓存有效期,可以实现对反向代理响应的缓存。这样可以提高响应速度并减轻后端服务器的负载。根据实际需求,可以进一步调整缓存路径、缓存键和缓存有效期的设置。
-
proxy_cache_path设置了反向代理缓存的存储路径levels=1:2:表示缓存目录的层级结构为1层目录和2层子目录keys_zone=my_cache:10m:定义了缓存区域的名称为my_cache,并分配了10MB的内存空间
-
proxy_cache启用了反向代理缓存,并将缓存区域设置为my_cache -
proxy_cache_valid设置了缓存的有效期,对于状态码为200的响应,缓存的有效期为1小时 -
proxy_cache_key:缓存的键为$scheme$host$request_uri,即根据请求的协议、主机名和URI来生成缓存的键。
http {proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m;server {location / {proxy_pass http://backend_server;proxy_cache my_cache;proxy_cache_valid 200 1h;proxy_cache_key $scheme$host$request_uri;}}
}
八、日志配置
可以通过配置访问日志路径和格式以及错误日志路径和级别,来记录服务器的访问日志和错误信息。根据实际需求,可以选择合适的日志路径和级别,以及自定义日志格式。
access_log:配置访问日志的路径和格式error_log:配置错误日志的路径和级别
http {access_log /path/to/access.log;error_log /path/to/error.log;
}
九、性能优化
9.1 gzip:启用压缩配置
gzip指令用于启用压缩功能,并配置相应的压缩参数。
gzip on表示启用压缩功能gzip_types指定了需要进行压缩的文件类型,如文本文件、CSS文件和JavaScript文件gzip_min_length指定了最小压缩文件大小的阈值,只有大于等于该阈值的文件才会进行压缩。
http {gzip on;gzip_types text/plain text/css application/javascript;gzip_min_length 1000;
}
9.2 keepalive_timeout:保持连接超时时间
keepalive_timeout指令用于设置保持连接的超时时间。
示例代码:
http {keepalive_timeout 60s;
}
9.3 client_body_buffer_size:客户端请求体缓冲区大小
通过配置压缩功能、保持连接超时时间和客户端请求体缓冲区大小,可以进行性能优化,提高服务器的响应速度和资源利用率。根据实际需求,可以调整压缩参数、超时时间和缓冲区大小的设置。
client_body_buffer_size指令用于设置客户端请求体缓冲区的大小。
http {client_body_buffer_size 8k;
}
相关文章:
Nginx 配置文件的完整指南 (二)
文章目录 四、反向代理配置4.1 proxy_pass效果1—路径重写效果2—转发到其他服务器 4.2 proxy_pass使用规则4.3 proxy_set_header4.3.1 修改请求协议 五、负载均衡配置5.1 upstream5.2 server5.3 负载均衡策略5.3.1 轮询5.3.2 加权轮询5.3.3 最少连接5.3.3 ip_hash:…...
AI夏令营第三期 - 基于论文摘要的文本分类与关键词抽取挑战赛笔记
赛题:基于论文摘要的文本分类与关键词抽取 背景:高效的从海量医学文献中提取疾病诊断和治疗关键信息 任务:通过论文摘要判断论文是否为医学文献 样例 数据集:csv文件,字段:标题、作者、摘要、关键词 评价指…...
使用qsqlmysql操作mysql提示Driver not loaded
环境: win10 IDE: qt creator 编译器: mingw32 这里简单的记录下。我遇到的情况是在IDE使用debug和release程序都是运行正常,但是当我编译成发布版本之后。老是提示Driver not load。 这就很奇诡了。 回顾了下编译的时候是需要在使用qt先编译下libqsqlmysql.dll的…...
Java云原生框架Quarkus初探
Java云原生框架Quarkus初探 Quarkus 介绍 Quarkus 是一个云原生,容器优先的Java应用框架,它号称是超音速和亚原子的框架,主要特点是构建速度、启动速度快和占用资源少等特点。它为OpenJDK HotSpot和GraalVM量身定制, 根据Java库和…...
ElasticSearch相关概念
文章目录 前提倒排索引MySQL、ES的区别和关联IK分词器索引库mapping属性索引库的crud 文档的crudRestClientDSL查询DSL 查询种类DSL query 基本语法 搜索结构处理排序分页高亮RestClient 前提 开源的搜索引擎,从海量数据中快速找到需要的内容。(分词检索…...
微服务实战项目-学成在线-项目部署
微服务实战项目-学成在线-项目部署 1 什么是DevOps 一个软件的生命周期包括:需求分析阶、设计、开发、测试、上线、维护、升级、废弃。 通过示例说明如下: 1、产品人员进行需求分析 2、设计人员进行软件架构设计和模块设计。 3、每个模块的开发人员…...
封装form表单
目录 1. 源码 2. 其他页面引用 ps:请看完看明白再复用 1. 源码 <template><div style"width: 100%; height: 100%" class"form-condition"><!-- 普通表单 --><el-card shadow"hover" class"cardheigh…...
程序员如何利用公网远程访问查询本地硬盘【内网穿透】
🎬 鸽芷咕:个人主页 🔥 个人专栏: 《高效编程技巧》《cpolar》 ⛺️生活的理想,就是为了理想的生活! 公网远程访问本地硬盘文件【内网穿透】 文章目录 公网远程访问本地硬盘文件【内网穿透】前言1. 下载cpolar和Everything软件1.…...
算法|Day42 动态规划10
LeetCode 121.买卖股票的最佳时机 题目链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/description/ 题目描述:给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天…...
vmalert集成钉钉告警
vmalert通过在alert.rules中配置告警规则实现告警,告警规则语法与Prometheus兼容,依赖Alertmanager与prometheus-webhook-dingtalk实现钉钉告警,以下步骤: 1、构建vmalert 从源代码构建vmalert: git clone https://…...
深入解析 MyBatis 中的 <foreach> 标签:优雅处理批量操作与动态 SQL
在当今的Java应用程序开发中,数据库操作是一个不可或缺的部分。MyBatis作为一款颇受欢迎的持久层框架,为我们提供了一种优雅而高效的方式来管理数据库操作。在MyBatis的众多特性中,<foreach>标签无疑是一个强大的工具,它使得…...
LeGO-Loam代码解析(二)--- Lego-LOAM的地面点分离、聚类、两步优化方法
1 地面点分离剔除方法 1.1 数学推导 LeGO-LOAM 中前端改进中很重要的一点就是充分利用了地面点,那首先自然是提取 对地面点的提取。 如上图,相邻的两个扫描线束的同一列打在地面上如 点所示,他们的垂直高度差 ,水平距离差 ,计算垂直高度差和水平高度差…...
程序员如何利用公网打造低成本轻量化的搜索和下载平台【内网穿透】
🎬 鸽芷咕:个人主页 🔥 个人专栏: 《高效编程技巧》《cpolar》 ⛺️生活的理想,就是为了理想的生活! 公网远程访问本地硬盘文件【内网穿透】 文章目录 公网远程访问本地硬盘文件【内网穿透】前言1. 下载cpolar和Everything软件1.…...
构建可远程访问的企业内部论坛
文章目录 前言1.cpolar、PHPStudy2.Discuz3.打开PHPStudy,安装网页论坛所需软件4.进行网页运行环境的构建5.运行Discuz网页程序6.使用cpolar建立穿透内网的数据隧道,发布到公网7.对云端保留的空白数据隧道进行配置8.Discuz论坛搭建完毕 前言 企业在发展…...
2023河南萌新联赛第(六)场:河南理工大学-C 旅游
2023河南萌新联赛第(六)场:河南理工大学 https://ac.nowcoder.com/acm/contest/63602/C 文章目录 2023河南萌新联赛第(六)场:河南理工大学题意解题思路代码 题意 小C喜欢旅游,现在他要去DSH旅…...
C语言 常用工具型API ----------strchr()
函数原型 char *strchr(const char *str, int c) 参数 str-- 要被检索的 C 字符串。 c-- 在 str 中要搜索的字符。 功能 在参数str所指向的字符串中搜索第一次出现字符c(一个无符号字符)的位置 头文件 #include <string.h> 返回值 返回一…...
建造者模式的理论与实现
本文实践代码仓库:https://github.com/goSilver/my_practice 文章目录 一、定义二、作用三、实现四、总结 一、定义 建造者模式是一种创建复杂对象的设计模式。它将一个复杂对象的构建过程分解为多个简单的步骤,并且允许按照特定的顺序来构建对象。通过…...
非计算机科班如何顺利转码进入计算机领域?
文章目录 如何规划才能实现转码?计算机岗位发展前景?现阶段转码 总结 🎉欢迎来到Java学习路线专栏~探索非计算机科班如何顺利转码进入计算机领域 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页:IT陈寒的博客dz…...
【C++类和对象】类有哪些默认成员函数呢?(下)
文章目录 一、类的6个默认成员函数二、日期类的实现2.1 运算符重载部分2.2 日期之间的运算2.3 整体代码1.Date.h部分2. Date.cpp部分 三. const成员函数四. 取地址及const取地址操作符重载扩展内容 总结 ヾ(๑╹◡╹)ノ" 人总要为过去的懒惰而付出代价ヾ(๑╹◡…...
springboot自定义banner的输出与源码解析
文章目录 一、介绍二、演示环境三、自定义banner1. 文本2. 图片3. placeholder占位符4. 关闭banner 四、源码分析1. 关闭banner2. banner模式3. banner打印器4. 打印banner① 获取banner② 打印banner 5. 版本号占位符的解析器6. 文本格式占位符的解析器7. 应用标题占位符的解析…...
LayerDivider:3分钟将单张插画转换为分层PSD的智能解决方案
LayerDivider:3分钟将单张插画转换为分层PSD的智能解决方案 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider 你是否曾花费数小时手动分离插画图…...
2026届最火的六大AI科研工具实测分析
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 于学术写作范畴之内,AI工具已然成了提高效率的关键辅助方式。当下占据主导地位的…...
B2B 创始人都在狂追 SaaS 工具预算,却集体忽略了 AI 把 6 倍服务支出变成了可规模化的万亿战场
在 B2B 营收增长的残酷现实里,大多数创始人把精力全砸在销售工具的预算线上:几千美元的销售自动化 Seat、一个 SDR 薪水、偶尔再加个 agency 外包。而旁边那条真正的预算线——真正把活干完的服务支出——却被长期低估。Sequoia 合伙人 Julien Bek 最近发…...
SQL如何避免不同团队修改同一张表_基于前缀名的授权GRANT ON语法
不可行。GRANT ON 不支持表名前缀通配符,MySQL 和 PostgreSQL 均报错;权限最小粒度为单表、库或列,无表名模式授权;唯一可靠方案是物理分库(MySQL)或分 schema(PostgreSQL)并单独授权…...
别再为4G视频卡顿发愁!手把手教你用阿里云ECS和coturn搭建专属TURN中继服务器
4G视频传输卡顿终结者:基于阿里云ECS的TURN中继服务器实战指南 当你在偏远工地调试RV1106芯片的监控摄像头时,是否经历过这样的崩溃瞬间——4G网络下视频画面频繁卡顿,关键帧丢失得像打满马赛克的抽象画?这往往不是信号强度的问题…...
Python 爬虫实战:精准抓取母婴电商平台数据,深入分析用户评价洞察市场趋势
随着生活水平的提高,越来越多的年轻父母开始关注母婴产品的质量和品牌。而母婴电商平台成为了他们选择和购买产品的主要渠道之一。母婴产品市场也因此变得异常活跃且充满竞争。在这样的市场环境下,用户评价不仅反映了产品的实际质量,也揭示了…...
揭秘SITS2026现场实测结果:3类高噪声会议场景下AI纪要生成准确率断崖式提升的4步调优法
第一章:SITS2026现场实测背景与高噪声会议纪要生成挑战全景 2026奇点智能技术大会(https://ml-summit.org) SITS2026(Smart Intelligent Technical Summit 2026)于2026年4月在上海张江科学会堂举行,汇聚全球37个国家的1200技术专…...
LEETCODE HOT 100 二分查找 C‘s Log
二分查找也是最重要的就是明确自己变换的前提,也就是到底是哪个闭,哪个开, 转化成下面这句话可以这么思考:关键不在于区间里的元素具有什么性质,而是区间外面的元素具有什么性质,这个也是我在刷B站的灵神课…...
Vivado卸载程序不见了?别慌,用这个隐藏参数5分钟搞定(附SDK/HLS清理)
Vivado卸载程序消失的终极解决方案:隐藏参数与深度清理指南 当你在Windows开始菜单里翻遍了所有角落,却找不到Vivado的卸载入口时,那种感觉就像被困在数字迷宫里——明明知道出口就在某处,却怎么也找不到正确的路径。这种情况在FP…...
2026.4.15:超详细无人值守Ubuntu-Server安装保姆级教程
超详细无人值守Ubuntu-Server安装保姆级教程 环境: ubuntu-26.04-beta-live-server-amd64.iso 首先安装Ubuntu 26.04-beta live server 安装完成后,下载/var/log/installer/autoinstall-user-data文件到一个目录,比如说:自动安装 将autoinstall-user-data拷贝成user-data,…...
