Nginx模板自动化

news2025/1/12 13:50:28

背景

在日常工作中,我们经常需要创建Nginx配置文件的模板,以便在不同的环境中快速部署和配置Nginx服务器。然而,这样的任务通常需要重复性高、耗时长,且容易出错。为了加快这些任务的完成,并提高工作效率,可以使用一些自动化工具来简化Nginx配置文件的生成和管理。

其中,一种常见的方法是使用基于文本替换的模板引擎,如Jinja2、Mustache等,将Nginx配置文件中的变量替换为实际的值。例如,可以将配置文件中的端口号、域名、SSL证书路径等信息作为变量,在部署时再根据实际情况进行替换,从而快速生成满足需求的Nginx配置文件。此外,还可以使用版本控制工具(如Git)来对Nginx配置文件进行管理,并利用CI/CD工具(如Jenkins)自动构建和部署Nginx服务器。

通过自动化工具的使用,可以大大提高Nginx服务器的配置效率和准确性,并更好地适应不同环境下的需求。

1、需求

开发部门 不定期会更新新的项目上线,会用到域名绑定服务器 进行暴露。

流程

  1. 开发部门提出域名订单需求,包括需要绑定的域名和相应的服务器地址。
  2. 运维部门在DNS管理控制面板中添加DNS解析记录,将需要绑定的域名解析到相应的服务器IP地址。
  3. 运维部门在Nginx配置中创建新的server块,配置要绑定的域名和相应的站点信息,例如文档根目录、日志文件、SSL证书等。
  4. 运维部门将Nginx配置文件中的变量和实际的服务器地址进行替换,例如替换$server_name变量为实际要绑定的域名。
  5. 运维部门重载或重新启动Nginx服务,使新的配置生效。
  6. 最终,域名解析到相应的服务器地址,并由Nginx正确地将请求路由到相应的站点。
    在这里插入图片描述

2、kubernetes+ingress实战

1、转发kubernetes的ingress

kubernetes-cluster.conf

upstream kubernetes-cluster {
  server 192.168.82.42 weight=5;
  keepalive 16;
}

2、域名配置

ogateway-uat.xxxx.net.conf

server {
        listen       80;
        server_name   ogateway-uat.xxxx.net;
        rewrite ^/(.*)$ https://$host/$1 permanent;
        # IP白名单
        include /usr/local/openresty/nginx/whitelist/corporation.conf;
    
}
server {
        listen       443 ssl;
        server_name   ogateway-uat.xxxx.net;


        ssl                   on;
        ssl_certificate      /usr/local/openresty/nginx/ssl/xxx.net.crt;
        ssl_certificate_key  /usr/local/openresty/nginx/ssl/xxx.net.key;
        include ssl.conf;
        # IP白名单 放开时间0920-0930
        include /usr/local/openresty/nginx/whitelist/corporation.conf;
        location / {
            proxy_pass  http://kubernetes-cluster;
        include https_proxy.conf;
        }
}

3、反向代理

server {
        listen       80;
        server_name  customer-uat.xxxxx.com;
        # IP白名单
        include /usr/local/openresty/nginx/whitelist/corporation.conf;
        
        rewrite ^/(.*)$ https://$host/$1 permanent;
}
server {
        listen       443 ssl;
        server_name  customer-uat.xxxx.com;
        # IP白名单
        include /usr/local/openresty/nginx/whitelist/corporation.conf;

        ssl                   on;
        ssl_certificate      /usr/local/openresty/nginx/ssl/xxxx.com.crt;
        ssl_certificate_key  /usr/local/openresty/nginx/ssl/xxxxx.com.key;
        include ssl.conf;

        location / {
            proxy_pass  http://192.168.102.202;
            include proxy.conf;
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Forwarded-HTTPS on;
            add_header Front-End-Https on;
        }
}

4、负载轮询代理

