nginx的安装和全局配置

news2024/11/19 10:43:37

目录

何为nginx

Nginx 功能介绍

基础特性

nginx架构

Nginx 进程结构

nginx 模块

模块分类

使用方式

编译安装nginx

第一步:获取安装包

第二步:安装依赖

第三步:创建用户nginx

第四步:解压安装包

第五步:编译安装

最后一步:修改nginx目录的所属

额外一步:添加软连接(为了可以补全命令和快速启动)

nginx开机自启

平滑升级及信号的使用

平滑升级

第零步:准备操作

​编辑

第一步:备份旧版本,安装新版本

第二步:完成新版本安装

第三步:优雅关闭

第四步:升级 level up

回滚

信号

​编辑

常用的信号

查看版本信息

常用发送信号

分割日志

检查语法格式

nginx的配置文件

全局配置

模块

关闭版本和修改版本信息

修改进程数

进程与内核绑定

worker优先级

设置worker打开的文件的上限


何为nginx

Nginx是一款轻量级的 web服务器、反向代理服务器 及 mail代理服务器。其特点是占有内存少,并发能力强

Nginx 功能介绍
  • 静态的web资源服务器html,图片,js,css,txt等静态资源

  • http/https协议的反向代理 7层协议

  • 结合FastCGI/uWSGI/SCGI等协议反向代理动态资源请求

  • tcp/udp协议的请求转发(反向代理) 4层协议

基础特性
  • 模块化设计,较好的扩展性

  • 高可靠性

  • 支持热部署:不停机更新配置文件,升级版本,更换日志文件

  • 低内存消耗:10000个keep-alive连接模式下的非活动连接,仅需2.5M内存

  • event-driven,aio,mmap,sendfile

nginx架构

Nginx 进程结构

nginx 进程分为 master(主进程),worker(子进程)

nginx 模块

模块分类
  • 核心模块:是 Nginx 服务器正常运行必不可少的模块,提供错误日志记录 、配置文件解析 、事件驱动机制 、进程管理等核心功能

  • 标准HTTP模块:提供 HTTP 协议解析相关的功能,比如: 端口配置 、 网页编码设置 、 HTTP响应头设置 等等

  • 可选HTTP模块:主要用于扩展标准的 HTTP 功能,让 Nginx 能处理一些特殊的服务,比如:Flash 多媒体传输 、解析 GeoIP 请求、 网络传输压缩 、 安全协议 SSL 支持等

  • 邮件服务模块:主要用于支持 Nginx 的 邮件服务 ,包括对 POP3 协议、 IMAP 协议和 SMTP协议的支持

  • Stream服务模块: 实现反向代理功能,包括TCP协议代理

  • 第三方模块:是为了扩展 Nginx 服务器应用,完成开发者自定义功能,比如: Json 支持、 Lua 支持等

使用方式

在编译安装第一步的时候使用 ./configure --help 可以查看支持的模块

./configure --help
# 查看帮助,里面会带有可用的模块
# 提示:要在nginx的安装包中使用该命令才有用

编译安装nginx

nginx不选择yum(rpm)安装的原因

  1. rpm会导致系统原有的库文件被破坏,导致新的软件包无法正常安装,存在着依赖关系;源码编译安装nginx快速,安全。
  2. 版本控制不行,规模部署,rpm的方式搞不定,没有统一的基础设施规范;源码编译nginx具有统一的基础设施规范。

所以我们选择编译安装nginx

第一步:获取安装包

nginx的安装可以自己去其官网下载  nginx: download

也可以使用命令:

wget http://nginx.org/download/nginx-1.18.0.tar.gz
# 从 nginx 的官网下载 nginx 1.18.0 的安装包

第二步:安装依赖

一个软件的运行需要一个或者多个依赖

yum -y install gcc pcre-devel openssl-devel \
zlib-devel openssl  openssl-devel
# 使用 yum install 安装 nginx 运行所需要的依赖

第三步:创建用户nginx

服务器使用该服务时多多少少会有漏洞,为了安全起见,创建用户 nginx ,将漏洞可能引发的问题限制在较小的范围内

