Docker+Nginx | Docker(Nginx) + Docker(fastapi)反向代理

在DockerHub搜 nginx,第一个就是官方镜像库,这里使用1.27.2版本演示

1.下载镜像

docker pull nginx:1.27.2

2.测试运行

docker run --name nginx -p 9090:80 -d nginx:1.27.2

 这里绑定了宿主机的9090端口,只要访问宿主机的9090端口,就会转发到docker nginx的80端口上。

3.把   nginx.conf文件拷贝出来

docker cp 504b691dc5f9:/etc/nginx/nginx.conf ~/server/conf/

 4.停掉并删除当前容器

docker stop 504b691dc5f9
docker rm 504b691dc5f9

 5.重新运行docker,把conf文件和日志目录绑定到docker上

Note:自己在wsl2子系统/home下创建/server/conf  /server/log 文件夹 

docker run -p 9090:80 --name nginx -v ~/server/conf/nginx.conf:/etc/nginx/nginx.conf -v ~/server/log:/var/log/nginx -d nginx:1.27.2

更新2:

docker中的nginx转发至另一个nginx的fastapi服务

2.1 为了避免nginx转发后,fastapi的api文档打不开,或者当有多个服务运行的时候,nginx配置api文档路径冲突,那么可以在fastapi中重新显示的配置文档地址,如下:

mROOT_URL= "/sql/user"
app = FastAPI(
    title="MS User Database Service",
    version="1.0.0",
    docs_url=f"{mROOT_URL}/docs",
    redoc_url=f"{mROOT_URL}/redoc",
    openapi_url=f"{mROOT_URL}/openapi.json",
    lifespan=lifespan)

2.2 打包dockerfile,生成fastapi的docker镜像

docker image build -t fastapi_test:v01 . 

例如我编译了一个名为fastapi_test:v01的镜像

2.3 运行docker:

docker run --name v_fastapi_test -p 7000:7000 -d fastapi_test:v01

检查可以正常通过7000端口打开文档

2.4 修改拷贝出来的nginx.conf文件


user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

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

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    # comment this line , because it will load other sub-fule
    #include /etc/nginx/conf.d/*.conf;
    
    server {
    	listen 80; # prot
    	server_name localhost; # listening address
    	
    	# nginx default address, using for nginx deployment test
    	location / {
    	    root /usr/share/nginx/html;
            index index.html index.htm;
    	}
    	
    	location /sql/user {
    	    proxy_pass http://host.docker.internal:7000;
            proxy_http_version 1.1;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            expires -1;

    	}
    	
    
    }
}

首先注释掉#include /etc/nginx/conf.d/*.conf; 不然加载的默认子文件会覆盖端口造成WARNING

添加server部分,这个可以用来验证nginx部署启动完成

转发到fastapi的7000端口,这里使用host.docker.internal来表示宿主机,因为宿主机已经映射了7000端口到fastapi的docker了,使用1.1的版本。

 2.5 运行nginx的docker

docker run -p 80:80 --name nginx_test -v ~/server/conf/nginx.conf:/etc/nginx/nginx.conf -v ~/
server/log:/var/log/nginx -d nginx:1.27.2

将宿主机的80端口映射到docker中的80端口,绑定wsl2中的nginx.conf文件到docker中,这样默认就会被宿主机的配置文件覆盖,绑定log文件夹。

2.6 测试,如下图,看到转发成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值