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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/66355.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

字玩FontPlayer开发笔记4 性能优化 首屏加载时间优化

字玩FontPlayer开发笔记4 性能优化 首屏加载时间优化 字玩FontPlayer是笔者开源的一款字体设计工具&#xff0c;使用Vue3 ElementUI开发&#xff0c;源代码&#xff1a; github: https://github.com/HiToysMaker/fontplayer gitee: https://gitee.com/toysmaker/fontplayer …

MySQL Binlog 监听方案

如果 EmbeddedEngine 类在 debezium-connector-mysql 中不可用&#xff0c;原因是 Debezium 的新版本移除了 EmbeddedEngine。这是因为 Debezium 的架构变更&#xff0c;它现在鼓励使用 Kafka Connect 或 Debezium Server 来处理数据变更事件。 下面是几种替代方法来实现 MySQ…

JSP内置对象、Servlet与MVC

目录 1、JSP内置对象1. 1、**out 对象**1.2、 **request 对象**1.3、 **response 对象**1.4、 **session 对象**1.5、 **application 对象**1.6、 **cookie 对象** 2、Servlet2.1、Servlet 概念2.2、Servlet 体系结构2.3、Servlet 接口2.4、ServletConfig 接口2.5、Servlet 案例…

论文解读 | NeurIPS'24 IRCAN:通过识别和重新加权上下文感知神经元来减轻大语言模型生成中的知识冲突...

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 点击 阅读原文 观看作者讲解回放&#xff01; 作者简介 史丹&#xff0c;天津大学博士生 内容简介 大语言模型&#xff08;LLM&#xff09;经过海量数据训练后编码了丰富的世界知识。最近的研究表明&#xff0c…

Linux系统操作笔记

防火墙服务&#xff1a; 开启防火墙服务&#xff1a;systemctl start firewalld / service firewalld start 关闭防火墙服务&#xff1a;systemctl stop firewalld / service firewalld stop 禁用防火墙服务&#xff1a;systemctl disable firewalld / service disable stop 开…

大语言模型训练所需的最低显存,联邦大语言模型训练的传输优化技术

联邦大语言模型训练的传输优化技术 目录 联邦大语言模型训练的传输优化技术大语言模型训练所需的最低显存大语言模型训练所需的最低显存 基于模型微调、压缩和分布式并行处理的方法,介绍了相关开源模型及技术应用 核心创新点 多维度优化策略:综合运用基于模型微调、模型压缩和…

(CICD)自动化构建打包、部署(Jenkins + maven+ gitlab+tomcat)

一、平滑发布与灰度发布 **什么叫平滑&#xff1a;**在发布的过程中不影响用户的使用&#xff0c;系统不会因发布而暂停对外服务&#xff0c;不会造成用户短暂性无法访问&#xff1b; **什么叫灰度&#xff1a;**发布后让部分用户使用新版本&#xff0c;其它用户使用旧版本&am…

Python 科学计算

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

【pytorch】注意力机制-1

1 注意力提示 1.1 自主性的与非自主性的注意力提示 非自主性提示&#xff1a; 可以简单地使用参数化的全连接层&#xff0c;甚至是非参数化的最大汇聚层或平均汇聚层。 自主性提示 注意力机制与全连接层或汇聚层区别开来。在注意力机制的背景下&#xff0c;自主性提示被称为查…

『SQLite』详解运算符

内容摘要&#xff1a;本节讲解运算符&#xff0c;包括&#xff1a;算术运算符、比较运算符、逻辑运算符和位运算符。 什么是运算符&#xff1f; 运算符是一个保留字或字符&#xff0c;主要用于 SQLite 语句的 WHERE 子句中执行操作。它用于指定 SQLite 语句中的条件&#xff0…

Qt窗口获取Tftpd32_svc服务下载信息

