当前位置: 首页 > news >正文

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、Springbootjar应用使用代理

-》启动参数示例

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正向代理从安装到使用一网打尽系列(二)使用

一、背景 使用场景大总结&#xff0c;可作为参考手册用 nginx正向代理从安装到使用一网打尽系列&#xff08;一&#xff09;安装 nginx正向代理从安装到使用一网打尽系列&#xff08;二&#xff09;使用 二、使用场景 1、所有内网应用都不能直接访问外网&#xff0c;但需要…...

Bash Shell的操作环境

目录 1、路径与指令搜寻顺序 2、bash的进站&#xff08;开机&#xff09;与欢迎信息&#xff1a;/etc/issue&#xff0c;/etc/motd &#xff08;1&#xff09;/etc/issue &#xff08;2&#xff09;/etc/motd 3、bash的环境配置文件 &#xff08;1&#xff09;login与non-…...

Python爬虫基础——认识网页结构(各种标签的使用)

1、添加<div>标签的代码定义了两个区块的宽度和高度均为100px&#xff0c;边框的格式也相同&#xff0c;只是区块中显示的内容不同&#xff1b; 2、添加<ul>和<ol>标签分别用于定义无序列表和有序列表。<il>标签位于<ul>标签或<ol>标签之…...

如何实现一个充满科技感的官网(二)

背景 在上一篇文章 《如何实现一个充满科技感的官网&#xff08;一&#xff09;》 中&#xff0c;我们初步了解了该官网的整体设计&#xff0c;并与大家探讨了它的视觉呈现和用户体验。 我们前期的内部设计偏向简洁&#xff0c;所以开始思考如何提升网站的整体设计感。这些尝…...

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 基本连接…...

欧几里得算法(简单理解版,非严格证明)

欧几里得算法用于求解两个整数的最大公约数&#xff0c;又称为辗转相除 依据的基本定理&#xff1a; GCD(a,b)GCD(a%b,b) 证明&#xff1a; 对于搞理论的人可能需要会严格证明&#xff0c;但是对于我们一般人而言&#xff0c;只要能理解其原理并记住即可&#xff0c;后者实际上…...

Mac软件介绍之录屏软件Filmage Screen

软件介绍 Filmage Screen 是一款专业的视频录制和编辑软件&#xff0c;适用于 Mac 系统 可以选择4k 60fps&#xff0c;可以选择录制电脑屏幕&#xff0c;摄像头录制&#xff0c;可以选择区域录制。同时也支持&#xff0c;简单的视频剪辑。 可以同时录制电脑麦克风声音 标准…...

Ubuntu cuda-cudnn中断安装如何卸载

文章目录 问题描述解决方法使用强制移除 问题描述 Ubuntu22.04系统&#xff0c;在终端中执行apt insatll安装或dpkg .deb安装时如果强制关闭终端会导致安装失败&#xff08;安装包会变成iu状态或ru状态&#xff0c;安装成功的应该是ii状态&#xff09; 此时&#xff0c;无论是…...

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><!--头部开始&#xff08;h…...

鸿蒙APP之从开发到发布的一点心得

引言&#xff1a; 做鸿蒙开发大概有1年左右时间了&#xff0c;从最开始的看官方文档、看B站视频&#xff0c;到后来成功发布两款个人APP&#xff08;房贷计算极简版、时简时钟 轻喷&#xff0c;谢谢&#xff09;。简单描述一下里边遇到的坑以及一些经历吧。 学习鸿蒙开发 个…...

某小程序sign签名参数逆向分析

文章目录 1. 写在前面2. 接口分析3. 分析还原 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python…...

智能风控/数据分析 聚合 分组 连接

data。head&#xff08;&#xff09;查看前几行 data.head() 是一个在Python的Pandas库中常用的方法&#xff0c;用于查看DataFrame对象的前几行数据。默认情况下&#xff0c;head() 方法会返回DataFrame的前5行数据&#xff0c;但是你也可以通过传递一个整数参数来指定返回的…...

Unity3D PBR光照计算公式推导详解

前言 在Unity3D中&#xff0c;PBR&#xff08;Physically Based Rendering&#xff0c;基于物理的渲染&#xff09;光照模型是一种高级光照模型&#xff0c;它模拟了真实世界中光的传播和反射过程&#xff0c;从而提供了更加逼真的渲染效果。PBR光照模型的计算公式涉及多个物理…...

行为树详解(6)——黑板模式

【动作节点数据共享】 行为树中需要的参数可以来自游戏中的各个模块&#xff0c;如果仅需从多个模块获取少量参数&#xff0c;那么可以直接在代码中调用其他模块的单例继而层层调用获取数据。 如果获取的参数量很大&#xff0c;从架构上看&#xff0c;我们需要通过加一个中间…...

Vue.js与其他框架有哪些兼容性?

Vue.js的兼容性主要体现在几个方面&#xff0c;包括浏览器支持、运行环境适应性、与其他库和框架的集成能力等。以下是更详细的解释&#xff1a; 浏览器兼容性 现代浏览器&#xff1a;Vue.js广泛支持所有主流的现代浏览器&#xff0c;如Google Chrome, Firefox, Safari, Edge…...

Java 8 Stream 介绍

Java 8 Stream 介绍 1. 什么是Stream&#xff1f; Stream&#xff08;流&#xff09;是Java 8引入的全新概念&#xff0c;它是一个支持串行和并行聚合操作的元素序列。Stream API提供了一种声明式的方式来处理数据集合&#xff0c;可以让我们以一种类似SQL查询的方式处理数据…...

Java NIO、AIO分析

好的&#xff0c;下面将对Java中的**NIO&#xff08;Non-blocking IO&#xff09;和AIO&#xff08;Asynchronous IO&#xff09;**进行更深入的分析&#xff0c;重点探讨它们的特点和具体的应用场景。 一、Java NIO&#xff08;Non-blocking IO&#xff09;深入分析 1. 主要…...

pip下载包出现SSLError

报错&#xff1a; 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…...

零成本的互联网创业创意有哪些?

在互联网时代&#xff0c;创业的门槛大大降低&#xff0c;即使没有大量的资金投入&#xff0c;也有许多机会可以实现创业梦想。以下将为您介绍一些零成本的互联网创业创意&#xff0c;帮助您在互联网的海洋中找到属于自己的宝藏。 一、内容创作与自媒体 &#xff08;一&#…...

linux ubantu重启桌面

在 Ubuntu 系统中&#xff0c;重启桌面环境通常有几种方法&#xff0c;具体取决于你所使用的桌面环境&#xff08;如 GNOME、KDE 等&#xff09;。下面是几种常用的重启桌面的方法&#xff1a; 重启 GNOME 桌面环境 如果你使用的是 GNOME 桌面环境&#xff08;Ubuntu 默认桌面…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...