yum install pcre-devel pcre -y
yum install zlib-devel zlib -y
yum install openssl-devel openssl -y
yum install redhat-lsb-core -y
yum install git -y
3.进入/usr/local目录下载nginx和ngx_http_proxy_connect_module
cd /usr/local

从git拉取模块

git clone https://github.com/chobits/ngx_http_proxy_connect_module.git

下载nginx包

wget http://nginx.org/download/nginx-1.9.9.tar.gz

解压nginx压缩包

tar -zxvf nginx-1.9.9.tar.gz
4.进入nginx解压目录添加https模块
cd  /usr/local/nginx-1.9.9

添加模块到nginx

patch  -p1 < /usr/local/ngx_http_proxy_connect_module/patch/proxy_connect.patch
./configure --add-module=/usr/local/ngx_http_proxy_connect_module
5.安装nginx
make &&  make install
6.配置nginx.conf
vim /usr/local/nginx/conf/nginx.conf
worker_processes 1;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {
  worker_connections 1024;
http {
  include mime.types;
  default_type application/octet-stream;
  #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
  #                  '$status $body_bytes_sent "$http_referer" '
  #                  '"$http_user_agent" "$http_x_forwarded_for"';
  #access_log  logs/access.log  main;
  sendfile on;
  #tcp_nopush     on;
  #keepalive_timeout  0;
  keepalive_timeout 65;
  #gzip  on;
  server {
    #代理后端口
    listen 9999;
    charset utf-8;
    # dns resolver used by forward proxying
    resolver 114.114.114.114;
    # forward proxy for CONNECT request
    proxy_connect;
    #设置为all,允许转发所有的端口
    proxy_connect_allow all; 
    proxy_connect_connect_timeout 10s;
    proxy_connect_read_timeout 10s;
    proxy_connect_send_timeout 10s;
    # forward proxy for non-CONNECT request
    location / {
      #试过使用 $scheme://$host$request_uri;好像不起作用
      if ($scheme = 'http') {
        proxy_pass http://$host$request_uri;
      if ($scheme = 'https') {
        proxy_pass https://$host$request_uri;
      proxy_set_header Host $host;
      proxy_buffers 256 4k;
      proxy_max_temp_file_size 0k;
7.启动nginx
cd /usr/local/nginx/sbin
./nginx 
8.修改nginx.conf文件后,重新加载配置
cd /usr/local/nginx/sbin
./nginx -s reload
9.去要访问外网的内网服务器环境变量里面配置正向代理服务器的代理地址
vim  /etc/profile
#export http_proxy=正向代理服务器http的IP:端口
export http_proxy=192.168.3.17:9999
#export https_proxy=正向代理服务器https的IP:端口
export https_proxy=192.168.3.17:9999
#保存文件后重新加载环境
source /etc/profile
10.内网服务器测试访问
curl  -i  www.baidu.com
#如果未加环境变量代理设置,则可以通过临时代理访问
curl -i  --proxy 192.168.3.17:9999      www.baidu.com
11.java通过代理访问外部接口
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是否跨域原因否本域(协议、域名、端口号相同)是协议不同(httphttps)是域名不同(zhihu、baidu)是端口号不同(8080、9090)根据上面的表,总的来说就是协议主机端口号三者任意一个不同就是跨域。
                                    一、设置NGINXHTTP代理服务器
1.1 设置NginxHTTP代理服务器上网,只需要3步(vim /usr/local/nginx/conf/nginx.conf):
      1. 增加dns解析resolver。 可以查看/etc/resolv.conf中的配置。
      2. 增加server。   server_name可以有也可以没有,如果没有则指直接使用IP,如果