今天使用nginx+docker容器的方式,搭建了前端服务的代理转发,以前全部的前端页面的js、csss文件都是放在容器外面,通过在docker-compose.yml文件中配置映射的方式映射到容器内部,进行访问,现在自己学会了制作nginx镜像,就把前端的js和css文件一并放入镜像文件中,直接启动,更新操作省去了很多解压和压缩文件的麻烦,更新操作也变得丝滑了很多
原本前端代理路径的的nginx的配置如下:

server {
  listen     18080 default_server;
  server_name  _;
  sendfile        on;
  keepalive_timeout  3600s;
  client_max_body_size     200m;
  root  /data/cwos/frontend/xh;

  index index.html portal/cbs-xh/index.html
  proxy_connect_timeout 600s;
  proxy_read_timeout 600s;
  proxy_send_timeout 600s;
  proxy_set_header X-Real_IP $remote_addr;
  proxy_set_header Host $host;
  proxy_set_header X_Forward_For $proxy_add_x_forwarded_for;
  proxy_http_version 1.1;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection 'upgrade';
  error_page 404 /404.html;
  location = /40x.html {
  }
  error_page 500 502 503 504 /50x.html;
  location = /50x.html {
  }
location /cbs-xh {  alias /data/cwos/frontend/xh;  try_files $uri $uri/ /portal$uri /portal/cbs-xh/index.html;}

主要是两个关键信息root的目录和location的路径,都是服务器上实际存在的路径,路径的大致结构如下图:
在这里插入图片描述
然后我niginx的配置文件中关于cbs-xh的部分location修改一下,改成代理转发的upstream,变成如下内容

location /cbs-xh  {  proxy_pass http://cbs-xh;  proxy_set_header Host $http_host;  proxy_set_header X-Real-IP $remote_addr;  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }

#server外面添加一个转发
upstream cbs-xh {
    check interval=3000 rise=2 fall=3 timeout=1000 type=tcp;
    server  ecs.ip01:7778;
}

接着把7778端口直接映射为另外一个容器的对外端口,这里我另外一个nginx容器采用的是bridge的网络模式启用,所以需要再容器启动时把7778端口映射到容器内部,这样外部的请求来了以后就会原封不动滴转到新的nginx容器,新的容器的docker-compose.yml配置如下:

version: '3'
services:
  iac_xh_frontend:
    image: nexus-docker.********t:1.0.0.202508221736

    container_name: "iac_xh_frontend"
    network_mode: bridge
    restart: always
    ports:
      - 7778:10100
    environment:
      - "LANG=en_US.UTF-8"
    volumes:
      - /etc/localtime:/etc/localtime:ro
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "5"

然后通过网桥模式,我们就把请求转发到容器内部,查看容器内部的nginx配置为如下内容:

server_tokens off;
server {
        listen     10100 default_server;
        server_name  _;
        client_max_body_size     60m;
        root    /usr/share/nginx/html/cbs-xh/;
        index index.html portal/cbs-xh/index.html
        proxy_set_header X-Real-IP $remote_addr;
        error_page 404 /404.html;
            location = /40x.html {
            }
        location /cbs-xh {   alias /usr/share/nginx/html/cbs-xh/;  try_files $uri $uri/ /portal$uri /portal/cbs-xh/index.html;}
}

这个location的位置部分,和最开始nginx配置中cbs-xh的部分几乎一致,除了最开始的文件位置不一样,如下的比对图:

location /cbs-xh {   alias /usr/share/nginx/html/cbs-xh/;  try_files $uri $uri/ /portal$uri /portal/cbs-xh/index.html;}
location /cbs-xh {  alias /data/cwos/frontend/xh;  try_files $uri $uri/ /portal$uri /portal/cbs-xh/index.html;}

在此,我们就完成的nginx,容器的拆分工作,启动新的nginx镜像容器后旧的nginx容器,得到两个运行的容器,如下图所示:
在这里插入图片描述
然后我们就可以试着访问18080和7778端口了,两个端口访问的结果完全一致,访问结果截图如下图所示:
在这里插入图片描述
最后我们进入7778端口代表的容器内部,再访问同一个结果,得到的结果如下图所示:
在这里插入图片描述
发现两个接口都能得到相同的结果,但是访问10010,却是访问失败,无法连通的
在这里插入图片描述
改成localhost的ip模式,却可以正常,如下图:
在这里插入图片描述
后来才知道原来docker的网桥模式是这种.默认bridge网络模式下
localhost指向容器自身的网络命名空间,即容器内部的回环地址(127.0.0.1),与宿主机完全隔离
2
3。此时若需访问宿主机服务,必须使用以下方式:

宿主机网关IP‌:172.17.0.1(Docker默认网桥的首个IP)
3
特殊域名‌:通过extra_hosts配置host.docker.internal映射到host-gateway

更多推荐