简介: 反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务。
本次实验完成了由一个域名,通过配置nginx的反向代理来定位处于多个不同容器或这主机的应用,具体做法如下
(1)初始化三台不同ip的tomcat容器,如果没有tomcat镜像可以拉取:docker pull tomcat
docker run -d -p 8081:8080 --name tomcat1 -h tomcat1 --net shadownet --ip 172.19.13.1 -v /container_data/:/data tomcat:v1
docker run -d -p 8081:8080 --name tomcat2 -h tomcat2 --net shadownet --ip 172.19.13.2 -v /container_data/:/data tomcat:v1
docker run -d -p 8081:8080 --name tomcat3 -h tomcat3 --net shadownet --ip 172.19.13.3 -v /container_data/:/data tomcat:v1
(2)给三个容器配置文件,进入配置文件地址
mkdir /usr/local/nginx/vhosts
cd /usr/local/nginx/vhosts
vi container1.conf
upstream container1 {
server 172.19.13.1:8080 weight=1;
}
server{
listen 80;
# using web sub domain to access
server_name www.container1.com;
# access_log /var/log/nginx/web_access.log
location / {
# root /home/web2_root;
proxy_pass http://container1;
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_redirect off;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
}
}
vi container2.conf
upstream container2 {
server 172.19.13.2:8080 weight=1;
}
server{
listen 80;
# using web sub domain to access
server_name www.container2.com;
# access_log /var/log/nginx/web_access.log
location / {
# root /home/web2_root;
proxy_pass http://container2;
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_redirect off;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
}
}
vi container3.conf
upstream container3 {
server 172.19.13.3:8080 weight=1;
}
server{
listen 80;
# using web sub domain to access
server_name www.container3.com;
# access_log /var/log/nginx/web_access.log
location / {
# root /home/web2_root;
proxy_pass http://container3;
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_redirect off;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
}
}
最终vhost下三个配置文件
(3)修改nginx.conf主文件,把配置文件包含进来
Cd /usr/local/nginx/conf //默认安装位置
vi nginx.conf
#part start
#运行nginx进程的账户
#user www;
#
worker_processes 1;
#error_log /var/log/nginx/error.log
#pid /var/run/nginx.pid;
events{
# use epoll;
worker_connections 1024;
}
http{
include mime.types;
default_type application/octet-stream;
#access_log /var/log/nginx/access.log main;
#
sendfile on;
#
keepalive_timeout 65;
gzip on;
index index.html index.htm;
include /usr/local/nginx/vhosts/*.conf;
# include /etc/nginx/sites-enabled/*;
server{
listen 80;
# using www domain to access the main website
server_name www.master.com localhost;
# access_log /var/log/nginx/www.log
location / {
# root /home/website_root;
root html;
index index.html index.htm;
}
}
(4)开启nginx
检查配置是否正确
(5)在浏览器下测试不同域名是否可以转发不同容器的应用
首先修改windows上的主机名便于测试
window的hosts文件位于:C:\Windows\System32\drivers\etc\hosts
修改如下,其中192.168.50.203时我的虚拟机地址,读者可更具自己的宿主机(nginx服务器)或者代理服务器IP具修改这个地址
在浏览其输入www.container1.com和www.container2.com
ok,我们发现nginx服务其已经代理成功了。