nginx 配置正向代理

正向代理和反向代理

我的这篇博客中有介绍:
https://blog.csdn.net/qq_27068845/article/details/79115366

环境准备

我这里是用vagrant启动三台虚拟机,在虚拟机中使用docker启动nginx来做的实验。
也可以不用vagrant和docker。

nginx 配置正向代理_第1张图片

Client: 有curl命令就行。
Proxy: docker 和 nginx镜像。
Server: docker 和 nginx镜像。

Vagrantfile配置:

#
#-*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.require_version ">= 1.6.0"

boxes = [
    {
        :name => "client",
        :eth1 => "192.168.205.10",
        :mem => "1024",
        :cpu => "1"
    },
    {
        :name => "proxy",
        :eth1 => "192.168.205.11",
        :mem => "1024",
        :cpu => "1"
    },
    {
        :name => "server",
        :eth1 => "192.168.205.12",
        :mem => "1024",
        :cpu => "1"
    }
]

Vagrant.configure(2) do |config|
  # 这个box是我自制的,centos7 安装了docker和go语言
  config.vm.box = "centos7-docker-go.box"

  boxes.each do |opts|
      config.vm.define opts[:name] do |config|
        config.vm.hostname = opts[:name]
        config.vm.provider "vmware_fusion" do |v|
          v.vmx["memsize"] = opts[:mem]
          v.vmx["numvcpus"] = opts[:cpu]
        end

        config.vm.provider "virtualbox" do |v|
          v.customize ["modifyvm", :id, "--memory", opts[:mem]]
          v.customize ["modifyvm", :id, "--cpus", opts[:cpu]]
        end
        # 共享目录 禁用默认共享目录
        config.vm.synced_folder ".", "/vagrant", disabled:true
        config.vm.network :private_network, ip: opts[:eth1]
      end
  end
end

实验目标

在client机器上,curl访问server上的网页,查看nginx日志,源ip应该是192.168.205.10(client).
配置好Proxy机器的正向代理后,client配置好http_proxy参数,curl访问server, server上的源ip地址应该是192.168.205.11(proxy).

server配置

启动nginx, 开放8080端口。

docker run --name server -p 8080:80 -d nginx

监听日志:

docker logs -f server

验证server是否配置好,登录client机器(建议三台虚拟机都开一个终端窗口)

curl 192.168.205.12:8080

server端日志:
这里写图片描述

Proxy配置

  1. 先从容器中取出nginx的默认配置文件default.conf
# 启动nginx容器
docker run --name test -d nginx

# 拷贝容器中的conf.d文件夹到当前目录
docker cp test:/etc/nginx/conf.d . 

# 强制删除test容器
docker rm -f test

这样当前目录就存在了conf.d文件夹,里面有default.conf文件。
2. 配置正向代理
在conf.d文件夹中新建文件proxy.conf(文件名随意),内容如下:

server {
        access_log /var/log/nginx/access.log;
        listen 8090;
        location / {
                resolver 8.8.8.8;
                proxy_pass $scheme://$http_host$request_uri;
                proxy_buffers   256 4k;
                proxy_max_temp_file_size 0k;
        }
}

resolver 定义域名解析。本实验好像没有用到这个配置。改成一个不存在的ip都不影响。
8090这个端口,就是用来正向代理的。客户端发送到这个端口的请求,都会被代理出去。

  1. 启动代理服务器
    这里我为了方便,使用docker-compose来配置nginx.
version: '3'
services:
   proxy:
       image: nginx
       volumes:
           - ./conf.d:/etc/nginx/conf.d
       ports:
           - "8080:80"
           - "8090:8090"
# 启动nginx
docker-compose up -d

# 查看是否正常启动了
docker-compose ps

这里写图片描述

Client测试

  1. 访问服务器
curl 192.168.205.12:8080

服务器日志显示:
这里写图片描述
2. 设置代理后访问

export http_proxy=192.168.205.11:8090

注:取消代理unset http_proxy
服务器日志显示:
这里写图片描述

你可能感兴趣的:(nginx)