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; } } }