试着使用Docker和Nginx镜像,搭建一个反向代理

我对Docker镜像 “jwilder/nginx-proxy” 并不太了解,所以我找到了下面的文章。

【学习如何搭建反向代理服务器 | 北方极客】
http://tech.respect-pal.jp/reverse_proxy_cooking/

对于那些想尝试使用反向代理服务器的人来说,这是一篇推荐的文章!我参考了这篇文章并尝试了实际实验。
(请注意,我根据自己的理解稍微改变了部分内容,请您了解)

目录结构

将用于在浏览器中显示Nginx容器的docker-compose.yml文件放置在nginx1、nginx2目录中,将用于反向代理的docker-compose.yml文件放置在proxy目录中。

我已经上传到Github,您可以从这里下载完整的文件:https://github.com/Vc2R6SJeCYR7/nginx-reverse-proxy。

reverse-proxy
├─nginx1
│  └─etc
│      └─nginx
│          └─conf.d
├─nginx2
│  ├─etc
│  │  └─nginx
│  │      └─conf.d
│  └─html
└─proxy
    ├─etc
    │  └─nginx
    │      └─conf.d
    └─html

创建网络 (CJWord)

为了使容器之间能够进行通信,我们需要创建一个网络。

$ docker network create --driver bridge shared

Nginx的容器

将在浏览器中显示的“nginx1”和“nginx2”设置如下。

nginx1容器


version: '3'
services:

  nginx1:
    image: nginx:latest
    container_name: 'nginx1'
    volumes:
      - ./html:/usr/share/nginx/html
      - ./etc/nginx/conf.d/:/etc/nginx/conf.d
    environment:
      VIRTUAL_HOST: 'blog1.nginx.com'

networks:
  default:
    external:
      name: shared



与nginx1相同的nginx2容器。



version: '3'
services:

  nginx2:
    image: nginx:latest
    container_name: 'nginx2'
    volumes:
      - ./html:/usr/share/nginx/html
      - ./etc/nginx/conf.d/:/etc/nginx/conf.d
    environment:
      VIRTUAL_HOST: 'blog2.nginx.com'

networks:
  default:
    external:
      name: shared

反向代理容器

docker-compose.yml文件进行改写。

使用以下文件启动用于反向代理的nginx容器。


version: '3'
services:

  proxy:
    image: nginx:latest
    container_name: 'proxy'
    privileged: true
    volumes:
      - ./html:/usr/share/nginx/html
      - ./etc/nginx/conf.d/:/etc/nginx/conf.d
    ports:
      - "80:80"
      - "443:443"
    restart: always

networks:
  default:
    external:
      name: shared

默认配置文件夹

需要根据域名将「nginx1」和「nginx2」的显示进行分配的设置,因此需要创建如下所示的文件。


/reverse-proxy/proxy/etc/nginx/con.d/default.conf

server {
    listen       80;
    server_name  blog1.nginx.com;


    location / {
        proxy_pass   http://nginx1:8080;
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}



server {
    listen       80;
    server_name  blog2.nginx.com;

    location / {
        proxy_pass   http://nginx2:8080;
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}


启动容器

在每个目录中启动容器。


/reverse-proxy/nginx1 -> docker-compose up -d
/reverse-proxy/nginx2 -> docker-compose up -d
/reverse-proxy/proxy -> docker-compose up -d

请确认浏览器显示

现在,您可以通过多个域名访问名为“nginx1”和“nginx2”的容器。

在Mac或Windows上,通过修改hostsg文件等方式,设置IP地址和域名,然后在浏览器中访问”blog1.nginx.com”和”blog2.nginx.com”,您应该能够看到nginx显示目录。

反向代理真厉害。

仅提供一个选择,将以下内容以汉语为母语进行改写:

【jwilder/nginx-proxy – Docker Hub】
https://hub.docker.com/r/jwilder/nginx-proxy

【jwilder/nginx-proxy – Docker Hub】
https://hub.docker.com/r/jwilder/nginx-proxy

【jwilder/nginx-proxy – Docker Hub】
https://hub.docker.com/r/jwilder/nginx-proxy

【jwilder/nginx-proxy – Docker Hub】
https://hub.docker.com/r/jwilder/nginx-proxy

【jwilder/nginx-proxy – Docker Hub】
https://hub.docker.com/r/jwilder/nginx-proxy

【学习制作反向代理服务器 | 东北极客】
http://tech.respect-pal.jp/reverse_proxy_cooking/

广告
将在 10 秒后关闭
bannerAds