nginx:1.26.2-alpine自定义镜像制作

news/2024/12/31 1:39:19/

问题

最近需要自定义一个nginx发布静态文件和反向代理后台接口。

步骤

这里使用的nginx:1.26.2-alpine镜像(2024.10),现在这个时间点,这个版本的alpinenginx版本都是最稳定的版本。

nginxconf_4">nginx.conf

这里需要自定义下/etc/nginx/nginx.conf,具体内容如下:


user  nginx;
worker_processes  auto;error_log  /var/log/nginx/error.log notice;
# pid文件使用临时目录
pid        /tmp/nginx.pid;events {worker_connections  1024;
}http {# 反向代理的集群upstream xxxx-gateway {server xxx.xxx.xxx.67:8080;}# 临时文件使用临时目录client_body_temp_path /tmp/client_temp;proxy_temp_path       /tmp/proxy_temp_path;fastcgi_temp_path     /tmp/fastcgi_temp;uwsgi_temp_path       /tmp/uwsgi_temp;scgi_temp_path        /tmp/scgi_temp;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;include /etc/nginx/conf.d/*.conf;
}

这里主要nginx生成的pid文件和临时文件,都使用到tmp临时目录;还有准备一个就是反向代理后台服务api接口服务集群。

default.conf

这里需要自定义下/etc/nginx/conf.d/default.conf,具体内容如下:

server {listen       8082;listen  [::]:8082;# 隐藏nginx版本号server_tokens off;server_name  localhost;#access_log  /var/log/nginx/host.access.log  main;location / {root   /usr/share/nginx/html;index  index.html index.htm;try_files $uri $uri/ /index.html;}# 反向代理代理配置location /api/ {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_pass http://xxxx-gateway/;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {#    proxy_pass   http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {#    root           html;#    fastcgi_pass   127.0.0.1:9000;#    fastcgi_index  index.php;#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;#    include        fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {#    deny  all;#}
}

这里主要就是设置nginx服务端口;以及使用到的/api调用后台接口服务的反向代理设置;还有一个静态前端部署文件配置。

Dockerfile

FROM nginx:1.26.2-alpine# 配置文件需要修改
COPY ./nginx.conf /etc/nginx/nginx.conf
COPY ./default.conf /etc/nginx/conf.d/default.conf# 修改 Nginx 相关目录的权限
RUN chown -R nginx:nginx /var/cache/nginx /var/run /var/log/nginx /etc/nginx/conf.d /usr/share/nginx/html# 切换到非 root 用户
USER nginx:nginx# 使用高端口以避免权限问题
EXPOSE 8082# 启动 Nginx
CMD ["nginx", "-g", "daemon off;"]

注意这里使用的是nginx用户和nginx用户组,这个镜像自动这个nginx用户和nginx用户组。不要直接使用root账号,启动nginx容器。

手动构建

# docker正常构建镜像
docker build -t xxxx-nginx .
# docker构建x86镜像
docker buildx build --platform linux/amd64 -t xxxx-nginx .
# docker导出离线镜像
docker save -o xxxx-nginx.tar xxxx-nginx
# docker导入离线镜像
docker load -i xxxx-nginx.tar
# docker启动服务
docker run -d --name xxxx-nginx -v ~/xxx/nginx/html:/usr/share/nginx/html -p 8082:8082 xxxx-nginx
# 添加端口规则
sudo firewall-cmd --zone=public --add-port=8082/tcp --permanent
sudo firewall-cmd --reload

到这里基本就结束了,上述包括手动打镜像,导出镜像,导入离线镜像,docker运行这个自定义nginx容器,并配置防火墙。

总结

基于nginx官方docker镜像,处理静态文件部署和反向代理接口,还是停简单的。羡慕,云原生的开发环境,这些事情都不用处理。

参考


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

相关文章

汽车主机厂主数据管理中一物多码或多码一物问题的具体表现有哪些?

数据入口多导致重复编码 在汽车主机厂的主数据管理中,由于存在多个数据入口,不同部门或环节可能会独立进行数据录入。这就容易出现一物多码或多码一物的情况。例如,采购部门、生产部门、物流部门等可能各自采用不同的编码体系来标识同一种汽…

项目完整开发的流程

流程 1.设计产品 2.写需求文档 2.1需求分析,后端设计数据库,建表,客户沟通,说完签字,留证据,防止后面扯皮,和防止后续变需求重新写业务 3.画原型图,也就是草图,初始的…

排序算法分类及其稳定性

排序算法可分为五类八种 类别 一、插入排序 1、直接插入排序 稳定 先对数组前两个元素进行比较和交换接着后面的元素依次作和前面的元素作比较和交换(插入) 2、希尔排序(shell排序) 不稳定 通过引入增量序列Ri 每次进行等距…

SpringBoot实现:星之语明星周边销售平台开发指南

1系统概述 1.1 研究背景 如今互联网高速发展,网络遍布全球,通过互联网发布的消息能快而方便的传播到世界每个角落,并且互联网上能传播的信息也很广,比如文字、图片、声音、视频等。从而,这种种好处使得互联网成了信息传…

makefile的基本练习

假设有如下目录结构:(目录结构图) 完成以下操作: 1、通过纯命令编写Makefile文件,并发现使用纯命令的不足; 2、在Makefile中,添加变量,简化参数的重复书写; 3、尝试在多目…

【Java】集合中单列集合详解(一):Collection与List

目录 引言 一、Collection接口 1.1 主要方法 1.1.1 添加元素 1.1.2 删除元素 1.1.3 清空元素 1.1.4 判断元素是否存在 1.1.5 判断是否为空 1.1.6 求取元素个数 1.2 遍历方法 1.2.1 迭代器遍历 1.2.2 增强for遍历 1.2.3 Lambda表达式遍历 1.2.4 应用场景 二、…

Win32 API 控制台鼠标操作、坐标获取与相关函数介绍

Win32 API 控制台鼠标操作、坐标获取与相关函数介绍 一、前置介绍读取控制台输入缓冲区数据 ReadConsoleInput 函数控制台输入缓冲区中的输入事件 INPUT_RECORD 结构鼠标输入事件 MOUSE_EVENT_RECORD 结构更改输入模式 SetConsoleMode 函数 二、鼠标坐标获取(以下代码环境为 VS…

Vue vben admin开源库中table组件tips

table如何自定义表头和自定义内容 自定义表头直接使用tittle&#xff0c;自定义内容是customRender {title: (<span><img src{alvchat_avatar} style"width:20px;height:20px;vertical-align:bottom"></img>{t(routes.alerts.columnsAIReview)}<…