入门:Docker中使用Nginx部署Web项目

环境

Ubuntu 22.04.2 LTS

docker

安装

官网教程

  1. Set up [Docker’s package repository] (https://docs.docker.com/engine/install/ubuntu/#set-up-the-repository). 只需要前三步,后面的步骤是安装 Docker Engine
  2. Download latest DEB package.

Nginx

使用镜像创建一个容器
镜像(Image):相当于一个模板
容器(Container):模板对应的实例,使用一个镜像可以创建多个容器,每个容器可以有不同的配置

配置文件

有两个配置文件:

  1. /etc/nginx/conf.d/default.conf
  2. /etc/nginx/nginx.conf

nginx.conf是配置文件,该文件引用了default.conf,可以通过修改default.conf达到配置目的。

我们的web文件放到/usr/local/nginx/html/中,修改配置文件中的路径。

default.conf配置文件

server {
    listen       80; # 默认监听80端口,这是容器里的默认端口,真实的端口要看docker的端口映射。
    listen  [::]:80; # IPv6的端口
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html/myhtml; # 我们的html页面
        index  index.html index.htm;
    }
    
    # 可以被下面调用,多个后端实现负载均衡。
    upstream backend {
        server 172.27.111:8081 max_fails=5 fail_timeout=10s weight=1;
        #server 172.27.111:8082 max_fails=5 fail_timeout=10s weight=1;
    } 

    # 通过将前端的请求修改后发送到后端
    location /api {  
        default_type  application/json;
        #internal;  
        keepalive_timeout   30s;  
        keepalive_requests  1000;  
        #支持keep-alive  
        proxy_http_version 1.1;  
        rewrite /api(/.*) $1 break;  # 去掉“api”
        proxy_pass_request_headers on;
        proxy_next_upstream error timeout;  
        proxy_pass http://172.27.111.128:8081; # 后端地址,在容器中不能使用127.0.0.1
        #proxy_pass http://backend; # 可以替换上面一行,实现负载均衡
    }

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

路径映射

配置文件和html都是在容器中,操作不方便,可以通过映射将这两个文件夹放到宿主机上。

踩过的坑

  1. 用docker desktop中启动一个nginx后,默认容器中的端口是80,并在宿主机上映射一个端口(如:8080)。
    此时,由于Nginx在容器内,则只能监听80端口,但在宿主机上表现为监听8080端口。
  2. Nginx在docker中,如果调用后端接口,不能使用127.0.0.1,需要使用本机ip,否则会出现502 Bad Gateway
posted @ 2023-04-14 22:48  敬_畏  阅读(660)  评论(0编辑  收藏  举报