nginx反向代理
- nginx反向代理
- 8.反向代理
- 8.1 实现http反向代理
- 8.1.1 反向代理配置参数
- 8.1.2 反向代理单台web服务器
- 8.1.2.1 端口号后加"/"
- 8.1.2.2 端口号后不加"/"
- 8.1.3指定location 实现反向代理,动静分离
- 8.1.4 反向代理实例:缓存功能
- 8.1.4.1 举例
- 8.1.5 实现反向代理客户端 IP 透传
- 8.1.5.1 一级代理
- 8.1.5.2 多级代理ip地址透传
nginx反向代理
8.反向代理
8.1 实现http反向代理
官方文档: https://nginx.org/en/docs/http/ngx_http_proxy_module.html
8.1.1 反向代理配置参数
#官方文档:https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass
proxy_pass;
#用来设置将客户端请求转发给的后端服务器的主机,可以是主机名(将转发至后端服务做为主机头首部)、IP
地址:端口的方式
#也可以代理到预先设置的主机群组,需要模块ngx_http_upstream_module支持#示例:location /web {index index.html;proxy_pass http://10.0.0.18:8080; #8080后面无uri,即无 / 符号,需要将location后面url 附加到proxy_pass指定的url后面,此行为类似于root
#proxy_pass指定的uri不带斜线将访问的/web,等于访问后端服务器
http://10.0.0.18:8080/web/index.html,即后端服务器配置的站点根目录要有web目录才可以被访问# http://nginx/web/index.html ==> http://10.0.0.18:8080/web/index.htmlproxy_pass http://10.0.0.18:8080/; #8080后面有uri,即有 / 符号,相当于置换,即访问/web时实际返回proxy_pass后面uri内容.此行为类似于alias #proxy_pass指定的uri带斜线,等于访问后端服务器的http://10.0.0.18:8080/index.html 内容返回给客户端} # http://nginx/web/index.html ==> http://10.0.0.18:8080#重启Nginx测试访问效果:
#curl -L http://www.kgc.org/web#如果location定义其uri时使用了正则表达式模式(包括~,~*,但不包括^~),则proxy_pass之后必须不能使用uri; 即不能有/ ,用户请求时传递的uri将直接附加至后端服务器之后
server {...server_name HOSTNAME;location ~|~* /uri/ {proxy_pass http://host:port; #proxy_pass后面的url 不能加/}...}http://HOSTNAME/uri/ --> http://host/uri/proxy_hide_header field;
#用于nginx作为反向代理的时候,在返回给客户端http响应时,隐藏后端服务器相应头部的信息,可以设置
在http,server或location块
#示例: 隐藏后端服务器ETag首部字段location /web {index index.html;proxy_pass http://10.0.0.18:8080/; proxy_hide_header ETag;}proxy_pass_header field;
#默认nginx在响应报文中不传递后端服务器的首部字段Date, Server, X-Pad, X-Accel等参数,如果
要传递的话则要使用 proxy_pass_header field声明将后端服务器返回的值传递给客户端
#field 首部字段大小不敏感
#示例:透传后端服务器的Server和Date首部给客户端,同时不再响应报中显示前端服务器的Server字段
proxy_pass_header Server;
proxy_pass_header Date;proxy_pass_request_body on | off;
#是否向后端服务器发送HTTP实体部分,可以设置在http,server或location块,默认即为开启proxy_pass_request_headers on | off;
#是否将客户端的请求头部转发给后端服务器,可以设置在http,server或location块,默认即为开启
8.1.2 反向代理单台web服务器
要求:将用户对域 www.pc.com的请求转发给后端服务器处理
7-1
vim /apps/nginx/conf.d/pc.conf
location / {proxy_pass http://192.168.210.102;
}
#添加此项,使访问7-1可以跳转到7-2nginx -s reload
7-3
curl 192.168.210.101
端口号问题,端口号转的时候可以一起转
7-1
vim /apps/nginx/conf.d/pc.conf
location / {proxy_pass http://192.168.210.102:9527;
}
#添加端口号nginx -s reload
7-2
vim /apps/nginx/conf/nginx.conf
server {listen 80;listen 9527;#添加端口号9527
}nginx -s reload
ss -lntp | grep nginx
7-3
curl 192.168.210.101
8.1.2.1 端口号后加"/"
7-1
vim /apps/nginx/conf.d/pc.conf
location /web {proxy_pass http://192.168.210.102:9527;
}
#不加/,相当于把/web追加到9527的后面,访问的时候会报错,因为7-2下没有web文件夹nginx -s reload
7-2
cd /apps/nginx/html
mkdir web
#创建web文件夹
echo web > web/index.html
7-3
curl 192.168.210.101/web -L
8.1.2.2 端口号后不加"/"
7-1
vim /apps/nginx/conf.d/pc.conf
location /web {proxy_pass http://192.168.210.102:9527/;
}
#加/,代表将location后面的url置换到后面
nginx -s reload
7-3
curl 192.168.210.101/web -L
8.1.3指定location 实现反向代理,动静分离
7-3(192.168.210.103)客户端
7-1(192.168.210.101)反向代理
7-4(192.168.210.104)动态页面
7-2(192.168.210.102)静态页面
7-4
systemctl stop firewalld
setenforce 0
#关闭防火墙
yum install httpd -y
#安装apache
cd /var/www/html
echo httpd > index.html
#制作页面
ls
cat index.html
systemctl start httpd
#开启服务
7-1
vim /apps/nginx/conf.d/pc.conf
location /static {proxy_pass http://192.168.210.102:9527;
}
location /api {proxy_pass http://192.168.210.104;
}nginx -s reload
7-4
cd /var/www/html
mkdir api
#创建文件夹api
echo api >> api/index.html
echo api >> api/index.html
echo api >> api/index.html
#制作动态页面
cat api/index.html
7-2
cd /apps/nginx/html
mkdir static
#创建static文件夹
echo static >> static/index.html
echo static >> static/index.html
echo static >> static/index.html
#制作静态页面
cat static/index.html
7-3
curl 192.168.210.101/api -L
curl 192.168.210.101/static -L
#实现动静分离
8.1.4 反向代理实例:缓存功能
proxy_cache zone_name | off; 默认off
#指明调用的缓存,或关闭缓存机制;Context:http, server, location
#zone_name 表示缓存的名称.需要由proxy_cache_path事先定义proxy_cache_key string;
#缓存中用于“键”的内容,默认值:proxy_cache_key $scheme$proxy_host$request_uri;proxy_cache_valid [code ...] time;
#定义对特定响应码的响应内容的缓存时长,定义在http{...}中示例:proxy_cache_valid 200 302 10m;proxy_cache_valid 404 1m;proxy_cache_path;
#定义可用于proxy功能的缓存;Context:http
proxy_cache_path path [levels=levels] [use_temp_path=on|off]
keys_zone=zone_name:size [inactive=time] [max_size=size] [manager_files=number]
[manager_sleep=time] [manager_threshold=time] [loader_files=number]
[loader_sleep=time] [loader_threshold=time] [purger=on|off]
[purger_files=number] [purger_sleep=time] [purger_threshold=time];#示例:在http配置定义缓存信息proxy_cache_path /var/cache/nginx/proxy_cache #定义缓存保存路径,proxy_cache会自动创建levels=1:2:2 #定义缓存目录结构层次,1:2:2可以生成2^4x2^8x2^8=2^20=1048576个目录keys_zone=proxycache:20m #指内存中缓存的大小,主要用于存放key和metadata(如:使用次数),一般1M可存放8000个左右的keyinactive=120s #缓存有效时间 max_size=10g; #最大磁盘占用空间,磁盘存入文件内容的缓存空间最大值#调用缓存功能,需要定义在相应的配置段,如server{...};或者location等
proxy_cache proxycache;
proxy_cache_key $request_uri; #对指定的数据进行MD5的运算做为缓存的key
proxy_cache_valid 200 302 301 10m; #指定的状态码返回的数据缓存多长时间
proxy_cache_valid any 1m; #除指定的状态码返回的数据以外的缓存多长时间,必须设置,否则不会缓存proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 |
http_502 | http_503 | http_504 | http_403 | http_404 | off ; #默认是off
#在被代理的后端服务器出现哪种情况下,可直接使用过期的缓存响应客户端
#示例
proxy_cache_use_stale error http_502 http_503;proxy_cache_methods GET | HEAD | POST ...;
#对哪些客户端请求方法对应的响应进行缓存,GET和HEAD方法总是被缓存
8.1.4.1 举例
7-1
vim /apps/nginx/conf/nginx.confproxy_cache_path /data/nginx/proyxcache levels=1:1:1 keys_zone=proxycache:20m inactive=120s max_size=1g;
#加在include前mkdir /data/nginx
#创建nginx文件夹
vim /apps/nginx/conf.d/pc.confserver{listen 80;proxy_cache proxycache;proxy_cache_key $request_uri;proxy_cache_valid 200 302 301 10m;proxy_cache_valid any 5m;} nginx -tnginx -s reload
ls /data/nginx#看是否生成proyxcache文件
在浏览器访问192.168.210.101
关闭web服务器7-2,再次在浏览器访问192.168.210.101
还能出来界面,说明有缓存
8.1.5 实现反向代理客户端 IP 透传
8.1.5.1 一级代理
7-1(192.168.210.101)代理服务器
7-2(192.168.210.102)web服务器
7-3(192.168.210.103)客户端
7-2
yum install httpd -y
#安装apache
cd /var/www/html
echo real server > index.html
#制作页面
cat index.html
systemctl start httpd
ss -lntp |grep 80
#开启服务
7-1
vim /apps/nginx/conf.d/pc.conf
#删掉这个location模块
location /api {proxy_pass http://192.168.210.104;
}
nginx -t
nginx -s reload
7-3
curl 192.168.210.101
7-2
tail -f /var/log/httpd/access_log
#只能看到192.168.210.101的日志,看不到192.168.210.103的
7-1
tail -f /apps/nginx/logs/access.log
#192.168.210.101可以看到192.168.210.103的日志
7-1
vim /apps/nginx/conf.d/pc.confproxy_set_header test "$remote_addr"; #往日志里面加了test,内容是$remote_addr#$remote_addr只能记一次,如果中间是三层代理,它就无法去实现了
nginx -t
nginx -s reload
7-2
vim /etc/httpd/conf/httpd.conf
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{test}i\"" combinedsystemctl restart httpd
7-3
curl 192.168.210.1017-2
tail -f /var/log/httpd/access_log
#192.168.210.103的地址就过来了
8.1.5.2 多级代理ip地址透传
7-1
vim /apps/nginx/conf/nginx.conf
#把日志全都打开
7-4
yum install -y epel-release
yum install nginx -y
7-1
scp /apps/nginx/conf.d/pc.conf 192.168.210.104:/etc/nginx
7-4
cd /etc/nginx
vim pc.conf
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#添加
nginx -t
systemctl start nginx
7-1
vim /apps/nginx/conf.d/pc.conf
systemctl restart nginx
7-2
vim /etc/httpd/conf/httpd.conf
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{X-Forwarded-For}i\"" combinedsystemctl restart httpd
7-3
curl 192.168.210.1017-1
tail -f /apps/nginx/logs/access.log
7-2
tail -f /var/log/httpd/access_log
相关文章:
nginx反向代理
nginx反向代理8.反向代理8.1 实现http反向代理8.1.1 反向代理配置参数8.1.2 反向代理单台web服务器8.1.2.1 端口号后加"/"8.1.2.2 端口号后不加"/" 8.1.3指定location 实现反向代理,动静分离8.1.4 反向代理实例:缓存功能8.1.4.1 举例 8.1.5 实现…...
基于eBPF的安卓逆向辅助工具——stackplz
前言 stackplz是一款基于eBPF技术实现的追踪工具,目的是辅助安卓native逆向,仅支持64位进程,主要功能如下: hardware breakpoint 基于pref_event实现的硬件断点功能,在断点处可读取寄存器信息,不会被用户…...
十大排序——4.堆排序
前面我们讲了堆,现在我们来看一下队排序。 堆排序的步骤: 首先将一个无序数组建立成一个大顶堆然后,将堆顶的元素和堆低的元素进行交换(即将最大的元素交换的到堆底),缩小并下潜调整堆重复上一步…...
独辟蹊径”之动态切换进程代理IP
前言 项目中遇到这样一个需求,需要动态切换指定进程Sockets5代理IP,目前了解到可通过编写驱动拦截或者劫持LSP实现,LSP劫持不太稳定,驱动无疑是相对较好的解决方案,奈何水平不足便有了这"蹊径"。 初步尝试…...
redis漏洞修复:(CNVD-2019-21763)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、漏洞内容二、镜像准备1.确认镜像版本2.下载镜像 三、配置文件准备1.获取配置文件2.修改配置文件 四、启动redis容器五、修改iptables文件总结 前言 漏扫发…...
手刻 Deep Learning -第壹章-PyTorch入门教学-基础概念与再探线性回归
一、前言 本章会需要 微分、线性回归与矩阵的基本观念 这次我们要来做 PyTorch 的简单教学,我们先从简单的计算与自动导数( auto grad / 微分 )开始,使用优化器与误差计算,然后使用 PyTorch 做线性回归,还有…...
深入学习 Redis - 如何使用 Redis 作缓存?缓存更新策略?使用需要注意哪些问题(工作/重点)
目录 一、Redis 作为缓存 1.1、缓存的基本概念 1.1.1、理解 1.1.2、缓存存什么样的数据?二八定律 1.2、如何使用 redis 作为缓存 1.3、缓存更新策略(redis 内存淘汰机制 / 重点) 1.3.1、定期生成 1.3.2、实时生成 内存淘汰策略&#…...
好用的软件测试框架有哪些?测试框架的作用是什么?
软件测试框架是现代软件开发过程中至关重要的工具,它可以帮助开发团队更加高效地进行测试和验证工作,从而大大提高软件质量和用户体验。 一、好用的软件测试框架 1. Selenium:作为一种开源的自动化测试框架,Selenium具有功能强大…...
PAT 1035 插入与归并
PAT 1035 插入与归并 题目描述思路讲解代码展示 题目描述 思路讲解 分析:先将i指向中间序列中满足从左到右是从小到大顺序的最后一个下标,再将j指向从i1开始,第一个不满足a[j] b[j]的下标,如果j顺利到达了下标n,说明…...
K-means 聚类算法学习笔记
K-means 聚类算法 是一种无监督学习算法,用来将 n n n 个样本点分成 k k k 类,使得整个数据集的误差平方和 S S E SSE SSE 最小。在本例中,样本点是指平面直角坐标系上的点,聚类中心也是平面直角坐标系上的点,而每个…...
API文档搜索引擎
导航小助手 一、认识搜索引擎 二、项目目标 三、模块划分 四、创建项目 五、关于分词 六、实现索引模块 6.1 实现 Parser类 6.2 实现 Index类 6.2.1 创建 Index类 6.2.2 创建DocInfo类 6.2.3 创建 Weight类 6.2.4 实现 getDocInfo 和 getInverted方法 6.2.5 实现 …...
文案内容千篇一律,软文推广如何加深用户印象
随着互联网技术的发展,企业营销的方式逐渐转向软文推广,但是现在软文推广的内容同质化越来越严重,企业应该如何让自己的软文推广保持差异性,在用户心中留下独特的印象呢?下面就让媒介盒子告诉你。 一、 找出产品独特卖…...
十二、流程控制-循环
流程控制-循环 1.while循环语句★2.do...while语句★3.for循环语句 —————————————————————————————————————————————————— 1.while循环语句★ while语句也称条件判断语句,它的循环方式是利用一个条件来控制是否…...
五、回溯(trackback)
文章目录 一、算法定义二、经典例题(一)排列1.[46.全排列](https://leetcode.cn/problems/permutations/description/)(1)思路(2)代码(3)复杂度分析 2.[LCR 083. 全排列](https://le…...
什么是分布式锁?他解决了什么样的问题?
相信对于朋友们来说,锁这个东西已经非常熟悉了,在说分布式锁之前,我们来聊聊单体应用时候的本地锁,这个锁很多小伙伴都会用 ✔本地锁 我们在开发单体应用的时候,为了保证多个线程并发访问公共资源的时候,…...
Ubuntu 12.04增加右键命令:在终端中打开增加打开文件
Ubuntu 12.04增加右键命令:在终端中打开 软件中心:搜索nautilus-open-terminal安装 用快捷键CtrlT打开命令行输入: sudo apt-get install nautilus-open-terminal 重新加载文件管理器 nautilus -q 或注销再登录即要使用...
Centos 7 访问局域网windows共享文件夹
Refer: centos7 访问windows系统的共享文件夹_centos访问windows共享_三希的博客-CSDN博客 一、在CentOS中配置CIFS网络存储服务 CIFS(Common Internet File System)是一种在网络上共享文件的协议,也称为SMB(Server Message Blo…...
GDB的TUI模式(文本界面)
2023年9月22日,周五晚上 今晚在看GDB的官方文档时,发现GDB居然有文本界面模式 TUI (Debugging with GDB) (sourceware.org) GDB开启TUI的条件 GDB的文本界面的开启条件是:操作系统有适当版本的curses库 The TUI mode is supported only on…...
深入了解Python和OpenCV:图像的卡通风格化
前言 当今数字时代,图像处理和美化已经变得非常普遍。从社交媒体到个人博客,人们都渴望分享独特且引人注目的图片。本文将介绍如何使用Python编程语言和OpenCV库创建令人印象深刻的卡通风格图像。卡通风格的图像具有艺术性和创意,它们可以用…...
【算法挨揍日记】day06——1004. 最大连续1的个数 III、1658. 将 x 减到 0 的最小操作数
1004. 最大连续1的个数 III 1004. 最大连续1的个数 III 题目描述: 给定一个二进制数组 nums 和一个整数 k,如果可以翻转最多 k 个 0 ,则返回 数组中连续 1 的最大个数 。 解题思路: 首先题目要我们求出的最多翻转k个0后&#x…...
华为云HECS安装docker
1、运行安装指令 yum install docker都选择y,直到安装成功 2、查看是否安装成功 运行版本查看指令,显示docker版本,证明安装成功 docker --version 或者 docker -v 3、启用并运行docker 3.1启用docker 指令 systemctl enable docker …...
力扣669 补9.16
最近大三上四天有早八,真的是受不了了啊,欧嗨呦,早上困如狗,然后,下午困如狗,然后晚上困如狗,尤其我最近在晚上7点到10点这个时间段看力扣,看得我昏昏欲睡,不自觉就睡了1…...
2023-9-22 没有上司的舞会
题目链接:没有上司的舞会 #include <cstring> #include <iostream> #include <algorithm>using namespace std;const int N 6010;int n; int happy[N]; int h[N], e[N], ne[N], idx; bool has_father[N];// 两个状态,选该节点或不选该…...
【HDFS】cachingStrategy的设置
org.apache.hadoop.hdfs.client.impl.BlockReaderFactory#getRemoteBlockReader: private BlockReader getRemoteBlockReader(Peer peer) throws IOException {int networkDistance = clientContext.getNetworkDistance(datanode);return BlockReaderRemote...
性能测试 —— 性能测试常见的测试指标 !
一、什么是性能测试 先看下百度百科对它的定义,性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。 我们可以认为性能测试是:通过在测试环境下对系统或构件的性能进行探测,用以验证在生产环…...
【学习草稿】背包问题
一、01背包问题 图解详细解析 (转载) https://blog.csdn.net/qq_37767455/article/details/99086678 :Vi表示第 i 个物品的价值,Wi表示第 i 个物品的体积,定义V(i,j):当前背包容量 j,前 i 个物…...
doxygen c++ 语法
c基本语法模板 以 /*! 开头, */ 结尾 /*!\关键字1\关键字2 */1 文件头部信息 /*! \file ClassA.h* \brief 文件说明 定义了类fatherA* \details This class is used to demonstrate a number of section commands.* \author John Doe* \author Jan Doe* \v…...
ChatGLM微调基于P-Tuning/LoRA/Full parameter(上)
1. 准备环境 首先必须有7个G的显存以上,torch >= 1.10 需要根据你的cuda版本 1.1 模型下载 $ git lfs install $ git clone https://huggingface.co/THUDM/chatglm-6b1.2 docker环境搭建 环境搭建 $ sudo docker pull slpcat/chatglm-6b:latest $ sudo docker run -it …...
BLE Mesh蓝牙mesh传输大数据包传输文件照片等大数据量通讯
1、BLE Mesh数据传输现状 BLE Mesh网络技术是低功耗蓝牙的一个进阶版,Mesh扩大了蓝牙在应用中的规模和范围,因为它同时支持超过三万个网络节点,可以跨越大型建筑物,不仅可以使得医疗健康应用更加方便快捷,还能监测像学…...
9.18 QT作业
mainwindow.h QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACEclass MainWindow : public QMainWindow {Q_OBJECTpublic:MainWindow(QWidget *parent nullptr);~MainWindow();signals:void jump(); //自定义跳转信号函数private slots:vo…...
济南手机网站设计/李勇seo的博客
【题目】下图是"班级"表中的内容,记录了每个学生所在班级,和对应的成绩。现在需要按成绩来排名,如果两个分数相同,那么排名要是并列的。正常排名是1,2,3,4,但是现在前3名是…...
it培训机构怎么样/东莞seo推广机构帖子
MTK_4G平台MT6169射频开关RF_Switch对照表...
wordpress媒体库插件/网站外链分析工具
本科生毕业论文 基于Python校园网站系统(Django框架) 开题报告 学 院: 专 业: 计算机科学与技术 年 级: 学生姓名: …...
网站建设合同 包括什么/seo优化对网店的推广的作用为
2019年春季学期第八周作业 12课程名称c语言程序设计2作业要求https://edu.cnblogs.com/campus/zswxy/software-engineering-class2-2018/homework/3074我的课程目标能够使用字符串函数与指针进行灵活的结合这个作业在哪个方面帮助我实现目标指针与数组及自定义函数结合实现成绩…...
wordpress去除无用标签/百度怎么搜索关键词
在使用FTP向服务器传送问文件的时候,要注意选择传输模式,如果服务器用的是linux,那么一定要选二进制模式,否则传送文件的时候会出错转载于:https://blog.51cto.com/wll2015/1655774...
泉州网站设计平台/怎样做推广营销
平衡二叉树题目描述思路实现题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 思路 平衡二叉树AVL定义:是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树 所以定义个辅助函数用来求树的…...