nginx自动部署-跨操作系统

项目里面有一个需求,就是需要用让nginx进程提供给系统管理一个start,stop和getPid方法,这样系统管理可以自动拉起来nginx,达到自动部署的目的。离线部署同样适用

这样一来,我就需要提供windows版本linux不同版本的nginx源码包,windows版本的好办,就直接从官网下载的,我下载的是nginx1.24.0的稳定版本的,linux版本的就需要自己编译源码包了,因为wget下载的nginx首先产物目录就很不一样,我需要就是跟windows差不多的目录结构,便于我写nginx.conf配置文件

window的产物目录如下

linux产物目录如下

linux的这个产物只需要编译一次,后面部署就直接拷贝这个就可以了,编译的过程如下:

官网下载nginx源码,新建一个文件夹叫Nginx

进入到源码目录 

./configure --prefix=新建的产物目录地址
make -j12
make install 

可能中间需要装 pcre库,wget 下载一下好了。

pcre是因为我的nginx配置需要用到正则,就是html下面有不同文件夹,每个文件夹是一个项目,部署的时候有多少个文件夹部署多少个项目。

这个过程比较曲折,首先nginx没有地方写日志是不会启动成功的,所以配置文件需要指定日志的生成位置,还有配置文件的启动位置,pid等

贴一份windows的配置文件:

worker_processes  1;
error_log  D:/code/system/run/nginx/logs/error.log error;
pid        D:/code/system/run/nginx/logs/nginx.pid;
events { worker_connections  1024; 
} 
http { include       mime.types; default_type  application/octet-stream; sendfile        on; keepalive_timeout  65; access_log D:/code/system/run/nginx/logs/access.log; map $_FilePath $_FilePathForUse { "" "index.html"; "/" "index.html";default $filePathFromRemote; }client_body_temp_path D:/code/system/run/nginx/temp/client_temp; proxy_temp_path D:/code/system/run/nginx/temp/proxy_temp; fastcgi_temp_path D:/code/system/run/nginx/temp/fastcgi_temp; uwsgi_temp_path D:/code/system/run/nginx/temp/uwsgi_temp;scgi_temp_path D:/code/system/run/nginx/temp/scgi_temp; server { listen 8090; location /{ gzip on; gzip_static on; root  D:/code/system/run/nginx/html/; add_header X-URI-Part1 $1; add_header X-URI-Part2 $2; add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Credentials' 'true'; set $module $1; set $filePathFromRemote $2; set $_FilePath "$filePathFromRemote"; } error_page 500 502 503 504 /50x.html; } server { listen 9000; location / {  root  D:/code/system/run; autoindex on;  add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Headers X-Requested-With;  add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;  }  } 
} 

两个server是因为还用到了nginx做文件服务

linux版本的配置文件:

  worker_processes  1;error_log  ${ROOT_DIR}/run/nginx/logs/error.log error;pid         ${ROOT_DIR}/run/nginx/logs/nginx.pid;events {worker_connections  1024;}http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;access_log  ${ROOT_DIR}/run/nginx/logs/access.log; map $_FilePath $_FilePathForUse {"" "index.html";"/" "index.html";default $filePathFromRemote;}client_body_temp_path ${ROOT_DIR}/run/nginx/client_temp;proxy_temp_path ${ROOT_DIR}/run/nginx/proxy_temp;fastcgi_temp_path ${ROOT_DIR}/run/nginx/fastcgi_temp;uwsgi_temp_path ${ROOT_DIR}/run/nginx/uwsgi_temp;scgi_temp_path ${ROOT_DIR}/run/nginx/scgi_temp;server {listen 8090;server_name localhost;location ~ ^/([^/]+)(/?.*)$ {root  ${ROOT_DIR}/run/nginx/html/;add_header 'Access-Control-Allow-Origin' '*';add_header 'Access-Control-Allow-Credentials' 'true';set $module $1;set $filePathFromRemote $2;set $_FilePath "$filePathFromRemote";}error_page 500 502 503 504 /50x.html;location = /50x.html {root ${ROOT_DIR}/run/nginx/html;}}server {listen 9000;server_name localhost;location / {root ${ROOT_DIR}/run;autoindex on;add_header Access-Control-Allow-Origin *;add_header Access-Control-Allow-Headers X-Requested-With;add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;}}}

这两个配置文件的生成是通过脚本自动写入的,用到了各自系统的环境变量

下面就是启动程序了

start方法

#ifdef _WIN64cmd = fmt::format("{}/nginx/nginx -c {}/nginx/conf/nginx.conf -e {}/nginx/logs/error.log",根目录,根目录);#endif #ifdef __linux__cmd = fmt::format("{}/nginx/sbin/nginx -c {}/nginx/conf/nginx.conf -e {}/nginx/logs/error.log",根目录,根目录,根目录);#endif

大概就是通过命令行启动nginx进程,涉及到一些公司里面封装的底层方法,就不方便写了。。

stop方法同理

getPid方法比较复杂,nginx每次启动成功都会往nginx.pid文件写入一个进程号,需要把文件读出来然后返回出去,而且需要自己判断进程是不是存活,不能返回一个没有启动的进程出去。

启动成功之后浏览器输入当前机器的ip地址:8090就能访问到内容

系统管理界面可以管理nginx的启停

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

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

相关文章

解决Vue devtools插件数据变化不会自动刷新

我们使用devtools插件在监测vuex中表单或自定义组件的数据,发现页面数据发生变化后,但是devtools中还是老数据,必须手动点击devtools刷新才能拿到最新的数据。很烦! 解决方案: 打开chrome的设置,向下翻&…

JavaEE企业级开发中常用的Stream流

介绍 在Java编程中,Stream流是Java 8引入的一个重要概念,它提供了一种新的处理集合的方式,可以更加简洁、高效地进行数据操作。Stream流支持各种常见的操作,比如过滤、映射、排序、聚合等,同时也支持并行处理&#xf…

自学错误合集--MessageSource国际化接口

java后端自学错误总结 一.MessageSource国际化接口总结 一.MessageSource国际化接口 今天第一次使用MessageSource接口,比较意外遇到了一些坑 messageSource是spring中的转换消息接口,提供了国际化信息的能力。MessageSource用于解析 消息,并支持消息的…

软件项目管理期末复习题8-16章

第八章软件项目质量计划 一、填空题 1、(审计)是对过程或产品的一次独立质量评估。 2、质量成本包括预防成本和(缺陷成本)。 3、(软件质量)是软件满足明确说明或者隐含的需求的程度。 5、McCall质量模…

【华为】IPSec VPN手动配置

【华为】IPSec VPN手动配置 拓扑配置ISP - 2AR1NAT - Easy IPIPSec VPN AR3NATIPsec VPN PC检验 配置文档AR1AR2 拓扑 配置 配置步骤 1、配置IP地址,ISP 路由器用 Lo0 模拟互联网 2、漳州和福州两个出口路由器配置默认路由指向ISP路由器 3、进行 IPsec VPN配置&…

数据的输入和输出

早期的总线系统 为了解决通信的问题、主板上铺设了一条公共线路、各个设备都连接到这条线路上、不管谁要和谁通信、都能使用它来传输、这条线路就是总线。 总线上有CPU、内存、鼠标、键盘、硬盘、网卡、声卡、显卡等… 说是一条总线、实际上是包含了传输数据的数据总线、传输…

场景文本检测识别学习 day09(Swin Transformer论文精读)

Swin Transformer Swin Transformer 提出ViT具有两个缺点: 1. 没有多尺度特征 ,不能生成多尺度的特征图传给FPN (检测) \ U-Net (分割),从而对于不同大小的物体都能进行良好感知,即只有16 * 16的patch尺寸 2. 全局计算自注意力浪…

大模型LLM:最清晰解读提示工程(Prompt Engineering)

提示工程(Prompt Engineering),也称为上下文提示,是一种通过不更新模型的权重/参数来引导LLM行为朝着特定结果的方法。这是与AI有效交流所需结果的过程。提示工程可以用于各种任务,从回答问题到算术推理乃至各种应用领…

【触摸案例-手势解锁案例-按钮高亮 Objective-C语言】

一、我们来说这个self.btns,这个问题啊,为什么不用_btns, 1.我们说,在懒加载里边儿,经常是写下划线啊,_btns,为什么不写,首先啊,这个layoutSubviews:我们第一次,肯定会去执行这个layoutSubviews: 然后呢,去懒加载这个数组, 然后呢,接下来啊,走这一句话, 第一次…

邮件系统国产化,保障企业信息安全的重要举措

随着信息技术日益发展和成熟,企业信息化建设深入推进,企业信息化管理能力大幅提升,其中邮件系统在企业信息化建设中扮演着至关重要的角色。然而,长期以来,我国企业在邮件系统方面主要依赖于国外的产品,这不…

win11安装SQL Server 2012 企业版

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、硬件要求二、软件安装参考&#xff1…

在windows下使用VS Code、CMake、Make进行代码编译

软件环境 Windows11VS CodeNoneCMake3.26.4-windows-x86_64MinGWNone 电脑系统配置 安装MinGW将MinGW安装文件夹中bin文件夹下的mingw32-make.exe复制并重命名为make.exe在文件夹中添加系统路径,具体位置为 系统->系统信息->高级系统设置->高级->环境…

Linux运维:centos环境变量

前言 在 Linux 运维工作中,管理环境变量是至关重要的一项任务。在 CentOS 环境下,正确配置环境变量可以使系统更加高效和易于管理。 本文将重点讨论 CentOS 环境下的环境变量设置,并就python的环境变量配置方案进行讲解(不包含Ano…

YOLOv9中模块总结补充|SPPELAN

专栏相关代码:目前售价售价69.9,改进点80 专栏介绍:YOLOv9改进系列 | 包含深度学习最新创新,助力高效涨点!!! 1. SPPELAN SPPELAN是YOLOv9作者在SPPF的基础上创新的模块(增加了一次…

基于STM32F401RET6智能锁项目(环境搭建)

工程搭建 MDK,固件库,芯片包下载 下载keil5,stm32f4xx的固件库以及stm32f4的芯片包 keil官网:https://www2.keil.com/mdk5/ stm32中国官网:https://www.stmcu.com.cn/ 创建工程 1、新建一个工程文件夹,…

【勘误】一个错误的快速排序实现

文章目录 问题一&#xff1a;不一致算法描述部分给出的分划实现完整程序部分给出的分划实现 问题二&#xff1a;不正确问题三&#xff1a;把循环条件改为 i < j 程序还是不正确正确的实现总结 从 10 10 10 年前我开始学 C 语言时我就认为快速排序并不是个简单的算法。相比于…

系统权限控制插件封装-实现系统权限控制插件化

背景&#xff1a;按照传统的开发方式方式&#xff0c;每次新开发一个系统&#xff0c;就需要花费大量时间精力去搭建权限控制模块&#xff0c;如果我们把权限控制这一整个模块都抽离成一个独立的权限控制插件&#xff0c;支持单命令安装&#xff0c;全面暴露参数与方法&#xf…

k8s 理论知识基本介绍

目录 一 k8s 理论前言 &#xff08;一&#xff09;微服务是什么 1&#xff0c;应用场景 2&#xff0c;API 是什么 &#xff08;二&#xff09;&#xff0c;微服务 如何做版本迭代 1. Docker镜像构建 2. 版本标记 3. Docker Registry 4. 环境一致性 5. 滚动更新…

多进程编程

创建一对父子进程&#xff1a; 父进程负责向文件中写入 长方形的长和宽 子进程负责读取文件中的长宽信息后&#xff0c;计算长方形的面积 代码&#xff1a; #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #inc…

串口通信---了解

1 串口接线方式 RXD&#xff1a;数据输入引脚&#xff0c;数据接受&#xff1b;STC89系列对应P3.0口 TXD&#xff1a;数据发送引脚&#xff0c;数据发送&#xff1b;STC89系列对应P3.1口 接线方式 串口编程要素 输入/输出数据缓冲器叫做SBUF&#xff0c;都用99H地址码&#x…