我的这篇博客中有介绍:
https://blog.csdn.net/qq_27068845/article/details/79115366
我这里是用vagrant启动三台虚拟机,在虚拟机中使用docker启动nginx来做的实验。
也可以不用vagrant和docker。
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).
启动nginx, 开放8080端口。
docker run --name server -p 8080:80 -d nginx
监听日志:
docker logs -f server
验证server是否配置好,登录client机器(建议三台虚拟机都开一个终端窗口)
curl 192.168.205.12:8080
server端日志:
# 启动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这个端口,就是用来正向代理的。客户端发送到这个端口的请求,都会被代理出去。
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
curl 192.168.205.12:8080
服务器日志显示:
2. 设置代理后访问
export http_proxy=192.168.205.11:8090
注:取消代理unset http_proxy
服务器日志显示: