首页 > 系统相关 >nginx容器配置方案

nginx容器配置方案

时间:2024-02-11 23:55:09浏览次数:37  
标签:容器 配置文件 配置 sites nginx conf docker

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_logaccess_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指令。

  1. conf.d 目录: conf.d 目录是一个约定的目录,用于存放额外的配置文件。在主配置文件中,会有一行指令来加载 conf.d 目录下的配置文件:
    include /etc/nginx/conf.d/*.conf;
    这意味着 conf.d 目录下的所有以 .conf 结尾的文件都会被加载。

  2. 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为结尾的文件配置使其生效。如果想要关闭某个站点,仅需让此站点的配置文件的后缀变化即可。

标签:容器,配置文件,配置,sites,nginx,conf,docker
From: https://www.cnblogs.com/Leethon-lizhilog/p/18013639

相关文章

  • Vite+Vue3项目如何获取环境配置,并解决前端跨域问题
    步骤根目录新建.env.development和.env.production文件package.json配置启动参数vite命令启动项目时,指定mode参数,加载vite.config.ts文件。"dev":"vite--host0.0.0.0--port8093--modedevelopment","prod":"vite--port8093--host0.0.0.0--modepr......
  • 8小时速成Golang(二)Golang开发环境 环境配置
     Go官网下载地址:https://golang.org/dl/Go官方镜像站(推荐):https://golang.google.cn/dl/Go官网:https://golang.org/ golang在Windows安装和配置可看链接:https://blog.csdn.net/weixin_54626591/article/details/134485077按照步骤一步一步next再配置环境变量即可 golan......
  • 快速初始化容器化Gin项目
    Gin是一个使用Go语言开发的Web框架,追求性能和效率。1、使用Gin快速初始化项目创建项目目录:在命令行中创建一个新目录,用于存放项目文件。然后进入该目录:mkdirmy-gin-democdmy-gin-demo初始化Go模块:在项目目录中运行以下命令以初始化Go模块。这会创建一个go.mo......
  • Kubernetes-Init容器的6个特性
    本文主要从以下4个方面介绍Init容器:Init容器作用、Init容器特性、Init容器与应用容器的区别、Init容器实战。Kubernetes中的Pod内可以运行多个容器,主要分为2种:Init容器、应用容器,Sidecar容器也是一种特殊的Init容器。Init容器的作用Init容器是一种特殊容器,在Pod内的应用容器启......
  • 概念解读-云原生和容器编排
    有些概念没有标准答案,每个地方解释的也都很模糊,概念也一直被滥用,比如说云原生的概念。有些概念听起来高大上,实际上很普通,比如说容器编排的概念。本文我对这两个概念作个解释。1、云原生最近几年,“云原生”一度成为前沿的技术用语,各种业内技术大会都能看到“云原生”的字样,但是......
  • Ubuntu服务器使用 Daphne + Nginx + supervisor部署Django项目
    视频:https://www.bilibili.com/video/BV1e6421G7uM/?vd_source=36191bed2c30378060ff2efe6831b331Django从3.0版开始加入对ASGI的支持,使Django开始具有异步功能。截止目前的5.0版,对异步支持逐步也越来越好,相信在未来的版本中异步将会支持的更加完善。所以说,我们也需要适时的......
  • 虚拟机连接与网络配置问题
    记得刚接触取证那会儿,连最基本的虚拟机连接ssh都不行,现在想想自学网安的一年时间里,从完全不知道的小白到至少简简单单入了个门!学不可以已!接下来的一年,需要花更多的时间,不断学习,不断进步!龙年加油!虚拟机的网络连接问题虚拟机的三种网络配置模式 linux(以Centos为例)网络配......
  • 7.读写配置文件和添加缓存
    感觉没什么好总结的,直接上代码吧:配置文件:1添加一个枚举///<summary>///配置键名///</summary>publicenumConfigKey{///<summary>///系统配置///</summary>SystemConfig,///<summary>......
  • 在k8S中,初始化容器(init container)概念原理是什么?
    在Kubernetes(k8S)中,初始化容器(InitContainer)是一个特殊类型的容器,它会在应用程序容器启动之前运行。它的主要目的是执行一些必要的先决条件任务,这些任务必须在主应用容器开始服务前完成。初始化容器的概念原理如下:顺序执行:Pod中可以定义多个初始化容器,它们按照配置文件......
  • 以容器方式部署通义千问 Qwen
    准备服务器阿里云云服务器实例规格:轻量级GPU实例ecs.vgn6i-m4-vws.xlarge(4vCPU23GiB)磁盘空间:50G操作系统:Ubuntu22.04安装dockeraptinstalldocker.io安装NVIDIAGRID驱动acs-plugin-manager--exec--plugingrid_driver_install安装NVIDIAContainerToo......