二、企业级架构之Nginx

一、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;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

武汉星起航:打造亚马逊一站式孵化平台引领电商新风潮

2020年正式成立后,武汉星起航持续深耕亚马逊自营店铺运营,不断拓展跨境电商业务。公司凭借专业运营团队和多年经验为合作伙伴提供深入合作模式,迅速崭露头角。推出亚马逊一站式孵化平台,为卖家提供全方位支持,彰显了公…

(已解决)引入本地bootstrap无效,bootstrap和jquery的引入

问题&#xff1a; 首先我是跟着张天宇老师下载的bootstrap文件&#xff0c;新建了一个css文件夹&#xff0c;但是这样子<link rel"stylesheet" type"text/css" src"./css/bootstrap.css">在index.html引入没有用。 解决办法: 1.把建立的…

免费在线搜索人名、电话号码、个人信息、定位、联系信息以及地址的开源网站

免费在线搜索人名、电话号码、个人信息、定位、联系信息以及地址的开源网站。 为大家推荐开源搜索电话号码及地址的网页。这些网站不仅提供了免费查找人员、电话号码、地址、区号、邮政编码和邮政编码的功能&#xff0c;还允许进行反向搜索&#xff0c;即通过输入电话号码找到…

蓝桥杯第十三届省赛C++B组(未完)

目录 刷题统计 修剪灌木 X进制减法 【前缀和双指针】统计子矩阵 【DP】积木画 【图DFS】扫雷 李白打酒加强版 DFS (通过64%&#xff0c;ACwing 3/11&#xff09;; DFS(AC) DP&#xff08;AC&#xff09; 砍竹子(X) 刷题统计 题目描述 小明决定从下周一开始努力刷题准…

【优选算法专栏】专题十六:BFS解决最短路问题(一)

本专栏内容为&#xff1a;算法学习专栏&#xff0c;分为优选算法专栏&#xff0c;贪心算法专栏&#xff0c;动态规划专栏以及递归&#xff0c;搜索与回溯算法专栏四部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握算法。 &#x1f493;博主csdn个人主页&#xff1a;小…

《QT实用小工具·十八》高亮发光按钮控件

1、概述 源码放在文章末尾 该项目实现了高亮发光按钮控件 可设置文本&#xff0c;居中显示。可设置文本颜色。可设置外边框渐变颜色。可设置里边框渐变颜色。可设置背景色。可直接调用内置的设置 绿色、红色、黄色、黑色、蓝色 等公有槽函数。可设置是否在容器中可移动&#…

MongoDB初探:安装与图形化界面保姆级使用指南

文章目录 前言一、MongoDB下载安装下载解压配置环境变量打开mongoDB 二、配置本地MongoDB服务创建文件下载服务测试服务 三、图形化界面Compass GUINavicat GUI 总结 前言 MongoDB是一种流行的开源、面向文档的NoSQL数据库程序。与传统的关系型数据库不同&#xff0c;MongoDB将…

数据可视化高级技术Echarts(快速上手柱状图进阶操作)

目录 1.Echarts的配置 2.程序的编码 3.柱状图的实现&#xff08;入门实现&#xff09; 相关属性介绍&#xff08;进阶&#xff09;&#xff1a; 1.标记最大值/最小值 2.标记平均值 3.柱的宽度 4. 横向柱状图 5.colorBy series系列&#xff08;需要构造多组数据才能实现…

2024.4.1-day06-认识 CSS(三大特性、引入方式)

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; day06-认识 CSS(三大特性、引入方式) 文章目录 day06-认识 CSS(三大特性、引入方式)作业…

【工具使用】使用Audition对比两个音源的频率特性变化

一&#xff0c;简介 本文主要介绍如何通过Audition比较算法输入和输出的频率特性&#xff0c;供参考。 二&#xff0c;操作步骤 这里以96K粉噪输入输出的音源来举例说明&#xff1a; 按照格式打开对应的音源&#xff0c;并使用快捷键“Alt Z”打开频率分析窗口&#xff1a…

vscode-插件开发-hello world-创建初始模板

目录 前言1.环境配置全局安装 yo, generator-code 2. 新建一个插件项目模板问题1: F5 按键无法启动launch.json调试(解决)问题1 描述:问题1: 找错误问题1: 可行的解决方案 3. 开发插件(添加自定义功能) 参考vscode官方示例&#xff1a;如何创建你的第一个插件开发项目模板的步骤…

第12届蓝桥杯省赛 ---- C/C++ C组

文章目录 1. ASC2. 空间3. 卡片4. 相乘5. 路径6.时间显示7.最少砝码8. 杨辉三角形9. 左孩子右兄弟 第12届蓝桥杯省赛&#xff0c;C/C C组真题&#xff0c;第10题不是很清楚&#xff0c;题解不敢乱放&#x1f601;&#x1f601;&#x1f601; 1. ASC 额。。。。 #include <i…

软文推广常用方式,媒介盒子揭秘

软文推广的核心在于“软”&#xff0c;即让品牌推广内容区别于传统硬广的形式出现&#xff0c;让读者在不知不觉中接受信息&#xff0c;从而潜移默化地改变消费者的消费观念&#xff0c;并引导其消费行为。由于这种推广方式更注重内容的质量和传播效果&#xff0c;因此往往能够…

Linux——静态库 共享库

1.库文件 1).库文件 库是一组预先编译好的方法的集合; Linux系统存储库的位置一般在/lib 和 /usr/lib (64位系统/usr/lib64) 库的头文件放在/usr/include 2).库的分类 静态库:libxxx.a(命名规则) 共享库:libxxx.so(命名规则) 3).准备文件: //add.c int add(int x,int y) { re…

