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

news/2024/11/22 10:25:16/

在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; # protserver_name localhost; # listening address# nginx default address, using for nginx deployment testlocation / {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 运行nginxdocker

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 测试,如下图,看到转发成功


http://www.ppmy.cn/news/1549006.html

相关文章

uni-app 界面TabBar中间大图标设置的两种方法

一、前言 最近写基于uni-app 写app项目的时候,底部导航栏 中间有一个固定的大图标,并且没有激活状态。这里记录下实现方案。效果如下(党组织这个图标): 方法一:midButton的使用 官方文档:ta…

开源Tacchi 视触觉传感器仿真器,为机器人与物体接触仿真提供高质量的Sim2Real性能!

Tacchi是一个基于Taichi编程语言开发的低计算成本弹性体形变仿真器,由方斌教授团队开发并已开源,为机器人与物体接触仿真提供高质量的Sim2Real性能!该仿真器以较低的计算资源消耗来模拟弹性体的物理形变,并生成与真实触觉图像相似…

同态加密技术与应用场景

【1】应用场景 同态加密(Homomorphic Encryption, HE)是一种加密技术,它允许直接对加密数据进行特定的操作,而不需要先将数据解密。这种特性使得同态加密在保护数据隐私的同时,还能支持数据的处理和分析,因…

Sourcetree登录GitLab账号

1. 在GitLab上创建个人访问令牌 在gitlab中点击右上角的头像图标,选择设置进入 Access Tokens(访问令牌) 页面填写令牌名称和到期时间,指定Scopes(范围)。一般选择read_repository和api点击 Create person…

如何在 Microsoft Edge 中设置代理: 快速而简单的方法

你知道在 Microsoft Edge 中设置代理可以大大提升浏览体验吗?无论您是想提高隐私保护、访问受地理位置限制的内容,还是想更高效地浏览网页,代理服务器都能改变一切。 本指南将介绍如何在 Microsoft Edge 中设置代理,解决常见的代…

一文了解钩子函数(Hook Functions)

钩子函数是一种允许在软件执行过程中插入自定义逻辑的机制。它为开发者提供了一种灵活的方式,在某些特定的生命周期阶段或事件发生时,执行用户定义的代码,而无需直接修改框架或系统的核心逻辑。 特性 动态扩展:通过钩子函数&am…

osgEarth+qt无法设置视点

一、问题 当我们使用的osgEarth和qt创建窗口时,利用setViewpoint()函数,没有反应。 二、解决方法 osg::ref_ptr<osgEarth::Util::EarthManipulator> em = dynamic_cast<osgEarth::Util::EarthManipulator<

Jenkins更换主题颜色+登录页面LOGO图片

默认主题和logo图片展示 默认主题黑色和白色。 默认LOGO图片 安装插件 Login ThemeMaterial Theme 系统管理–>插件管理–>Available plugins 搜不到Login Theme是因为我提前装好了 没有外网的可以参考这篇离线安装插件 验证插件并修改主题颜色 系统管理–>A…