nginx容器配置方案
nginx容器配置
可以参考docker官网nginx页面的默认配置
docker-nginx官网how to use image
这里面提供了一些demo,可以帮助我们快速的启动nginx容器,并且除了常规的挂载、端口等基本配置外,还提供了以只读方式启动、以debug模式启动、设置日志等级环境变量等演示。
下文仅是博主根据在云服务搭建nginx时,为了转发和管理nginx软件方便,而做的改造和尝试。
docker-compose.yml
version: '3'
services:
nginx:
image: nginx:latest
ports:
- "80:80"
- "433:433"
volumes:
- ./nginx-conf/conf.d/:/etc/nginx/conf.d/
- ./nginx-logs:/var/log/nginx
- ./nginx-command/:/scripts/
environment:
TZ: Asia/Shanghai
根据这些挂载,不难看出我需要在部署包中放置以下文件
nginx/
|-- docker-compose.yml
|-- nginx-conf/
| |-- conf.d/
| | |--default.conf
|-- nginx-logs/
|-- nginx-command/
简易的运维脚本
使用swarm启动脚本,首先需要将本机器变为stack节点。
docker swarm init
然后就可以用deploy启动了
stack_name='nginx'
docker stack deploy -c docker-compose.yml $stack_name
如果想在容器内,直接reload nginx,那么可以试试下面的脚本
先将test_and_reload_nginx.sh脚本挂在nginx-command下,让其挂载在容器中。
#!/bin/bash
# 检查 nginx 配置是否正确
nginx_test_output=$(nginx -t 2>&1)
# 检查 nginx -t 命令的退出状态
if [ $? -eq 0 ]; then
echo "Nginx configuration test successful."
# 如果测试成功,执行 nginx -s reload
nginx -s reload
echo "Nginx reload!"
else
echo "Nginx configuration test failed."
# 如果测试失败,输出错误信息
echo "$nginx_test_output"
fi
然后在容器外使用下面的指令:
docker exec -it $(docker ps -qf name=nginx_nginx) bash /scripts/test_and_reload_nginx.sh
配置文件挂载及规则
在上述的挂载中,关于nginx的配置,我只挂载了conf.d进去,而目前默认只有一个default.conf的配置文件,而实际上,nginx真正用到nginx文件是有一定加载顺序的。
首先,目录中会有一个主配置文件nginx.conf,实际上nginx默认的容器中默认就是有的,不需要挂载,它主要做了这么几件事:
user nginx;
:指定 Nginx 进程的运行用户。worker_processes auto;
:根据可用的 CPU 核心数量自动设置 worker 进程数量。error_log
和access_log
:配置错误日志和访问日志的路径。events
块:配置与事件处理相关的参数,如worker_connections
。http
块:定义 HTTP 配置,包括 MIME 类型、默认类型、日志格式等。include
指令:引入其他配置文件,如/etc/nginx/mime.types
、/etc/nginx/conf.d/*.conf
和/etc/nginx/sites-enabled/*
。
其中引入其他配置文件就是我们定制化转发的关键,这是一种灵活的配置方式。nginx给我们提供了两种默认的配置方式,都是基于nginx.conf中的include指令。
-
conf.d
目录:conf.d
目录是一个约定的目录,用于存放额外的配置文件。在主配置文件中,会有一行指令来加载conf.d
目录下的配置文件:
include /etc/nginx/conf.d/*.conf;
这意味着conf.d
目录下的所有以.conf
结尾的文件都会被加载。 -
sites-available
目录和sites-enabled
目录:**sites-available
目录包含了所有站点的配置文件,但这些配置文件并不直接生效。它只是一种组织和管理配置文件的方式。sites-enabled
目录包含了实际要生效的站点配置文件的符号链接。这些符号链接指向sites-available
目录下的配置文件。通常,在主配置文件中,会有一行指令来加载sites-enabled
目录下的配置文件:
include /etc/nginx/sites-enabled/*;
这样,sites-enabled
目录下的符号链接都会被加载,实际生效的站点配置因此被包含在 Nginx 配置中。
我则只采取了conf.d的配置方式,原因是,如果我想关闭一个所谓的站点,其实只需要在conf.d对应的配置文件后面加一个.disable
的后缀即可实现。
总结下来就是nginx.conf文件中加载了conf.d文件中的所有以.conf为结尾的文件配置使其生效。如果想要关闭某个站点,仅需让此站点的配置文件的后缀变化即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)