二、企业级架构之Nginx

news2025/1/16 13:48:13

一、Nginx的重装与升级

1、为什么需要重装与升级:

在实际业务场景中,需要使用软件新版本的功能、特性,就需要对原有软件进行升级或者重装操作。

Nginx:1.12版本 → 1.16版本

2、Nginx重装:

第一步:停止Nginx软件;

第二步:删除/usr/local/nginx文件夹;

第三步:下载Nginx-1.16重新进行配置、编译以及安装。

缺点:在重装升级的过程中,需要停止目前线上正在运行的业务。

3、Nginx平滑升级:

(1) 什么是平滑升级:

平滑升级就是在不停止业务的前提下,实现对Nginx软件版本的升级。

(2) 信号参数:

kill 命令:用于向进程发送信号,这些信号可以被进程捕获并根据需要作出响应。

kill -信号命令 pid

常见信号:

● TERM, INT:停止处理当前请求并立即退出;

● QUIT:优雅退出,执行完当前的请求后退出;

● HUP:重新加载配置文件,使用新的配置文件启动新worker进程,并优雅的关闭旧的worker进程;

● USR1:重新打开日志文件;

● USR2:平滑的升级nginx二进制文件 拉起一个新的主进程,不停止旧的主进程;

● WINCH:优雅的关闭worker进程。

4、nginx平滑升级操作:

第一步:安装Nginx-1.16,同时启动Nginx-1.16与Nginx-1.12;

第二步:关闭Nginx-1.12的worker进程;

第三步:优雅的关闭旧版本Nginx-1.12的master进程。

master进程

        -- worker进程

        -- worker进程

(1) 停止正在运行的nginx,使用原生的方法重新启动nginx:

查看当前nginx的版本信息:

停止nginx:

systemctl stop nginx 或 /usr/local/nginx/sbin/nginx -s stop

重新启动nginx:

cd /usr/local/nginx

sbin/nginx -c /usr/local/nginx/conf/nginx.conf

(2) 上传Nginx-1.16,解压后进行配置、编译和安装:

tar -zxf nginx-1.16.0.tar.gz
cd nginx-1.16.0

./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module

make && make install

同时安装了Nginx-1.12与Nginx-1.16版本,在/usr/local/nginx/sbin目录下会产生两个nginx主程序文件:

现在本机上提供服务的仍然是老版本:

(3) 基于老版本的nginx进程,启动一个新进程:

查看老版本进程号:

启动新进程:

kill -USR2 旧版本Nginx master的进程ID

(4) 关闭老版本master进程下的worker进程:

kill -WINCH 旧版本Nginx master的进程ID

此时老版本的master进程下已经没有worker进程:

(5) 关闭老版本的master进程,完成版本切换:

kill -QUIT 旧版本Nginx master的进程ID

此时查看本机上提供nginx服务的版本已变成1.16.0:

二、Nginx配置文件

Nginx配置文件:/usr/local/nginx/conf/nginx.conf

worker_processes 1; #nginx启动后的worker进程数

events {
    worker_connections 1024; #worker进程最大连接数
}


http {
    include mime.types; #包含nginx可以处理的文件类型
    default_type application/octet-stream;
    sendfile on;
    keepalive_timeout 65;

    server {
        listen 80; # 监听端口
        server_name localhost; # 域名,localhost代表本机

        # location /代表匹配所有链接
        location / {
            root html; #代表项目资源存放的位置 /usr/local/nginx/html
            index index.html index.htm; #项目的默认首页
        }

        # 添加PHP文件支持,如果访问的链接地址中,包含以.php为后缀的链接自动转向phpfpm
        location ~ \.php$ {
            root html;
            fastcgi_pass 127.0.0.1:9000; #把.php请求全部转向到php-fpm,本机的9000端口
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }

        # 当访问遇到错误时,返回50x.html页面给用户
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root html;
        }

    }

}

三、Server区块配置(虚拟主机)

1、基于域名配置虚拟主机:

在nginx.conf配置文件中,添加一个www.devops.com的虚拟主机。

(1) 编辑nginx.conf配置文件:

每行配置编写完成之后注意加上分号 ;

