package test.util;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.URL;
import java.net.Proxy.Type;
public class HttpAndHttpsProxy {
* url:外网测试地址 param:请求报文 proxy:代理地址(内网IP地址:10.0.100.00) port :端口号(22)
* **/
public static String HttpProxy(String url, String param, String proxy, int port) {
HttpURLConnection httpConn = null;
OutputStreamWriter out1 = null;
BufferedReader in = null;
String result = "";
BufferedReader reader = null;
try {
URL urlClient = new URL(url);
System.out.println("请求的URL========:" + urlClient);
// 创建代理
Proxy proxy1 = new Proxy(Type.HTTP, new InetSocketAddress(proxy, port));
// 设置代理
httpConn = (HttpURLConnection) urlClient.openConnection(proxy1);
// 设置通用的请求属性
httpConn.setRequestProperty("accept", "*/*");
httpConn.setRequestProperty("connection", "Keep-Alive");
httpConn.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
httpConn.setRequestProperty("Charset", "utf-8");
// 发送POST请求必须设置如下两行
httpConn.setDoOutput(true);
httpConn.setDoInput(true);
// 获取URLConnection对象对应的输出流
//使请求报文不中文乱码
out1 = new OutputStreamWriter(httpConn.getOutputStream());
out1.write(param);
out1.flush();
//使返回的报文不中文乱码
in = new BufferedReader(new InputStreamReader(httpConn.getInputStream(),"gbk"));
String line;
while ((line = in.readLine()) != null) {
result += line;
httpConn.disconnect();
System.out.println("====result====" + result);
System.out.println("返回结果:" + httpConn.getResponseMessage());
} catch (Exception e) {
e.printStackTrace();
} finally {
try { if (reader != null) { reader.close(); } } catch (IOException e) { e.printStackTrace(); }
try { if (in != null) { in.close(); } } catch (IOException e) { e.printStackTrace(); }
try { if (out1 != null) { out1.close(); } } catch (IOException e) { e.printStackTrace(); }
return result;
private static void getResponseTextV2(InputStream netIps, StringBuilder builder) throws Exception {
byte[] buffer = new byte[1024];
int len;
while((len = netIps.read(buffer)) != -1) {
builder.append(new String(buffer, 0, len, "UTF-8"));
public static void main(String[] args) {
// 示例
String aa=HttpProxy("http://whois.pconline.com.cn/ipJson.jsp?ip=183.129.203.232&json=true", "", "192.168.3.17", 9999);
System.out.println(aa);
文章目录一、正向代理图结构图目标二、注意事项相关地址三、快速使用3.1 在可以访问网络的服务器,比如案例中的 192.168.1.203.2 在不可以联网的服务器,比如案例中的 192.168.1.10设置 http代理设置 https代理
一、正向代理图
NGINX 是一个非常流行的开源 Web 服务器和反向代理服务器,它可以帮助用户负载均衡(主要体现在可以创建多个服务器,一般将静态资源页面和动态页面分开部署到不同服务器,这样就可以降低服务器压力)、缓存、反向代理、SSL 终止等功能,常用于 Web 应用程序的开发和部署。NGINX 是一个开源的 Web 服务器和反向代理服务器,它使用 Nginx 作为 Web 服务器和反向代理服务器的原因是它拥有高性能、可扩展性和可靠性。它可以处理大量的并发连接,并且可以缓存 HTTP 请求以提高性能。
我一般都是使用 nginx 做反向代理 tomcat 和其他应用的,其实 nginx 也是支持正向代理的
所谓正向代理就是内网用户通过网关访问外部资源,就是电脑上网时浏览器设置下 http 代理地址访问互联网
而反向代理就是外部用户通过网关访问内网资源,通俗讲就是,你的网站跑在内网的 8080 端口,别人能够通过 80 端口来访问它
http 代理配置
# 正向代理上网
server {
listen 38080;
# 解析域名
resolver 8.8.8.8;
location / {
proxy_pass $scheme://$http_host$r
由于公司内网有多台服务器的http服务要映射到公司外网静态IP,如果用路由的端口映射来做,就只能一台内网服务器的80端口映射到外网80端口,其他服务器的80端口只能映射到外网的非80端口。非80端口的映射在访问的时候要域名加上端口,比较麻烦。并且公司入口路由最多只能做20个端口映射。
肯定以后不够用。
然后发现可以在内网搭建一个nginx反向代理服务器,将nginx反向代理服务器的80映射到外网IP的80,这样指向到公司外网IP的域名的HTTP请求就会发送到nginx反向代理服务器,利用nginx反向代理将不同域名的请求转发给内网不同机器的端口,就起到了“根据域名自动转发到相应服务器的特定端
因为公司的某些系统需要访问互联网上的某些功能,每个系统的服务器都开通访问互联网的能力太麻烦并且不方便管理,所以打算只对一台服务器开通访问互联网的能力,并在此服务器基础上搭建 nginx 正向代理,方便其他系统可以使用该服务器作为代理借道访问互联网功能。
https://github.com/chobits/ngx_http_proxy_connect_module 下载地址。此处使用的是nginx-1.20.2,对应proxy_connect_rewrite_1018.patch。查看正向代理模块proxy_connect_rewrite_1018.patch的位置。https://nginx.org/en/download.html 官网下载地址。安装nginx 安装位置根据 编译时配置的–prefix=nginx版本与代理模块对照表。
本例子中是: proxy_set_header Host ‘test.picclife.cn:8888’;‘此处写入内层nginx监听的域名加端口’;最重要的部分 (设置外层的nginx的。-> nginx刷新配置重启。(2)挂载信息查看 -->挂载目录查看,/etc/
在网络环境中,有时候我们需要让局域网内的电脑访问外网,但是由于网络策略或其他原因,直接访问外网是不可行的。这时候,可以借助 Nginx 来搭建一个正向代理服务器,实现局域网内电脑通过 Nginx 转发访问外网的需求。在工作中我遇到了一个类似的情况:在公司网络中,由于管理要求,局域网内的电脑不能直接访问外网。但是,有时候我们需要让局域网内的电脑能够访问外网上的某个网站,这时候就需要用到正向代理。本文将介绍如何配置 Nginx 实现这一功能。
由于公司内网有多台服务器的http服务要映射到公司外网静态IP,如果用路由的端口映射来做,就只能一台内网服务器的80端口映射到外网80端口,其他服务器的80端口只能映射到外网的非80端口。非80端口的映射在访问的时候要域名加上端口,比较麻烦。并且公司入口路由最多只能做20个端口映射。肯定以后不够用。
然后k兄就提议可以在内网搭建个nginx反向代理服务器,将nginx反向代理服务器的80映射到外网IP的80,这样指向到公司外网IP的域名的HTTP请求就会发送到nginx反向代理服务器,利用nginx反向代理将不同域名的请求转发给内网不同机器的端口,就起到了“根据域名自动转发到相应服务器的
当前URl请求URL是否跨域原因否本域(协议、域名、端口号相同)是协议不同(http、https)是域名不同(zhihu、baidu)是端口号不同(8080、9090)根据上面的表,总的来说就是协议主机端口号三者任意一个不同就是跨域。
一、设置NGINX为HTTP代理服务器
1.1 设置Nginx为HTTP代理服务器上网,只需要3步(vim /usr/local/nginx/conf/nginx.conf):
1. 增加dns解析resolver。 可以查看/etc/resolv.conf中的配置。
2. 增加server。 server_name可以有也可以没有,如果没有则指直接使用IP,如果