1.Nginx反向代理
反向代理,通过请求转发,以一个中间人的姿态来帮助用户访问某个后端服务器中的资源。通过反向代理,可以隐藏后端服务器的信息。Nginx本身就具有这个功能,只需要对配置文件进行一定的修改即可。并且,这个神奇的配置文件支持一定程度的编程,因此可以实现一些特定的奇怪需求。
2.Nginx实现根据来源IP不同代理至不同的网站
以下配置文件实现了根据来源IP不同,将请求转发至不同的Docker容器中,具体实现步骤为:
- 1.为每第i个用户建立一个docker容器,并将需要访问的端口映射到127.0.0.1的8000+i端口
- 2.将每个用户的IP绑定在一个网段,例如192.168.1.i
- 3.在配置文件中,匹配来源ip中的i,并转发至127.0.0.1的8000+i号端口
server {
listen 80;
server_name localhost;
large_client_header_buffers 4 16k;
client_max_body_size 300m;
client_body_buffer_size 128k;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_buffer_size 64k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
location /{
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
if ($remote_addr ~ "192\.168\.101\.([0-9]{3})"){
set $docker_container_port $1;
set $docker_container_addr "http://127.0.0.1:8${docker_container_port}";
proxy_pass $docker_container_addr;
break;
}
if ($remote_addr ~ "192\.168\.101\.([0-9]{2})"){
set $docker_container_port $1;
set $docker_container_addr "http://127.0.0.1:80${docker_container_port}";
proxy_pass $docker_container_addr;
break;
}
if ($remote_addr ~ "192\.168\.101\.([0-9]{1})"){
set $docker_container_port $1;
set $docker_container_addr "http://127.0.0.1:800${docker_container_port}";
proxy_pass $docker_container_addr;
break;
}
}
}