nginx部署前端教程

目录 一、前言二、部署三、注意四、参考 一、前言 一般来说现在的软件项目&#xff0c;都是分用户端以及管理端的&#xff0c;并且是前后端分离的&#xff0c;这里我来记录一下部署两个前端的教程。 部署前端之前需要的准备工作是部署springBoot后端程序&#xff0c;这里我do…

数据结构基础:双链表结构、实现

继续和颦颦学C语言呀.......> 双链表的结构 这里的head 为头节点&#xff0c;是‘哨兵位’&#xff0c;实际不存储任何有效的数据 它的存在是为了遍历环链表避免死循环 双链表的实现 typedef int LTDataType; typedef struct ListNode { struct ListNode* next; //指针保存…

2024/4/6 DS18B20温度传感器

DS18B20温度传感器简介 DS18B20是一种常见的数字温度传感器&#xff0c;其控制命令和数据都是以数字信号的方式输入输出&#xff0c;相比较于模拟温度传感器&#xff0c;具有功能强大、硬件简单、易扩展、抗干扰性强等特点 测温范围&#xff1a;-55C 到 125C 通信接口&#…

通讯录----顺序表版本

1.通讯录的实现逻辑 对于通讯录&#xff0c;我们做的无非就是初始化&#xff0c;销毁。添加联系人数据&#xff0c;修改联系人数据&#xff0c;删除联系人数据&#xff0c;查找联系人数据&#xff0c;展示联系人数据&#xff1b; 这个不就和我们的顺序表的逻辑如出一辙吗&…

docker安装nacos,单例模式(standalone),使用mysql数据库

文章目录 前言安装创建文件夹"假装"安装一下nacos拷贝文件夹删除“假装”安装的nacos容器生成nacos所需的mysql表获取mysql-schema.sql文件创建一个mysql的schema 重新生成新的nacos容器 制作docker-compose.yaml文件查看网站 前言 此处有本人写得简易版本安装&…

SQLite 查询优化器概述(九)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLite中的隔离(八&#xff09; 下一篇&#xff1a;SQLite下一代查询规划器(十&#xff09; 1. 引言 本文档概述了查询规划器和优化器如何 用于 SQLite 工作。 给定一个 SQL 语句&#xff0c;可能有几十个、几百…