upstream xxxx-backend-uat {
     #server 192.168.99.147:1201;
     server 192.168.82.42;
}
server {
    listen 80;
    server_name inhouse-xxxx-uat.xxxx.com;
    include /usr/local/openresty/nginx/whitelist/corporation.conf;

	location / {
        proxy_pass  http://xxxx-backend-uat;
        include http_proxy.conf;
    }
}
server {
    listen 443 ssl;
    server_name xxxx-backend-uat.xxxx.com;
    include /usr/local/openresty/nginx/whitelist/corporation.conf;

    ssl                   on;
    ssl_certificate      /usr/local/openresty/nginx/ssl/xxxx.com.crt;
    ssl_certificate_key  /usr/local/openresty/nginx/ssl/xxxx.com.key;
    include ssl.conf;

    location / {
        proxy_pass  http://xxxx-backend-uat;
        include http_proxy.conf;
    }
}

5、自动化处理

add_nginx.sh

#!/bin/bash

#日志级别 debug-1, info-2, warn-3, error-4, always-5
LOG_LEVEL=1

#日志名称
job_name=add_nginx

#脚本目录
script_dir=/opt

#日志文件
LOG_FILE=./${job_name}.log

#调试日志
function log_debug() {
	content="[DEBUG] $(date '+%Y-%m-%d %H:%M:%S') $@"
	[ $LOG_LEVEL -le 1 ] && echo $content >>$LOG_FILE && echo -e "\033[32m" ${content} "\033[0m"
}
#信息日志
function log_info() {
	content="[INFO] $(date '+%Y-%m-%d %H:%M:%S') $@"
	[ $LOG_LEVEL -le 2 ] && echo $content >>$LOG_FILE && echo -e "\033[32m" ${content} "\033[0m"
}
#警告日志
function log_warn() {
	content="[WARN] $(date '+%Y-%m-%d %H:%M:%S') $@"
	[ $LOG_LEVEL -le 3 ] && echo $content >>$LOG_FILE && echo -e "\033[33m" ${content} "\033[0m"
}
#错误日志
function log_err() {
	content="[ERROR] $(date '+%Y-%m-%d %H:%M:%S') $@"
	[ $LOG_LEVEL -le 4 ] && echo $content >>$LOG_FILE && echo -e "\033[31m" ${content} "\033[0m"
}
#一直都会打印的日志
function log_always() {
	content="[ALWAYS] $(date '+%Y-%m-%d %H:%M:%S') $@"
	[ $LOG_LEVEL -le 5 ] && echo $content >>$LOG_FILE && echo -e "\033[32m" ${content} "\033[0m"
}

function get_Whitelist() {
	# 提示用户输入选项
	echo "1. 使用白名单"
	echo "2. 不使用白名单"

	# 获取用户输入
	read -p "请选择要使用白名单配置:" choice_whitelist

	# 使用case语句根据用户选择设置变量
	case $choice_whitelist in
	1)
		use_whitelist=true
		;;
	2)
		use_whitelist=false
		;;
	*)
		echo "错误:请输入正确的选项" >&2
		exit 1
		;;
	esac

}

function set_whitelist() {
  if [ "$use_whitelist" = true ]; then
    log_info "已经设置IP白名单"
    sed -i -r 's/^(\s*)#(.*include\s*\/usr\/local\/openresty\/nginx\/whitelist\/corporation\.conf;.*)$/\1\2/g' "$conf_file"
  else
    log_info "不使用IP白名单"
  fi
}

function check_nginx() {
	conf_file="/chen/company_shell/$realm_name.conf"
	# 检查Nginx配置文件
	if nginx -t >/dev/null 2>&1; then
		echo "Nginx configuration test passed."
	else
		echo "Nginx configuration test failed. Please check your configuration file."
		exit 1
	fi
}

