nginx正向代理从安装到使用一网打尽系列(二)使用
一、背景
使用场景大总结,可作为参考手册用
nginx正向代理从安装到使用一网打尽系列(一)安装
nginx正向代理从安装到使用一网打尽系列(二)使用
二、使用场景
1、所有内网应用都不能直接访问外网,但需要能通过(内部的)外网代理服务器访问
2、自己不能上网,蹭别人的网,局域网代理软件Ccproxy也是一种正向代理
3、大家访问外国网站使用的梯子(翻墙)也是一种正向代理
三、环境
- Nginx 2.27.13 官方下载地址:Nginx 1.27.3
- ngx_http_proxy_connect_module 1.27.1 官方下载地址:ngx_http_proxy_connect_module
四、接口(级)使用代理
1、http接口使用代理
-》openfeign
说明:
应用级, 同时也可以通过proxySelector作为接口级来用
第一步:配置文件允许覆盖Bean
spring:main:
allow-bean-definition-overriding: true
第二步:配置Bean
package person.brickman.config;import okhttp3.*;
import org.springframework.cloud.commons.httpclient.DefaultOkHttpClientFactory;
import org.springframework.cloud.commons.httpclient.OkHttpClientFactory;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Proxy;@Configuration
//配置openfein接口的文件件路径
@EnableFeignClients(basePackages = "com.ciih.refine.server")
public class Config {@Beanpublic OkHttpClientFactory okHttpClientFactory(OkHttpClient.Builder builder) {return new ProxyOkHttpClientFactory(builder);}static class ProxyOkHttpClientFactory extends DefaultOkHttpClientFactory {public ProxyOkHttpClientFactory(OkHttpClient.Builder builder) {super(builder);//配置IP、端口Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("10.40.3.XXX ", 9999));builder.proxy(proxy);builder.proxyAuthenticator(new Authenticator() {@Overridepublic Request authenticate(Route route, Response response) throws IOException {//设置代理服务器账号密码String credential = Credentials.basic("admin", "admin");return response.request().newBuilder().header("Proxy-Authorization", credential).build();}});//如果要配置限制域则加上下面/*List<Proxy> proxyList = new ArrayList<>(1);proxyList.add(proxy);builder.proxySelector(new ProxySelector() {//限制域Set<String> domainList;@Overridepublic List<Proxy> select(URI uri) {if (uri == null || !domainList.contains(uri.getHost())) {return Collections.singletonList(Proxy.NO_PROXY);}return proxyList;}@Overridepublic void connectFailed(URI uri, SocketAddress sa, IOException ioe) {}});*/}}
}
-》OkHttpClient
OkHttpClient.Builder builder = client.newBuilder();
builder.proxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(hostName, Integer.parseInt(hostPort))));
...
Response response = builder.cookieJar(new LocalCookieJar()).build().newCall(request).execute()
-》HttpClient
URL url = RequestUtils.getUrlOrNull(hostUrl);HttpHost target = new HttpHost(url.getHost(),getPort(url),url.getProtocol());HttpGet request = new HttpGet("/user?name=xxx");
// HttpGet httpGet = new HttpGet(hostUrl); // 非代理
...
httpClient.execute(target, request) // 代理
// httpClient.execute(httpGet); // 非代理
-》HttpURLConnection
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("10.40.3.XXX", 9999));
URL url = new URL("http://www.yahoo.com");
HttpURLConnection uc = (HttpURLConnection)url.openConnection(proxy);
uc.connect();
DefaultHttpClient
DefaultHttpClient httpclient = new DefaultHttpClient();]
HttpHost proxy = new HttpHost("10.40.3.XXX", 9999);
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
PostMethod postMethod = new PostMethod(url);
int statusCode = httpClient.executeMethod(postMethod);
-》Fluent
import org.apache.hc.client5.http.fluent.Request;public class TestRequest {public static void main(final String... args) throws Exception {String url = "http://httpbin.org/anything";String proxy = "http://10.40.3.XXX:9999"; // Free proxyString response = Request.get(url).viaProxy(proxy) // will set the passed proxy.execute().returnContent().asString();System.out.println(response);}
}
-》Jsonp
String url="http://www.baidu.com";
String proxyHost="10.40.3.XXX";
int port=9999;
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHost, port));
Connection.Response response = Jsoup.connect(url).proxy(proxy).execute();
2、webservice接口使用代理
-》cxf客户端
JaxWsProxyFactoryBean factoryBean = new JaxWsProxyFactoryBean(); factoryBean.setServiceClass(TeacherWebService.class); factoryBean.setAddress("http://xxx.xxx.xxx.xxx/webservice?wsdl"); TeacherWebService tService = (TeacherWebService )factoryBean.create(); Client client = ClientProxy.getClient(tService);HTTPConduit http = (HTTPConduit) client.getConduit();HTTPClientPolicy hcp = new HTTPClientPolicy();hcp.setProxyServer("10.40.3.XXX");hcp.setProxyServerPort(9999);http.setClient(hcp);
-》JAX-WS
//Set the https.proxyHost as a property on the RequestContext.
BindingProvider bp = (Binding Provider)port;
bp.getRequestContext().put("https.proxyHost", "proxyHost1.ibm.com");
bp.getRequestContext().put("https.proxyPort", "80");
-》JAX-WS(带URL匹配)
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.*;
import java.util.*;public class MyProxySelector extends ProxySelector {private final ProxySelector def;//保存原来的,如果不是目标uri的需要按原来的走MyProxySelector(){this.def = ProxySelector.getDefault();}@Overridepublic List<Proxy> select(URI uri) {if(uri.getHost().contains("aaaaa")){//如果符合需要代理的地址则新建代理类System.out.println("select for " + uri.toString());Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("localhost", 9999));ArrayList<Proxy> list = new ArrayList<Proxy>();list.add(proxy);return list; }return def.select(uri);//否则还是按原来的走}@Overridepublic void connectFailed(URI uri, SocketAddress sa, IOException ioe) {System.err.println("Connection to " + uri + " failed.");}
}public class Client {public static void main(String[] args) {ProxySelector.setDefault(new MyProxySelector());//在发起webservice之前调用一次即可,创建之后所有网络请求都会进入select方法,相当于是全局影响的。HelloImplService service = new HelloImplService();HelloImpl hello = service.getHelloImplPort();System.out.println(hello.sayHello("Howard Wollowitz"));}}
**特别注意**
如果只要在接口级或应用级使用,千万不要在Java程序用使用如下的代码:
System.setProperty("http.proxyHost", "代理服务器地址");System.setProperty("http.proxyPort", "代理服务器端口");
system.setproperty函数设置的属性具有全局作用域,任何其他的Java程序和系统程序都可以读取这个属性的值。
五、应用(级)使用代理
1、Tomcat等web容器应用使用代理
-》方式一:在conf/server.xm中的Connector配置中添加代理配置
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
proxyName="10.40.3.XXX"
proxyPort="9999" />
-》方式二:在bin/setenv.sh中添加代理参数
# windows
SET JAVA_OPTS=%JAVA_OPTS% -Dhttp.proxyHost=10.40.3.XXX -Dhttp.proxyPort=9999
# linux
SET JAVA_OPTS=$JAVA_OPTS -Dhttp.proxyHost=10.40.3.XXX -Dhttp.proxyPort=9999
2、Springboot等jar应用使用代理
-》启动参数示例
java -Dhttp.proxyHost=10.40.3.XXX -Dhttp.proxyPort=9999
-Dhttps.proxyHost=10.40.3.XXX -Dhttps.proxyPort=9999
-Dhttp.nonProxyHosts="localhost|host.example.com"
-jar test.jar
-》参数说明
1.http.proxyHost : 代理服务器主机名
2.http.proxyPort : 端口号,默认是80
3.https.proxyHost : https代理服务器主机名
4.https.proxyPort: 代理端口号,默认是443
5.http.nonProxyHosts : 指定绕过代理的主机列表,使用 | 分割的模式列表,可以以通配符 * 开头或者结尾,任何匹配这些模式之一的主机都将通过直接连接而不是通过代理访问。该设置对http,https通用
六、整台机器使用代理
1、Linux使用代理
-》命令行方式
# vim /etc/profile # 添加下面两个环境变量
export http_proxy=http://10.40.3.XXX:9999
export https_proxy=http://10.40.3.XXX:9999
# source /etc/profile # 不重起生效
-》图形化方式


-》Firefox浏览器使用代理



注意:
这里只对浏览器生效.
2、Windows使用代理
-》命令行方式
打开 cmd 命令行终端。
设置无密码的HTTP 代理服务器地址和端口号:
#设置 HTTP代理服务器地址和端口号:
set http_proxy=http://10.40.3.XXX:9999#设置 HTTPS 代理服务器地址和端口号:
set https_proxy=http://10.40.3.XXX:9999
设置带用户名和密码的 HTTP 代理服务器地址和端口号:
# 设置带用户名和密码的 HTTP 代理服务器地址和端口号:
set http_proxy=http://<username>:<password>@<proxy-server>:<port>#设置 HTTPS 代理服务器地址和端口号:
set https_proxy=http://<username>:<password>@<proxy-server>:<port>#其中 <username>和 <password> 分别替换成你的代理服务器的用户名和密码,<proxy-server>` 和 <port>则分别替换成代理服务器的地址和端口号。
-》图形方式


-》Edge浏览器使用代理

会调用上面图形化方式中的代理设置窗口(对整台机器生效)
3、MacOS使用代理
-》命令行方式
mac打开命令行
执行 open -e ~/.zshrc 打开.zshrc文件, 在下面插入:
function proxyOff(){unset http_proxyunset https_proxyecho -e "已关闭代理"}function proxyOn() {export http_proxy="http://10.40.3.XXX:9999"export https_proxy=$http_proxyecho -e "已开启代理"
}proxyOn #开启代理
# proxyOff #关闭代理
执行
source ~/.zshrc
说明:
这里写成函数的形式可以让使用更灵活. 比如在脚本中动态开关.
-》图形化方式


-》Safari浏览器使用代理

会调用上面图形化方式中的代理设置窗口(对整台机器生效)
七、总结
正向代理使用特别是在开发人员本地联调时一定要注意区分作用域,避免不必要的麻烦
八、【赠送】附件一: ssh端口转发
内网机器开发调试用, 程序访问的地址为localhost
# 此处以访问谷歌为例,执行如下命令后访问localhost:10000就是访问谷歌
ssh -L localhost:10000:www.google.com:80 root@10.40.3.XXX:9999 -NT
测试本机:
ssh -L localhost:81:www.baidu.com:80 daizhongde@192.168.31.99 -NT
示例:
# 表示从任意主机发往本机(A)的端口5900的流量,都通过主机 10.3.171.219(B),发往主机 10.3.131.240(C) 的端口 8606(Z)
ssh -L 5900:10.3.131.240:8086 root@10.3.171.219
端口转发补脑:
https://zhuanlan.zhihu.com/p/615584874?utm_id=0
相关文章:
nginx正向代理从安装到使用一网打尽系列(二)使用
一、背景 使用场景大总结,可作为参考手册用 nginx正向代理从安装到使用一网打尽系列(一)安装 nginx正向代理从安装到使用一网打尽系列(二)使用 二、使用场景 1、所有内网应用都不能直接访问外网,但需要…...
Bash Shell的操作环境
目录 1、路径与指令搜寻顺序 2、bash的进站(开机)与欢迎信息:/etc/issue,/etc/motd (1)/etc/issue (2)/etc/motd 3、bash的环境配置文件 (1)login与non-…...
Python爬虫基础——认识网页结构(各种标签的使用)
1、添加<div>标签的代码定义了两个区块的宽度和高度均为100px,边框的格式也相同,只是区块中显示的内容不同; 2、添加<ul>和<ol>标签分别用于定义无序列表和有序列表。<il>标签位于<ul>标签或<ol>标签之…...
如何实现一个充满科技感的官网(二)
背景 在上一篇文章 《如何实现一个充满科技感的官网(一)》 中,我们初步了解了该官网的整体设计,并与大家探讨了它的视觉呈现和用户体验。 我们前期的内部设计偏向简洁,所以开始思考如何提升网站的整体设计感。这些尝…...
GNU链接器简介
GNU链接器简介 1 使用简单程序简介链接脚本1.1 测试程序1.2 编译测试程序1.2.1 不使用链接器编译1.2.1.1 不使用链接器编译1.2.1.2 读取objdump_test 的结构 1.2.2 使用链接器去链接1.2.2.1 链接脚本1.2.2.2 使用链接脚本编译1.2.2.3 读取objdump 的结构 2 链接脚本2.1 基本连接…...
欧几里得算法(简单理解版,非严格证明)
欧几里得算法用于求解两个整数的最大公约数,又称为辗转相除 依据的基本定理: GCD(a,b)GCD(a%b,b) 证明: 对于搞理论的人可能需要会严格证明,但是对于我们一般人而言,只要能理解其原理并记住即可,后者实际上…...
Mac软件介绍之录屏软件Filmage Screen
软件介绍 Filmage Screen 是一款专业的视频录制和编辑软件,适用于 Mac 系统 可以选择4k 60fps,可以选择录制电脑屏幕,摄像头录制,可以选择区域录制。同时也支持,简单的视频剪辑。 可以同时录制电脑麦克风声音 标准…...
Ubuntu cuda-cudnn中断安装如何卸载
文章目录 问题描述解决方法使用强制移除 问题描述 Ubuntu22.04系统,在终端中执行apt insatll安装或dpkg .deb安装时如果强制关闭终端会导致安装失败(安装包会变成iu状态或ru状态,安装成功的应该是ii状态) 此时,无论是…...
CSS——7.CSS注释
<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>css注释</title><link rel"stylesheet" type"text/css" href"a.css"/></head><body><!--头部开始(h…...
鸿蒙APP之从开发到发布的一点心得
引言: 做鸿蒙开发大概有1年左右时间了,从最开始的看官方文档、看B站视频,到后来成功发布两款个人APP(房贷计算极简版、时简时钟 轻喷,谢谢)。简单描述一下里边遇到的坑以及一些经历吧。 学习鸿蒙开发 个…...
某小程序sign签名参数逆向分析
文章目录 1. 写在前面2. 接口分析3. 分析还原 【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python…...
智能风控/数据分析 聚合 分组 连接
data。head()查看前几行 data.head() 是一个在Python的Pandas库中常用的方法,用于查看DataFrame对象的前几行数据。默认情况下,head() 方法会返回DataFrame的前5行数据,但是你也可以通过传递一个整数参数来指定返回的…...
Unity3D PBR光照计算公式推导详解
前言 在Unity3D中,PBR(Physically Based Rendering,基于物理的渲染)光照模型是一种高级光照模型,它模拟了真实世界中光的传播和反射过程,从而提供了更加逼真的渲染效果。PBR光照模型的计算公式涉及多个物理…...
行为树详解(6)——黑板模式
【动作节点数据共享】 行为树中需要的参数可以来自游戏中的各个模块,如果仅需从多个模块获取少量参数,那么可以直接在代码中调用其他模块的单例继而层层调用获取数据。 如果获取的参数量很大,从架构上看,我们需要通过加一个中间…...
Vue.js与其他框架有哪些兼容性?
Vue.js的兼容性主要体现在几个方面,包括浏览器支持、运行环境适应性、与其他库和框架的集成能力等。以下是更详细的解释: 浏览器兼容性 现代浏览器:Vue.js广泛支持所有主流的现代浏览器,如Google Chrome, Firefox, Safari, Edge…...
Java 8 Stream 介绍
Java 8 Stream 介绍 1. 什么是Stream? Stream(流)是Java 8引入的全新概念,它是一个支持串行和并行聚合操作的元素序列。Stream API提供了一种声明式的方式来处理数据集合,可以让我们以一种类似SQL查询的方式处理数据…...
Java NIO、AIO分析
好的,下面将对Java中的**NIO(Non-blocking IO)和AIO(Asynchronous IO)**进行更深入的分析,重点探讨它们的特点和具体的应用场景。 一、Java NIO(Non-blocking IO)深入分析 1. 主要…...
pip下载包出现SSLError
报错: ERROR: Could not install packages due to an OSError: HTTPSConnectionPool(host‘files.pythonhosted.org’, port443): Max retries exceeded with url: /packages/8a/c2/ae7227e4b089c6a8210920db9d5ac59186b0a84eb1e6d96b9218916cdaf1/taming_transform…...
零成本的互联网创业创意有哪些?
在互联网时代,创业的门槛大大降低,即使没有大量的资金投入,也有许多机会可以实现创业梦想。以下将为您介绍一些零成本的互联网创业创意,帮助您在互联网的海洋中找到属于自己的宝藏。 一、内容创作与自媒体 (一&#…...
linux ubantu重启桌面
在 Ubuntu 系统中,重启桌面环境通常有几种方法,具体取决于你所使用的桌面环境(如 GNOME、KDE 等)。下面是几种常用的重启桌面的方法: 重启 GNOME 桌面环境 如果你使用的是 GNOME 桌面环境(Ubuntu 默认桌面…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
go 里面的指针
指针 在 Go 中,指针(pointer)是一个变量的内存地址,就像 C 语言那样: a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10,通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...