前言 一个由Qt开发的Windows小工具需要布置Tftp协议服务端来支持设备下载数据&#xff0c;并显示下载列表&#xff08;进度、下载源等&#xff09;。 考虑开发方便&#xff0c;优先使用了Qtftp方案&#xff0c;经测试发现&#xff0c;不够稳定&#xff0c;会有下载超时的情况&a…

<OS 有关> DOS 批处理命令文件,用于创建 python 虚拟机,并进入虚拟机状态执行后继命令 判断虚拟机是否存在,在批处理文件中自定义 虚拟机名字

前言&#xff1a; 经常要敲重复的命令&#xff1a; python -m venv venv.\venv\Scripts\activate.bat (虽然能按 Tab 省几下&#xff0c;多了也烦恼&#xff0c;后来写了四行脚本 start.bat) DOS批处理 create_venv_start.bat 功能&#xff1a; 批处理显示支持中文在 creat…

[python3]Excel解析库-openpyxl

https://openpyxl.readthedocs.io/en/stable/ openpyxl 是一个用于读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件的 Python 库。它允许开发者创建、修改和保存电子表格&#xff0c;而无需依赖 Microsoft Excel 软件本身。openpyxl 支持读取和写入 Excel 的工作簿&#xff08;Work…

【算法刷题】leetcode hot 100 哈希篇

文章目录 1. 两数之和49. 字母异位词分组128. 最长连续序列总结 1. 两数之和 leetcode&#xff1a;https://leetcode.cn/problems/two-sum/description/?envTypestudy-plan-v2&envIdtop-100-liked暴力解决&#xff1a; public int[] twoSum(int[] nums, int target) {for …

iOS 逆向学习 - iOS Architecture Cocoa Touch Layer

iOS 逆向学习 - iOS Architecture Cocoa Touch Layer 一、Cocoa Touch Layer 简介二、Cocoa Touch Layer 的核心功能1. UIKit2. Event Handling&#xff08;事件处理&#xff09;3. Multitasking&#xff08;多任务处理&#xff09;4. Push Notifications&#xff08;推送通知&…

java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter

今天在朋友机子上运行代码&#xff0c;在生成token的时候&#xff0c;遇到了这样一个问题&#xff1a; Caused by: java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter at io.jsonwebtoken.impl.Base64Codec.decode(Base64Codec.java:26) ~[jjwt-0.9.1.jar:0.…

从0搭建DataSphereStudio保姆级教程--复制粘贴即用(hadoop2.7.2、hive2.3.3、spark2.4.5)

centos7 部署Hadoop 2.7.2 前置&#xff1a;配置好免密登录 1、安装JDK1.8 yum -y install java-1.8.0-openjdk*#验证 java -version2、下载Hadoop2.7.2安装包及解压(可提前下载好直接上传&#xff09; mkdir /opt/server mkdir /opt/software cd /opt/software wget http:…

网站常用功能模块-鉴权

一&#xff1a;JWT是什么&#xff1f; 常用鉴权方式有很多种&#xff0c;今天主要介绍基于token的鉴权方式JWT&#xff08;Json JSON Web Token&#xff09;。因为这种方式实现起来方便快捷。整体实现逻辑如下 第一次登陆时&#xff0c;前端携带账号和密码请求登录接口。服务…

Colyseus 与 HTTP API 的集成

Colyseus 与 HTTP API 的集成 在使用 Colyseus 开发实时多人应用时&#xff0c;通常需要与传统的 HTTP API 集成&#xff0c;例如用户身份验证、存储游戏数据、获取排行榜等。以下是 Colyseus 与 HTTP API 集成的详细介绍&#xff1a; 1. Colyseus 的基本架构 Colyseus 是一个…

asp.net core mvc的 ViewBag , ViewData , Module ,TempData

在 ASP.NET MVC 和 ASP.NET Core MVC 中&#xff0c;ViewBag 和 ViewData 是两种用于将数据从控制器传递到视图&#xff08;View&#xff09;的常用方法。它们都允许控制器将动态数据传递给视图&#xff0c;但它们的实现方式有所不同。关于 Module&#xff0c;它通常指的是某种…