function kubernetes_nginx() {
	re_301='rewrite ^/(.*)$ https://$host/$1 permanent;'
	tld=$(echo "$realm_name" | sed -E 's/.*\.([^.]+\.[^.]+)$/\1/')
	cat >$realm_name.conf <<EOF
server {
        listen       80;
        server_name  $realm_name;
	# IP白名单
        #include /usr/local/openresty/nginx/whitelist/corporation.conf;
        $re_301
}
server {
        listen       443 ssl;
        server_name  $realm_name;
        ssl                   on;
        ssl_certificate      /usr/local/openresty/nginx/ssl/$tld.crt;
        ssl_certificate_key  /usr/local/openresty/nginx/ssl/$tld.key;
        include ssl.conf;
	# IP白名单
        #include /usr/local/openresty/nginx/whitelist/corporation.conf;

        location / {
           proxy_pass  http://kubernetes-cluster;
           include https_proxy.conf;
        }
}
EOF
}

function proxy_nginx() {
	read -p "设置反向代理(列如:http://172.18.199.115):" proxy_ip
	re_301='rewrite ^/(.*)$ https://$host/$1 permanent;'
	tld=$(echo "$realm_name" | sed -E 's/.*\.([^.]+\.[^.]+)$/\1/')
	cat >$realm_name.conf <<EOF
server {
        listen       80;
        server_name  $realm_name;
	    $re_301
	
	# IP白名单
        #include /usr/local/openresty/nginx/whitelist/corporation.conf;
}
server {
        listen       443 ssl;
        server_name  $realm_name;

	# IP白名单
        #include /usr/local/openresty/nginx/whitelist/corporation.conf;

        ssl                   on;
        ssl_certificate      /usr/local/openresty/nginx/ssl/$tld.crt;
        ssl_certificate_key  /usr/local/openresty/nginx/ssl/$tld.key;
        include ssl.conf;

        location / {
        	proxy_pass  $proxy_ip;
		include https_proxy.conf;
        }
}
EOF
}

function upstream_nginx() {
	pass
}

# 定义函数:生产域名
function set_kubernetes_nginx() {
	# TODO: 在这里实现生产域名的操作
	log_info "开始配置nginx模板"
	read -p "请输您的域名:  " realm_name
	log_info "域名记录: $realm_name"
	get_Whitelist
	kubernetes_nginx
	# 输出变量值
	set_whitelist
	#配置文件校检
	check_nginx
}

function set_reverse_proxy_nginx() {
	# TODO: 在这里实现生产域名的操作
	log_info "开始配置nginx模板"
	read -p "请输您的域名:  " realm_name
	log_info "域名记录: $realm_name"
	get_Whitelist
	proxy_nginx
	# 输出变量值
	set_whitelist
	#配置文件校检
	check_nginx
}

function set_upstream_proxy_nginx() {
	# TODO: 在这里实现生产域名的操作
	log_info "开始配置nginx模板"
	read -p "请输您的域名:  " realm_name
	log_info "域名记录: $realm_name"
	get_Whitelist
	upstream_nginx
	# 输出变量值
	set_whitelist
	#配置文件校检
	check_nginx
}

# 定义主函数
function main() {
	# 显示菜单
	echo "请选择一个选项:"
	echo "1. kubernetes接入"
	echo "2. 反向代理接入"
	echo "3. 负载均衡接入"

	# 读取用户输入
	read -p "请输您的选择:  " choice

	# 根据用户输入选择对应的操作
	case $choice in
	1) set_kubernetes_nginx ;;
	2) set_reverse_proxy_nginx ;;
	3) set_upstream_proxy_nginx ;;
	*) echo "无效的选项,请重新输入" ;;
	esac

}

# 调用主函数
main

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/419885.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C/C++开发,认识opencv各模块

目录 一、opencv模块总述 二、opencv主要模块 2.1 opencv安装路径及内容 2.2 opencv模块头文件说明 2.3 成熟OpenCV主要模块 2.4 社区支持的opencv_contrib扩展主要模块 2.5 关于库文件的引用 一、opencv模块总述 opencv的主要能力在于图像处理&#xff0c;尤其是针对二维图…