http {
    server {
    listen 80;
    server_name www.devops .com; #域名
    root html/devops; #资源路径

    location / {
        index index.html index.htm index.php;
    }

    location ~ php$ {
        fastcgi_pass127.0.0.1:9000;
        fastcgi_indexindex .php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        }

    }

    server {}
}

(2) 域名解析:

在Windows中,配置hosts本地的DNS文件,解析www.devops.c om域名。

win + R → drivers → 打开etc目录下的hosts文件:

10.1.1.10 www.devops.com

(3) 创建默认页面:

在/usr/local/nginx/html下创建devops文件夹,然后在其目录下创建index.html文件:

(4) 重载nginx:

设置完成后,重新加载nginx.conf配置文件:systemctl reload nginx

(5) include 插入配置:

可以通过include + 配置文件的路径将该虚拟主机插入到当前配置文件中,例如:

如果有多个虚拟主机需要插入,可以使用通配符统一加载:

把所有的虚拟主机的配置文件.conf都放入到extra目录下:include extra/*.conf;

2、基于IP的虚拟主机:

基于IP的虚拟主机允许单个物理服务器基于不同的IP地址来提供多个独立的网站或服务。

(1) 网卡绑定多个IP:
先关闭NetworkManager:

systemctl stop NetworkManager

systemctl disable NetworkManager

使用ifcong为ens33临时绑定一个虚拟网卡IP:ifconfig ens33:1 10.1.1.100

(2) 建一个虚拟主机,绑定虚拟网卡IP:

编写配置文件,完成后重载nginx。

http {

    server {
        listen 80;
        server_name 10.1.1.100;
        root html/devops;

        location / {
            index index.html index.htm;
        }
    }

    server {
        listen 80;
        server_name 10.1.1.10;

        root html;
        location / {
            index index.html index.htm;
        }
    }
}

3基于端口的虚拟主机:

通过不同的端口号来区分不同虚拟主机。一个服务器实例可以监听多个端口,并根据请求到达的端口号来提供不同的网站或服务。

编写配置文件后重载nginx。

http {
    server {
        listen 8080;
        server_name localhost;
        root html/devops;

        location / {
            index index.html index.htm;
        }
    }

    server {
        listen 80;
        server_name localhost;
        root html;

        location / {
            index index.html index.htm;
        }
    }
}

四、DSShop商城系统上线部署

1、配置nginx.conf文件:

配置完毕后重载nginx。

server {
    listen 80;
    server_name www.shop.com;
    root /home/www/public;

    location / {
        index index.html index.htm index.php;
    }

    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

2配置hosts文件:

10.1.1.10 www.shop.com

3、创建项目目录:

mkdir /home/www

项目目录下添加一个demo.php测试虚拟主机是否可用:

4、上传dsshop.zip并解压:

上传到/home/www目录

unzip dsshop.zip

5、更改nginx.conf虚拟主机配置

使用ThinkPHP或Laravel等现代PHP框架开发Web项目时,建议将Web服务器的根目录(root)指向项目的public文件夹,public文件夹通常包含项目的入口文件(如index.php),以及前端资源文件(如CSS、JS、图片等)。

将Nginx或其他Web服务器的根目录指向这个文件夹可以确保只有这些公共可访问的文件能够被外部请求所访问。

更改nginx.conf虚拟主机配置,将root指向项目目录的public文件。

6、根据提示安装DSShop商城系统:

更改目录权限:

cd /home/www

chmod -R a+w public
chmod -R a+w runtime
chmod a+w application/database.php

7、定制重写规则:

伪静态页面是为了网站推广和SEO效果最大化,将动态页面伪装成静态页面的一种技术。伪静态页面并不是真正存在的页面,而是URL重写(URL rewrite)的一种应用。当用户访问一个伪静态页面时,服务器会根据配置好的规则,动态地生成对应的内容并返回给用户,但在用户的浏览器地址栏中显示的是静态页面的URL。

修改nginx.conf:

#当用户访问网站的根URL时,请求将被重定向到/index.php

location =/ {
        rewrite / /index.php redirect;
}

#先匹配项目的默认资源,如果请求的资源不存在,执行括号里的指令
#匹配以 /index.php/ 开头,并后面跟着任何内容的URL。如果原始URL是 /index.php/some/path,重写后的URL将是 /index.php?s=/some/path。

location / {
    index index.html index.htm index.php;
    if (!-e $request_filename) {
        rewrite ^/index.php/(.*)$ /index.php?s=/$1 last;
        break;
    }
}

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

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

相关文章

linux操作系统的进程状态

这个博客只是为了自己复习用的!!! 冯诺依曼体系结构 计算机是由一个一个硬件组成的 输入设备:键盘,鼠标,扫描仪,写板等等 中央处理器(CPU):含有运算器和控制器等 输出单…

Vue-05

v-model 应用于其他表单元素 常见的表单元素都可以用v-model绑定关联 → 快速获取或设置表单元素的值 它会根据控件类型自动选取正确的方法来更新元素 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name…

树莓派部署yolov5实现目标检测(ubuntu22.04.3)

最近两天搞了一下树莓派部署yolov5&#xff0c;有点难搞&#xff08;这个东西有点老&#xff0c;版本冲突有些包废弃了等等&#xff09; 最后换到ubuntu系统弄了&#xff0c;下面是我的整体步骤&#xff08;建议先使能一下ssh&#xff08;最下面有&#xff09;&#xff0c;结合…

Macbook文件清理软件 Mac电脑清理垃圾文件怎么清理

为了维护Macbook电脑的系统健康&#xff0c;我们需要定期给电脑进行全面清理&#xff0c;清除系统垃圾文件、软件缓存和系统内存。那么好用的Macbook文件清理软件有哪些呢&#xff1f;今天就给大家介绍几款好用的电脑清理软件并介绍Mac电脑清理垃圾文件怎么清理。 一、Macbook…

RPA自动化小红书自动化写文以及发文!

1、视频演示 RPA自动化小红书自动写作发文 2、核心功能点 采集笔记&#xff1a;采集小红书上点赞量大于1000的爆款笔记 下载素材&#xff1a;下载爆款笔记的主图 爆款改写&#xff1a;根据爆款笔记的标题仿写新的标题以及新的文案 自动发布&#xff1a;将爆款笔记发布到小红…

Django之REST Client插件

一、接口测试工具介绍 在开发前后端分离项目时,无论是开发后端,还是前端,基本都是需要测试API接口的内容,而目前我们需要开发遵循RESTFul规范的项目,也是必然的(自己不开发前端页面)。 在网上有很多这样的工具,常用的postman,但还是需要下载安装。在这我们介绍一个VSCod…

【GEE实践应用】GEE下载遥感数据以及下载后在ArcGIS中的常见显示问题处理(以下载哨兵2号数据为例)

本期内容我们使用GEE进行遥感数据的下载&#xff0c;使用的相关代码如下所示&#xff0c;其中table是我们提前导入的下载遥感数据的研究区域的矢量边界数据。 var district table;var dsize district.size(); print(dsize);var district_geometry district.geometry();Map.…

51入门之LED

目录 1.配置文件 2.点亮一个LED 2.1单个端口操作点亮单个LED 2.2整体操作点亮LED 3.LED闪烁 4.LED实现流水灯 4.1使用for循环和移位实现 4.1.1移位操作符 4.1.2使用移位操作和for循环实现 4.2使用移位函数实现LED流水灯 众所周知&#xff0c;任何一个硬件工程师…

go juc 线程中的子类

1.go test() 主死随从 package mainimport ("fmt""strconv""time" )func test() {for i : 1; i < 10; i {fmt.Println("hello " strconv.Itoa(i))//阻塞time.Sleep(time.Second)} } func main() {//开启协程go test()for i : 1; …

GT收发器64B66B协议(2)自定义PHY设计

文章目录 前言一、设计框图二、GT_module三、PHY_module3.1、PHY_tx模块3.2、PHY_rx_bitsync模块3.3、PHY_rx模块 四、上板测试 前言 有了对64B66B协议的认识以及我们之前设计8B10B自定义PHY的经验&#xff0c;本文开始对64B66B自定义PHY的设计 一、设计框图 二、GT_module …

什么是redis缓存的雪崩、穿透以及击穿

缓存雪崩 举个例子&#xff0c;例如在双十一中&#xff0c;一点进去。访问量大&#xff0c;所以它很多数据是放在redis区缓存起来&#xff0c;对应redis的100个key。然后假设设置缓存失效时间是三小时。当双十一期间&#xff0c;购物超过这个三小时之后。这个首页的redis缓存会…

Excel、PowerQuery 和 ChatGPT 终极手册(上)

原文&#xff1a;Ultimate ChatGPT Handbook for Enterprises 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 序言 在不断发展的数据管理和分析领域中&#xff0c;掌握 Excel 的查找功能不仅是一种技能&#xff0c;更是高效数据处理的基石。《使用 Power Query 和 Ch…

Red Hat Enterprise Linux release 8.4安装Jenkins

1. 查看安装 1.1 显示 Linux 系统的详细信息&#xff0c;包括内核版本、操作系统版本和其他相关信息 uname -a1.2 查看 Red Hat Linux 系统的版本 cat /etc/redhat-release # 或者 cat /etc/os-release1.3 查看 JDK 是否安装 java -version #查看安装路径 echo $JAVA_HOME1…

Docker 哲学 - docker swarm

Docker Swarm 模式下的集群管理和服务恢复机制 Docker Swarm 是 Docker 的集群管理和编排功能。在 Swarm 模式下&#xff0c;你可以将多个 Docker 主机组合成一个虚拟主机&#xff0c;称为 Swarm 集群。Swarm 集群由一个或多个管理节点&#xff08;manager nodes&#xff09;和…

前端开发基础(HTML5 + CSS3)【第一篇】:HTML标签之文字排版、图片、链接、音频、视频 涵盖了两个综合案例 做到了基础学得会,实战写的出

点击前往前端开发基础专栏&#xff1a; 文章目录 HTML5 CSS3 开发一、开发环境搭建下载 VS Code1. 2 插件的下载1.3 项目和文件的下载 二、 什么是 HTML2.1 标签的语法2.2 代码演示&#xff1a;2.3 小结 三 、HTML基本骨架3.1 快捷键生成HTML骨架3.2 代码展示3.3 小结 四、标…

【游戏逆向】逆向基础之寄存器和内存

寄存器是中央处理器内的组成部分 它们可用来暂存指令、数据和地址。 具有这样功能还有内存 我们这里说的内存都是指虚拟内存。 寄存器和虚拟内存的主要区别在于它的存储和读取速度更快&#xff0c;那么有的同学会说&#xff0c;那我们全用寄存器就好了&#xff0c;但是&…

NOI - OpenJudge - 2.5基本算法之搜索 - 1490:A Knight‘s Journey - 超详解析(含AC代码)

点赞关注吧~ 1490:A Knights Journey 查看提交统计提问 总时间限制: 1000ms 内存限制: 65536kB 描述 Background The knight is getting bored of seeing the same black and white squares again and again and has decided to make a journey around the world. When…

数据仓库面试总结

文章目录 1.什么是数据仓库&#xff1f;2.ETL是什么&#xff1f;3.数据仓库和数据库的区别&#xff08;OLTP和OLAP的区别&#xff09;4.数据仓库和数据集市的区别5.维度分析5.1 什么是维度&#xff1f;5.2什么是指标&#xff1f; 6.什么是数仓建模&#xff1f;7.事实表7.维度表…

StarRocks实战——华米科技埋点分析平台建设

目录 前言 一、原有方案及其痛点 二、引入StarRocks 三、方案改造 3.1 架构设计 3.2 数据流程 3.3 性能指标 3.4 改造收益 前言 华米科技是一家基于云的健康服务提供商&#xff0c;每天都会有海量的埋点数据&#xff0c;以往基于HBase建设的埋点计算分析项目往往效率上…

号卡极团分销管理系统 index.php SQL注入漏洞复现

0x01 产品简介 号卡极团分销管理系统,同步对接多平台,同步订单信息,支持敢探号一键上架,首页多套UI+商品下单页多套模板,订单查询支持实时物流信息、支持代理商自定义域名、泛域名绑定,内置敢探号、172平台、号氪云平台第三方接口以及号卡网同系统对接! 0x02 漏洞概述…