useradd -M -s /sbin/nologin nginx
# 新建程序用户 nginx 

第四步:解压安装包
tar xf nginx-1.18.0.tar.gz
# 解压 nginx 安装包

第五步:编译安装
cd /data/nginx-1.18.0/
# 进入安装包

mkdir /apps/nginx -p
# 创建目录(后续nginx的安装目录)

./configure --prefix=/apps/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module
# 声明需要的模块

make -j2 && make install
# 用两核编译,并开始安装

最后一步:修改nginx目录的所属
chown -R nginx.nginx /apps/nginx
# 修改权限,完全控制文件夹的权限

额外一步:添加软连接(为了可以补全命令和快速启动)

将nginx的启动项放到/usr/sbin/

ln -s /apps/nginx/sbin/nginx /usr/sbin
# 添加软连接

nginx开机自启

vim /usr/lib/systemd/system/nginx.service
# 编辑 nginx自启 文本

[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/apps/nginx/logs/nginx.pid
ExecStart=/apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID

[Install]
WantedBy=multi-user.target
# 该文件中有很多的路径要根据你自己的 nginx 实际安装位置来修改
# 请勿盲目复制

平滑升级及信号的使用

平滑升级:在进程不被关闭的情况下完成新版本的安装,并优雅退出就旧的子进程

信号的使用:以nginx为命令

平滑升级

步骤:

第零步:准备操作
systemctl status nginx
# 先查看 nginx 程序是否启动

systemctl start nginx
# 若没启动

vim /apps/nginx/conf/nginx.conf
# 然后进入 nginx 配置文件


#user  nobody;
worker_processes  1;
# 将 worker_processes  1;改为worker_processes  2;
# 将 worker 进程数从1修改为2(即将其从1核变为2核)

nginx -s reload
# 重新加载 nginx 配置文件

ps aux | grep nginx
# 查看 nginx 的进程
# 现在正常情况应该是1个master进程以及2个worker进程
第一步:备份旧版本,安装新版本

先将旧版本 nginx 的二进制文件进行备份,以防万一

cd /apps/nginx/sbin/
# 进入放有二进制文件的文件夹中

cp /apps/nginx/sbin/nginx /data/nginx.jiu
# 将其备份并改名方便分辩

再编译新版本nginx的二进制文件

wget https://nginx.org/download/nginx-1.20.2.tar.gz -P /data
# 获取新版本安装
# 我的版本是1.18.0,所以在这里使用1.20.2进行升级处理

tar xf nginx-1.20.2.tar.gz
# 解压安装包

cd /data/nginx-1.20.2
# 进入安装包

nginx -V
# 查看安装的模块

./configure --prefix=/apps/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module
# 先对新版本 nginx 进行编译,后面的模块要和你nginx -V显示的一样
# 如果需要的新的模块可以在后面添加

# 注意安装的位置要和老版本的一致

make -j2
# 注意这里只需要make,不需要make install

mv /apps/nginx/sbin/nginx   /apps/nginx/sbin/nginx.bak
# 为了方便将新二进制文件移进来

cp objs/nginx /apps/nginx/sbin/
# 拷贝新版本

用命令向旧版本master进程发送USR2信号(在处理完请求后关闭work子进程)

kill -USR2 `cat /apps/nginx/run/nginx.pid`
# 向旧 master 进程发送 USR2 信号
第二步:完成新版本安装

这个时候新老版本的nginx同时存在,但新用户的请求只会发给新进程,旧进程不再接受

ps auxf|grep nginx
# 现在会产生 2个 master 进程
第三步:优雅关闭

关闭旧master的worker进程

(自选)马上要优雅关闭,若处于非服务状态下可以使用下面
        的命令,使worker进程开始任务,方便观察优雅关闭过程

dd if=/dev/zero of=/apps/nginx/html/m.img bs=1G count=10
# 新建 10G 的文件 m.img

# 再开一台新的虚拟机
wget --limit-rate=1M http://192.168.91.100/m.img
# 用新虚拟机下载大文件

因为用的是优雅关闭所以会在worker完成任务后再退出

kill -WINCH `cat /apps/nginx/run/nginx.pid.oldbin`
# 优雅关闭
第四步:升级 level up

测试新版本nginx是否正常运行

wget --limit-rate=1M http://192.168.91.100/m.img
# 再选择一台新的虚拟机下载大文件

ss -ntap|grep 80
# 查看是否开了一个新的worker

若不能正常运行,则将旧版本nginx发送hup信号,让其重新生成worker进程,也就是回滚

回滚

当升级成新版本的nginx不能正常运行时,唤起老版本的nginx的master进程,并关闭新版本的

kill -HUP `cat /apps/nginx/run/nginx.pid.oldbin`
# 该命令可以唤醒老的master进程

kill -QUIT `cat /apps/nginx/run/nginx.pid`
# 退出新版本的master进程

信号

nginx 命令支持向其发送信号,实现不同功能

nginx 当做单独命令使用有以下选项

nginx -h
# 查看信号的帮助
# 若无法使用nginx命令,请建立软连接
# 即:
ln -s /apps/nginx/sbin/nginx /usr/sbin
#          ↑ 
#    /你nginx安装的位置/sbin/nginx
常用的信号
  • TERM或INT:快速停止nginx服务
  • QUIT:平缓停止nginx 服务
  • HUP:使用新的配置文件启动进程,平缓停止原有进程
  • USR1: 重新打开日志文件,常用户日志切割
  • USR2:使用新版本的nginx文件启动服务,之后平缓停止原有nginx进程
  • WINCH:平滑停止worker process,用于nginx服务器平滑升级
查看版本信息
nginx -v
# 显示版本信息

nginx -V
# 显示详细信息

常用发送信号
nginx -s   stop   
# 立即关闭nginx

nginx -s   quit   
# 优雅退出   不影响业务的状态下退出

nginx -s   reload 
# 重新加载  
分割日志

首先你要找到日志文件在哪

nginx日志文件默认存放在 /var/log/nginx目录下,但如果nginx没有使用默认位置的话,就需要进入nginx的配置文件中查找

检查语法格式
nginx -t
# 检查配置文件中的语法格式是否正确

nginx的配置文件

Nginx的配置文件的组成部分:

主配置文件:nginx.conf

子配置文件: include conf.d/*.conf

全局配置

模块
  • 核心模块:是 Nginx 服务器正常运行必不可少的模块,提供错误日志记录 、配置文件解析 、事件驱动机制 、进程管理等核心功能

  • 标准HTTP模块:提供 HTTP 协议解析相关的功能,比如: 端口配置 、 网页编码设置 、 HTTP响应头设置 等等

  • 可选HTTP模块:主要用于扩展标准的 HTTP 功能,让 Nginx 能处理一些特殊的服务,比如:Flash 多媒体传输 、解析 GeoIP 请求、 网络传输压缩 、 安全协议 SSL 支持等

  • 邮件服务模块:主要用于支持 Nginx 的 邮件服务 ,包括对 POP3 协议、 IMAP 协议和 SMTP协议的支持

  • Stream服务模块: 实现反向代理功能,包括TCP协议代理

  • 第三方模块:是为了扩展 Nginx 服务器应用,完成开发者自定义功能,比如: Json 支持、 Lua 支持等

关闭版本和修改版本信息
vim /apps/nginx/conf/nginx.conf
# 进入 nginx 的主配置文件

server_tokens off;
# 在http语句中添加

nginx -s reload
# 重新加载配置文件

curl -I http://192.168.64.100/
# 查看该服务器的配置信息

修改进程数
vim /apps/nginx/conf/nginx.conf
# 进入 nginx 的主配置文件

worker_processes  1;
# 这是原来的配置,只有一个进程(worker)
# 把 1 修改为 2 就会有2个 worker
worker_processes  auto;
# 当为 auto 时,进程数和你的内核数相同

ps axo pid,cmd,psr,ni|grep nginx
# 可以看到 nginx 的 worker 数量

进程与内核绑定

将Nginx工作进程绑定到指定的CPU核心,保证此进程不会运行在其他核心上,极大减少了nginx的工作进程在不同的cpu核心上的来回跳转,减少了CPU对进程的资源分配与回收以及内存管理等,因此可以有效的提升nginx服务器的性能。

vim /apps/nginx/conf/nginx.conf
# 编辑主配置文件

worker_processes  2;
worker_cpu_affinity 00000001 00000010;
# 将任务绑定到内核1和内核2上

ps axo pid,cmd,psr,ni|grep -v grep |grep nginx|sort -n
# 查看进程,多次使用可以查看是否固定内核

worker优先级

当你想将nginx的work进程的优先级调高 可以使用nice设置

vim /apps/nginx/conf/nginx.conf
# 编辑主配置文件

worker_priority -20;
# 工作进程优先级,-20~19数值越小,优先级越高

设置worker打开的文件的上限

所有worker进程能打开的文件数量上限,包括:Nginx的所有连接(例如与代理服务器的连接等),而不仅仅是与客户端的连接,另一个考虑因素是实际的并发连接数不能超过系统级别的最大打开文件数的限制.最好与ulimit -n 或者limits.conf的值保持一致

vim /apps/nginx/conf/nginx.conf
# 修改配置文件

worker_rlimit_nofile 65536;
# 修改文件可以打开的最大数量

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

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

相关文章

DSP_TMS320F28377D_算法加速方法1_拷贝程序到RAM运行

TI C2000系列的DSP芯片算力有限,用于来控制有时候常会出现控制程序无法实现实时运行的情况,因此从本文开始,将陆续推出几篇DSP算法加速的方法 此方法只需要添加一行代码和一个预定义,即可达到算法整体加速的目的。先声明本文是讲的…

jeecgboot的online在线开发高级版【伸手党福利】

本文章在于充分发挥jeecgboot的在线开发功能,将平时开发80%以上的工作量全部收束 目录 树形结构使用固定值替换id从其他表中引用字段输入和搜索(下拉搜索)输入用户、单位等框架内固有值主附表 树形结构 是否树》是 自动生成pid,…

oracle19c-图形安装(centos7)

目录 一.环境准备1.关闭防火墙2.关闭SELINUX3.配置本地yum源4.安装ORACLE先决条件的软件包5.修改LINUX的内核文件6.添加下列参数到/etc/security/limits.conf7.添加下列条目到/etc/pam.d/login8.环境变量中添加下列语句9.创建文件目录和相应的用户10.配置oracle用户的环境变量1…

paddle 1-高级

目录 为什么要精通深度学习的高级内容 高级内容包含哪些武器 1. 模型资源 2. 设计思想与二次研发 3. 工业部署 4. 飞桨全流程研发工具 5. 行业应用与项目案例 飞桨开源组件使用场景概览 框架和全流程工具 1. 模型训练组件 2. 模型部署组件 3. 其他全研发流程的辅助…

别考,快跑!

写在前面 我一般不直接推荐院校,但是根据这所院校的23情况来看,复试一票否决率太高了,我看的怀疑人生,所以纠结很久,还是说出我自己的想法:我不推荐我的粉丝考这所学校,我更希望大家考研上岸是…

PMP教材改版难不难?考生应如何应对?

有很多同学都在担心PMP教材改版后,考试会不会增加难度,今天胖圆给大家详细讲解一下,在PMP改革背景下,考生应该怎样应对? 新教材的改动意味着8月以后的考试都将 《PMBOK指南》第七版的内容纳入考试范围,其中…

【USRP】调制解调系列7:GMSK、MSK、基于labview的实现

MSK 在数字调制中,最小频移键控(Minimum-Shift Keying,缩写:MSK)是一种连续相位的频移键控方式,在1950年代末和1960年代产生。与偏移四相相移键控(OQPSK)类似,MSK同样将…

JavaScript关于函数的小挑战

题目 回到两个体操队,即海豚队和考拉队! 有一个新的体操项目,它的工作方式不同。 每队比赛3次,然后计算3次得分的平均值(所以每队有一个平均分)。 只有当一个团队的平均分至少是另一个团队的两倍时才会获胜。否则&…

openGauss学习笔记-54 openGauss 高级特性-MOT

文章目录 openGauss学习笔记-54 openGauss 高级特性-MOT54.1 MOT特性及价值54.2 MOT关键技术54.3 MOT应用场景54.4 不支持的数据类型54.5 使用MOT54.6 将磁盘表转换为MOT openGauss学习笔记-54 openGauss 高级特性-MOT openGauss引入了MOT(Memory-Optimized Table&…

Glide分析和总结

1. Glide概述 Glide是一款图片处理的框架,从框架设计的角度出发,最基本要实现的就是 加载图片 和 展示。 它把一个图片请求封装成一个Request对象,里面有开启、暂停、关闭、清除网络请求、以及载体生命周期的监听等操作。然后通过RequestBu…

导入表解析与IATHook

IAT&#xff1a;导入地址表// PE文件解析.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 //#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <Windows.h>//函数向前声明 DWORD RvaToFoa(DWORD dwRva, const char* szBuff…

【人工智能】—_贝叶斯网络、概率图模型、全局语义、因果链、朴素贝叶斯模型、枚举推理、变量消元

文章目录 频率学派 vs. 贝叶斯学派贝叶斯学派Probability&#xff08;概率&#xff09;:独立性/条件独立性&#xff1a;Probability Theory&#xff08;概率论&#xff09;:Graphical models &#xff08;概率图模型&#xff09;什么是图模型&#xff08;Graphical Models&…

【Vue3】transition-group 过渡列表

1. 基本使用 transition-group 和 transition 的用法基本上是一样的。 <template><div class"content"><button click"add">add</button><button click"pop">pop</button><div class"wrap"&…

Michael.W基于Foundry精读Openzeppelin第33期——EIP712.sol

Michael.W基于Foundry精读Openzeppelin第33期——EIP712.sol 0. 版本0.1 EIP712.sol 1. 目标合约2. 代码精读2.1 constructor(string memory name, string memory version)2.2 _domainSeparatorV4()2.3 _hashTypedDataV4(bytes32 structHash) 0. 版本 [openzeppelin]&#xff…

OpenVINO2023使用简介

1 下载安装 先在anaconda中创建一个虚拟环境&#xff0c;该环境的python版本为3.7&#xff0c;之所以使用python3.7&#xff0c;是因为我在3.9上安装过程中出现不少bug&#xff0c;后面新建了一个3.7的环境才解决&#xff0c;我不知道是否由于和我已有环境中某些包不兼容&…

222. 完全二叉树的节点个数 Python

文章目录 一、题目描述示例 1![在这里插入图片描述](https://img-blog.csdnimg.cn/8c74d1b796b74286999e09d4c6b7682f.png#pic_center)示例 2示例 3 二、代码三、解题思路 一、题目描述 给你一棵 完全二叉树 的根节点 root &#xff0c;求出该树的节点个数。 完全二叉树 的定…

【无监督学习】压缩即预测——Kolmogorov 复杂度作为终极压缩器

基于学习方法&#xff0c;机器学习大致可分为监督学习和无监督学习两种。在无监督学习中&#xff0c;我们需要用某种算法去训练无标签数据集&#xff0c;从而帮助模型找到这组数据的潜在结构。 为了进行无监督学习&#xff0c;在OpenAI成立早期&#xff0c;他们认为通过压缩可…

go gin 自定义验证

我们上一篇已经提到了gin中binding时候可以指定json字段大小等限制&#xff0c;但是那个错误却是英文的&#xff0c;现在想搞成中文的&#xff0c;以便前端可读&#xff0c;demo如下 package mainimport ("net/http""reflect""github.com/gin-gonic/…

知更鸟语音训练

现在哪还有人读小说、看视频&#xff0c;谁还用真人朗读呢&#xff1f; 现在给大家介绍&#xff0c;假人朗读是怎么来的&#xff0c;提供一些音频&#xff0c;进行训练&#xff0c;然后就能合成属于自己的音频了。这里只讲训练部分&#xff0c;使用请自己看github知更鸟&#…

javaee spring 静态代理

静态代理 package com.test.staticProxy;public interface IUsersService {public void insert(); }package com.test.staticProxy;//目标类 public class UsersService implements IUsersService {Overridepublic void insert() {System.out.println("添加用户");…