字节8年测试经验,送给想要学习自动化测试的同学6条建议

我的职业生涯开始和大多数测试人一样&#xff0c;开始接触都是纯功能界面测试。那时候在一家电商公司做测试&#xff0c;做了有一段时间&#xff0c;熟悉产品的业务流程以及熟练测试工作流程规范之后&#xff0c;效率提高了&#xff0c;工作比较轻松&#xff0c;也得到了更好的…

QML控件--Dial

文章目录一、控件基本信息二、控件使用三、属性成员四、成员函数五、信号一、控件基本信息 Import Statement&#xff1a;import QtQuick.Controls 2.14 Since&#xff1a;Qt 5.7 Inherits&#xff1a;Control 二、控件使用 Dial&#xff1a;是一个旋钮控件&#xff1b; im…

【权限维持】黄金白银票据隐藏账户C2远控RustDeskGotoHTTP

文章目录内网域&单机版-权限维持-基于用户-隐藏用户内网域-权限维持-基于服务TGT-黄金白银票据黄金方法&#xff1a;白银方法&#xff1a;内网域-权限维持-基于软件-GotoHTTP&RustDesk—无需安装C2 GotoHTTPC2 RustDesk 推荐内网域&单机版-权限维持-基于用户-隐藏用…

Plist文件是什么?

plist 文件是一种用于存储应用程序配置信息的文件格式&#xff0c;其中包含应用程序的各种设置和数据。在过去&#xff0c;plist 文件通常是以.plist 格式存储的。然而&#xff0c;随着时间的推移&#xff0c;人们开始使用.plistx 格式来存储更复杂的数据结构和数据。如果您需要…

MySQL日期时间函数汇总、时间格式转换方法

MySQL日期时间函数汇总、时间格式转换方法时间函数日期时间格式转换date_format函数EXTRACT()DATE_ADD()DATE_SUB()DATEDIFF函数时间函数 函数描述NOW()返回当前的日期和时间CURDATE()返回当前的日期CURTIME()返回当前的时间DATE()返回日期或日期/时间表达式的日期部分HOUR()获…

【遗传算法、粒子群、改进遗传算法】基于智能算法的电力系统电网最优规划方案的研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【从零开始学Skynet】工具篇(一):Ubuntu16.04环境搭建

一、Ubuntu系统下载 为了初学者使用方便&#xff0c;我们下载的是Ubuntu16系统的桌面版本&#xff1a;下载地址 二、VirtualBox虚拟机下载 去Virtualbox官网下载:Downloads – Oracle VM VirtualBox 点击这里进行下载&#xff0c;下载完之后点击客户端进行安装&#xff0c;安装…

ros2-foxy windows下安装流程

1.系统要求 本手册安装环境为win10 x64 请确保已在系统路径中安装PowerShell。 请确保网络的通畅性 2.环境安装部分 安装Chocolatey 方案1&#xff1a; 复制以下命令行&#xff0c;使用管理员权限打开PowerShell&#xff0c;复制粘贴大法到PowerShell&#xff0c;安装好ch…

YC-A11(原创)基于springboot,vue网上商城

绪论 课题的开发背景 随着计算机和网络的快速发展&#xff0c;并且越来越普及&#xff0c;互联网日益成为人们收集信息常用渠道&#xff0c;电子商务开始流行&#xff0c;一种全新的理念不断形成并且快速发展&#xff0c;像国内电商巨头淘宝、京东、苏宁易购、唯品会等电商平台…

筑牢合规营销“防火墙”,助力四环医药实现合规营销管理能力全面进阶 | 案例研究

四环医药控股集团有限公司&#xff08;以下简称“四环医药”&#xff09;是一家集药品研发、生产和销售于一体的集团化医药企业&#xff0c;公司现拥有心脑血管疾病、肝病治疗、提高机体免疫机能、代谢及抗感染等多领域100品种。四环医药强大的营销体系及独特营销模式确保了自身…

会画画的海龟,Python Turtle库详解(27)

小朋友们好&#xff0c;大朋友们好&#xff01; 我是猫妹&#xff0c;一名爱上Python编程的小学生。 欢迎和猫妹一起&#xff0c;趣味学Python。 今日主题 介绍下Python的turtle库&#xff0c;这是一个可以画画的库&#xff0c;非常适合小孩子在屏幕上画画。 先学习基础知…

Python入门教程+项目实战-9.4节: 字符串的格式化

目录 9.4.1 理解格式化 9.4.2 使用f-string进行格式化 9.4.3 使用格式化符号进行格式化 9.4.4 使用format方法进行格式化 9.4.5 知识要点 9.4.6 系统学习python 9.4.1 理解格式化 同学们比较熟悉的是磁盘格式化&#xff0c;将磁盘格式化以后&#xff0c;磁盘中的文件全部…

第10章_多线程

第10章_多线程 讲师&#xff1a;尚硅谷-宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.com 本章专题与脉络 我们之前学习的程序在没有跳转语句的情况下&#xff0c;都是由上至下沿着一条路径依次执行。现在想要设计一个程序…

Spring概述及IoC,DI的理解

目录 一、Spring 是什么&#xff1f; 1.1 什么是容器&#xff1f; 1.2 如何理解IoC&#xff1f; 1.3 理解Spring Ioc 1.4 DI是什么 1.5 回顾IoC&#xff0c;DI 1.6 IoC和DI的对比 一、Spring 是什么&#xff1f; 我们通常所说的 Spring 指的是 Spring Framework&#x…

不会写代码也能做自动化?推荐一款自动化测试神器

在软件测试这条道路上&#xff0c;大部分的职业技能发展道路都会是纯业务手工测试→自动化测试→性能测试→安全测试/测试开发。 但是却有着一部分人起初进入软件测试这一行看重的就是软件测试属于IT行业&#xff0c;门槛比较低&#xff0c;不需要代码基础。 这就导致了这一部…

数据库系列之MySQL线程ID和操作系统线程ID对应关系

在日常运维工作中&#xff0c;MySQL数据库服务器出现SQL语句执行导致服务器CPU使用率突增&#xff0c;如何通过现有手段快速定位排查到哪个SQL语句&#xff0c;并采取应急措施。本文介绍基于传统的操作系统线程的CPU使用监控手段入手&#xff0c;利用操作系统线程ID和MySQL线程…

Leetcode.1631 最小体力消耗路径

题目链接 Leetcode.1631 最小体力消耗路径 Rating &#xff1a; 1948 题目描述 你准备参加一场远足活动。给你一个二维 rows x columns的地图 heights&#xff0c;其中 heights[row][col]表示格子 (row,col)(row, col)(row,col) 的高度。一开始你在最左上角的格子 (0,0)(0, 0)…

8.Java面向对象---类、属性和方法

Java面向对象—类、属性和方法 在生活中&#xff0c;说到类&#xff0c;可以联想到类别&#xff0c;同类&#xff0c;会想到一类人&#xff0c;一类事物等等。而这一类人或事物都是具有相同特征或特点和行为的&#xff0c;我们根据不同的特征或特点和行为将他们归类或分类。同…

ActiveReportsJS 4.0 FIX ActiveReportsJS 4.0 Crack

JavaScript 报告工具是一组用于数据整合和可视化的 Web 组件。ActiveReportsJS 是前端开发人员用来在 Web 应用程序中嵌入报告的解决方案。报表设计器和查看器组件、强大的数据可视化器和丰富的 API 等主要功能使 ActiveReportsJS 成为行业领导者。 JavaScript 报告引擎 利用强…