Nginx进阶-常见配置(三)

news2024/12/24 10:21:07

nginx 变量

Nginx的配置文件使用的语法的就是一门微型的编程语言。既然是编程语言,一般也就少不了“变量”这种东西。

Nginx配置文件使用的语法主要包括以下几个方面:
(1)配置块 (Block Directives):
Nginx配置文件由多个嵌套的配置块组成。
示例配置块如 http, server, 和 location。
配置块以名称开始,后面跟着一对花括号 {},其中包含具体的指令。
(2)指令 (Directives):
指令是Nginx配置的核心组成部分,决定了Nginx如何处理请求。
指令以名称开始,后面跟随一个或多个参数,最后以分号 ; 结束。
示例指令如 listen 80;。
(3)变量 (Variables):
Nginx支持预定义变量,例如 $host 和 $remote_addr,它们在处理请求时动态生成。
(4)上下文 (Contexts):
Nginx配置文件由多个上下文组成,如 http, server, 和 location。
每个上下文可以包含特定类型的指令。
(5)包含 (Includes):
Nginx允许包含其他配置文件,以使主配置文件更加简洁和易于管理。
使用 include 指令来包含其他配置文件,例如 include /etc/nginx/conf.d/*.conf;。
(6)注释 (Comments):
Nginx的配置文件支持使用 # 字符进行注释。

1、nginx变量简介

所有的 Nginx变量在 Nginx 配置文件中引用时都须带上 $ 前缀
在 Nginx 配置中,变量只能存放一种类型的值,而且也只存在一种类型,那就是字符串类型
所有的变量值都可以通过这种方式引用:$变量名

2、nginx 变量的定义和使用

nginx中的变量分为两种:自定义变量与内置预定义变量。

1、自定义变量

1、声明变量可以在sever,http,location等标签中使用set命令声明变量,语法如下

set $变量名 变量值
注意:
nginx 中的变量必须都以$开头
nginx 的配置文件中所有使用的变量都必须是声明过的,否则 nginx 会无法启动并打印相关异常日志

Nginx 变量的创建只能发生在 Nginx 配置加载的时候,或者说 Nginx 启动的时候。而赋值操作则只会发生在请求实际处理的时候。这意味着不创建而直接使用变量会导致启动失败。

2、内置预定义变量

内置预定义变量即无需声明就可以使用的变量,通常包括一个http请求或响应中一部分内容的值,以下为一些常用的内置预定义变量

nginx 监控

1、nginx基础监控

- 进程监控
- 端口监控
注意: 这两个是必须要加在zabbix监控,加触发器有问题及时告警

nginx 提供了 ngx_http_stub_status_module,这个模块提供了基本的监控功能,查看Nginx连接状态。通过HTTP请求来获取与Nginx服务器相关的实时状态信息,包括当前连接数、请求处理情况、响应时间等。

2、监控的指标

1、基本活跃指标

Accepts(接受)、Handled(已处理)、Requests(请求数)是一直在增加的计数器。Active(活跃)、Waiting(等待)、Reading(读)、Writing(写)随着请求量而增减。

2、服务器错误率

通过监控固定时间间隔内的错误代码(4XX代码表示客户端错误,5XX代码表示服务器端错误)。

3、请求处理时间

请求处理时间也可以被记录在 access log 中,通过分析 access log,统计请求的平均响应时间。 ----$request_time 变量

1、nginx Stub Status 监控模块安装
​
先使用命令查看是否已经安装这个模块:

# -V会显示版本号和模块等信息、小写v仅显示版本信息
~]# nginx -V

注意:是如果没有此模块,需要重新安装,编译命令如下:
./configure –with-http_stub_status_module
具体的使用方法是在执行 ./configure 时,指定 --with-http_stub_status_module,然后通过配置:

~]# vim /etc/nginx/conf.d/status.conf 
server {
        listen 80;
        server_name localhost;
        location /nginx-status {
                stub_status     on;
                #access_log      on;
                # 可选参数,允许指定IP地址或IP段来限制访问
                # allow 127.0.0.1;
                # allow 192.168.0.0/24;
                # deny all;
                }
}
​
2、nginx 状态查看

配置完成后在浏览器中输入192.168.175.128/nginx-status 查看显示信息如下:

Active connections: 2    当前nginx处理请求的数目,即​活跃的连接数 2个
server accepts handled requests   #连接数 成功连接数(握手) 处理请求数
 9 9 29 
Reading: 0 Writing: 1 Waiting: 0 

失败连接=连接数(accepts)-成功连接数(handled)(相等表示中间没有失败的),
Reading : nginx读取到客户端的Header信息数。请求头   -----速度快。 
Writing :nginx返回给客户端的Header信息数。响应头       
Waiting :开启keep-alive的情况下,即nginx已处理完正在等候下一次请求指令的驻留连接。
connection    #连接数,tcp连接                             
request       #http请求,GET/POST/DELETE/UPLOAD
长连接(驻留连接)
keepalive_timeout设置为0意味着禁用长连接(Keep-Alive)功能
长连接是指在一个TCP连接上可以发送多个HTTP请求,在所有的请求处理完成后,保持该
连接处于打开状态,以便后续请求复用。这样可以减少TCP连接的建立和关闭的开销,提高服务器的性能。

默认情况下,keepalive_timeout的值是75s。当一个连接的空闲时间超过了keepalive_timeout
的值,Nginx会主动关闭这个连接。

当将keepalive_timeout设置为0时,表示没有空闲时间限制,即不等待客户端主动关闭连接,
而立即关闭连接。这样做可以节省服务器的资源,但也会增加服务器与客户端建立连接的频率。
3、Stub Status 参数说明

基于脚本监控nginx的端口
[root@nginx-server ~]# vim check_port.sh
#!/usr/bin/bash
curl -I http://127.0.0.1 &> /dev/null
if [ $? -ne 0 ];then
        echo "nginx 未运行,正在启动中..."
        sleep 1
        systemctl start nginx
        echo "正在检查nginx是否启动..."
        port=`netstat -lntp | grep nginx |awk '{print $4}' | awk -F':' '{print $NF}'`
        echo "nginx已经启动,端口为: $port"
fi

HTTPS 基本原理

HTTPS(全称:HyperText Transfer Protocol over Secure Socket Layer),其实 HTTPS 并不是一个新鲜协议,Google 很早就开始启用了,初衷是为了保证数据安全。 国内外的大型互联网公司很多也都已经启用了HTTPS,这也是未来互联网发展的趋势。

1、加密算法

1. 对称加密

加密和解密使用相同的密钥。这意味着发送方和接收方都需要共享同一个密钥来进行加密和解密操作。
对称加密算法的原理:
A要给B发送数据:A做一个对称密钥,使用密钥给文件加密,发送加密后的文件和钥匙,B拿钥匙解密

2. 非对称加密

公钥加密且可以自由共享,私钥解密且必须保密

A要给B发送数据
B做一对非对称的密钥,发送公钥给A,A拿公钥对数据进行加密,发送加密后的数据给B,B拿私钥解密

3. 哈希算法

一种数学函数,可以将任意长度的信息映射为固定长度的值,通常其长度要比信息小得多。

例如:MD5、SHA-1、SHA-2(如SHA-256) 等(推荐SHA-256安全性高)

md5sum:计算文件的MD5哈希值生成唯一的128位哈希值,用于校验文件的完整性和验证文件的一致性。

md5sum [文件路径]

4. 数字签名

数字签名是一种用于验证文件或文档的完整性和真实性的技术。它是通过使用非对称加密算法的公钥和私钥来实现的。

签名就是在信息的后面再加上一段内容(信息经过hash后的值),可以证明信息没有被修改过。
hash值一般都会加密后(也就是签名)再和信息一起发送,以保证这个hash值不被修改。
数字签名的过程如下:
1. 发送者使用私钥对数据进行哈希。哈希算法生成唯一的固定长度哈希值,唯一表示文件内容。
2. 发送者使用私钥对哈希值进行加密,生成数字签名。
3. 发送者将数据和数字签名一起发送给接收者。
4. 接收者使用发送者的公钥对数字签名进行解密,得到哈希值。
5. 接收者对接收的数据使用相同哈希算法进行哈希,生成新的哈希值。
6. 接收者比对解密生成的哈希值和自己计算的哈希值。如果一致,说明文件的内容没有被篡改过,数字签名有效。

2、HTTPS 协议介绍

  • HTTP 协议(HyperText Transfer Protocol,超文本传输协议):是客户端浏览器与Web服务器之间的应用层通信协议 。

  • HTTPS 协议(HyperText Transfer Protocol over Secure Socket Layer,超文本传输安全协议):HTTP+SSL/TLS,  HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL,用于安全的 HTTP 数据传输。

如上图所示 HTTPS 相比 HTTP 多了一层 SSL/TLS

SSL/TLS

SSL(Secure Sockets Layer 安全套接层协议)TLS(Transport Layer Security,传输层安全协议)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层为数据通讯进行加密提供安全支持。

SSL协议提供的服务主要有:

 ssl:身份认证和数据加密。保证数据完整性
1)认证用户和服务器,确保数据发送到正确的客户机和服务器;
2)加密数据以防止数据中途被窃取;
3)维护数据的完整性,确保数据在传输过程中不被改变。 

3、HTTPS 原理

1. HTTP 访问过程

如上图所示,HTTP请求过程中,客户端与服务器之间没有任何身份确认的过程,数据全部明文传输,“裸奔”在互联网上。这意味着在传输过程中,攻击者可以拦截和窃听数据,包括用户的敏感信息(如用户名、密码等)或其他数据。

可以看到,客户端发出的请求很容易被黑客截获,如果此时黑客冒充服务器,则其可返回任意信息给客户端,而不被客户端察觉。

2. HTTP 传输面临的风险

- 窃听风险:黑客可以获知通信内容。
- 篡改风险:黑客可以修改通信内容。
- 冒充风险:黑客可以冒充他人身份参与通信。

3. SSL证书

那有没有一种方式既可以安全的获取公钥,又能防止黑客冒充呢? 那就需要用到终极武器了:SSL 证书(申购)

证书:.crt, .pem
私钥:.key
证书请求文件:.csr

SSL 证书具体内容
(1)证书的发布机构CA
(2)证书的有效期
(3)公钥
(4)证书所有者
(5)签名 ----- 签名就可以理解为是钞票里面的一个防伪标签。
校验SSL证书过程

客户端在接受到服务端发来的SSL证书时,会对证书的真伪进行校验,以浏览器为例说明如下:

(1)首先浏览器读取证书中的证书所有者、有效期等信息进行一一校验
(2)浏览器开始查找操作系统中已内置的受信任的证书发布机构CA,与服务器发来的证书中的
    颁发者CA比对,用于校验证书是否为合法机构颁发
(3)如果找不到,浏览器就会报错,说明服务器发来的证书是不可信任的。
(4)如果找到,那么浏览器就会从操作系统中取出颁发者CA的公钥,然后对服务器发来的证书
    里面的签名进行解密
(5)浏览器使用相同的hash算法计算出服务器发来的证书的hash值,将这个计算的hash值与证
    书中签名做对比
(6)对比结果一致,则证明服务器发来的证书合法,没有被冒充
(7)此时浏览器就可以读取证书中的公钥,用于后续加密了
(8)client与web协商对称加密算法,client生成对称加密密钥并使用web公钥加密,发送给
    web服务器,web服务器使用web私钥解密 
(9)使用对称加密密钥传输数据,并校验数据的完整性

通过发送SSL证书的形式,既解决了公钥获取问题,又解决了黑客冒充问题,一箭双雕,HTTPS加密过程也就此形成

相比HTTP,HTTPS 传输更加安全的原因
(1) 所有信息都是加密传播,黑客无法窃听。
(2) 具有校验机制,一旦被篡改,通信双方会立刻发现。
(3) 配备身份证书,防止身份被冒充。

4. CA 机构

CA(Certificate Authority)证书颁发机构主要负责证书的颁发、管理以及归档和吊销。证书内包含了拥有证书者的姓名、地址、电子邮件帐号、公钥、证书有效期、发放证书的CA、CA的数字签名等信息。证书主要有三大功能:加密、签名、身份验证。

阿里云申请配置ssl证书---实战

1.准备一台阿里云服务器,我的机器在香港

2.准备一个域名

3.申请ssl证书

 

开始配置信息

到这需要等待大约10几分钟!然后刷新

先查看帮助文档

然后在下载

http配置为https

阿里云配置证书案例:

yum安装nginx  ----略
将证书上传到服务器中
1.首先在服务器创建存放证书的文件夹
~]# cd /etc/nginx/ && mkdir cert
2.将证书文件复制到服务器对应的文件夹中
~]# ls
2447549_www.testpm.cn_nginx.zip
~]# unzip 2447549_www.testpm.cn_nginx.zip
~]# cp 2447549_www.testpm.cn* /etc/nginx/cert/
~]# cd /etc/nginx/cert/
改名:
[root@nginx cert]# mv 2447549_www.testpm.cn.key www.testpm.cn.key 
[root@nginx cert]# mv 2447549_www.testpm.cn.pem www.testpm.cn.pem
3.证书配置如443端口、证书路径、私钥路径等相关内容
证书复制完成之后,可以对nginx配置文件进行更改,使用vim命令
[root@nginx ~]# cd /etc/nginx/conf.d/
[root@nginx conf.d]# vim /etc/nginx/conf.d/nginx_ssl.conf 
server {
    listen 443 ssl;  #指定https端口443
    server_name www.testpm.cn;
    access_log  /var/log/nginx/https_access.log  main;
​
    ssl_certificate   /etc/nginx/cert/www.testpm.cn.pem; #指定证书路径
    ssl_certificate_key  /etc/nginx/cert/www.testpm.cn.key; #指定私钥路径
    ssl_session_timeout 5m; #配置用于SSL会话的缓存
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #指定使用的协议
    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; #密码指定为OpenSSL支持的格式
    ssl_prefer_server_ciphers on;  #设置协商加密算法。
​
    location / {
        root  /usr/share/nginx/html;
        index index.html index.htm;
    }
}

80转443端口

server {
    listen 80;
    server_name www.testpm.cn;
    location / {
        #return 301 http://$host$request_url;
        rewrite .* https://www.testpm.cn permanent;
    }
}

80/443均可访问

在一个 server 里面同时监听 80 和 443 两个端口

server {
    listen 80;
    listen 443 ssl;
    server_name  www.testpm.cn;    # IP或域名
    ssl_certificate  /etc/nginx/cert/www.testpm.cn.pem;         # 证书路径
    ssl_certificate_key /etc/nginx/cert/www.testpm.cn.key;      # 私钥路径
    ssl_session_timeout 5m;
    ssl_protocols SSLv2 SSLv3 TLSv1;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers on;
    client_max_body_size 50M;
    client_body_buffer_size 2M;

    location / {
        root  /usr/share/nginx/html;
        index index.html index.htm;
        try_files $uri $uri/ @router;
    }
}

需要给域名做一个解析,香港的服务器添加一个A记录即可

解析完成之后大约需要等待3-5分钟

测试访问

访问成功!

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

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

相关文章

渗透8-05作业

第十五关: 利用时间盲注 拦截并放到intruder里 请求的参数替换或改写一下 uname1 OR IF(SUBSTRING((SELECT database()), 2, 1)e, sleep(1), 1) -- &passwd1&submitSubmit payload1设置 payload2设置(点击从列表中添加可快速找到a到z的列表) 开始…

Python | Leetcode Python题解之第326题3的幂

题目: 题解: class Solution:def isPowerOfThree(self, n: int) -> bool:return n > 0 and 1162261467 % n 0

spdlog日志库--基础介绍

文章目录 1. 简介1.1. spdlog代码特点1.2. 说明1.3. spdlog架构 2. spdlog的安装2.1. 使用包管理器安装2.2. 使用源码安装2.3. 仅使用头文件 3. 相关概念3.0 常用的头文件3.1. level_enum3.2. sink3.3. logger3.4 格式输出3.5 对齐方式3.6 截断3.7 字符串格式化fmt 4. 特性4.1.…

职业教育云计算实验实训室建设应用案例

云计算作为信息技术领域的一次革命,正在深刻改变着我们的工作和生活方式。随着企业对云计算技术的依赖日益加深,对具备云计算技能的专业人才的需求也日益迫切。职业院校面临着培养符合行业标准的云计算人才的挑战。唯众凭借其在教育技术领域的专业经验&a…

Web3时代的智能合约:区块链技术的革命性应用

随着区块链技术的发展,Web3时代已经悄然来临。智能合约作为这一时代的重要组成部分,正引领着技术应用的革命性变革。本文将深入解析智能合约的概念、工作原理、应用场景及其带来的挑战与机遇,全面展现其在Web3时代的重要作用。 一、智能合约…

Spring Cloud 整合 Nacos、Sentinel、OpenFigen 实战【微服务熔断降级实战】

前言: 上一篇我们分析了 Sentinel 的各种核心概念点以及 Sentinel 的执行流程,并分别演示了使用 Sentinel 编码和注解方式来管理资源的场景,加上我们前面学习的 Nacos,本篇来分享 Spring Cloud 整合 Nacos、Sentinel、OpenFigen …

密码学基础:搞懂Hash函数SHA1、SHA-2、SHA3(1)

目录 1.消息摘要(Hash) 2.SHA-1 3.SHA-2 4.小结 1.消息摘要(Hash) Hash函数是一种单向密码体制,把任意长度的输入经过变换得到一个固定长度的输出,同时它还具备单向性,只能从明文到密文,不能逆向,正是由于Hash函数…

Golang | Leetcode Golang题解之第326题3的幂

题目: 题解: func isPowerOfThree(n int) bool {return n > 0 && 1162261467%n 0 }

onlyoffice使用Https访问

开发服务器用的是http,一切正常使用,部署到服务器后,由于服务器使用了Https,导致访问onlyoffice时控制台报错。Mixed Content: The page at http://xxxxx// was loaded over HTTPS, but requested an insecure frame http://xxxxx…

Jpa-多表关联-OneToOne

Jpa-多表关联-OneToOne 准备JoinColumnOneToOne属性targetEntitycascade*PERSISTMERGEREMOVEREFRESH orphanRemovalfetchoptionalMappedBy* OneToOne在 hibernate中用于对表与表之间进行维护关联 准备 import com.alibaba.fastjson.JSON; import jakarta.persistence.*; impor…

K210烧录固件失败原因

1.检查固件信息,我这里用的是亚博智能提供的canmv固件 2.检查串口有无被占用,我就是因为打开了另一个正点原子的串口接收软件卡这么久 3.你要烧录canmv固件而非maixypy固件 若烧录maixypy要用maixipy来开发 4。可以看看换不同下载方式

辛迪·克劳馥与“惊艳”家人合影,装扮完美协调 幸福满满

我的意思是——辛迪克劳馥拥有一个令人叹为观止的家庭,这真的有什么好奇怪的吗?毕竟,她是世界知名的超级名模,她把基因和颧骨传给了她的孩子,让他们很容易追随她的脚步。所以,当我们看到她最近的家庭照片时…

面试笔记 8.5

面试常见: Jvm,高并发,多线程,数据库,redis,框架 1.N I/O有什么核心组件 Java NIO 基本原理以及三大核心组件_java nio核心组件有哪些-CSDN博客 Buffer 缓冲 Channel 一对一 Channel 读取数据 Selector对应线程…

【ML】multi head self-attention(自注意力机制)

【ML】multi head 自注意力机制self-attention 0. Transformer1. multi head self-attention2. positional encoding3. transform 可以应用的其他领域3.1 语音识别 变体 truncated self-attention3.2 self-attention for image3.3 self-attention v.s. CNN差异3.4 self-attenti…

CSP 2022 提高级第一轮 - CSP/S 2022初试题 程序阅读第三题解析

一、代码查看 1 #include <iostream> 2 #include <algorithm> 3 4 using namespace std; 5 6 const int MAXL 1000; 7 8 int n, k, ans[MAXL]; 9 10 int main(void) 11 { 12 cin >> n >> k; 13 if (!n) cout << 0 <&l…

IO流学习总结

IO流体系 字节流 字节流&#xff1a; 字节输出流:FileOutputStream 程序---写--->文件 字节输入流:FileInputStream 程序<---读---文件 字节输出流(FileOutputStream) Testpublic void testIO01() throws IOException {/*new FileOutputStream文件不存在创建文件父…

最新CSS3纵向菜单的实现

纵向菜单 通过下面例子&#xff0c;你会知道把列表转换成菜单的关键技术 a中的#是URL的占位符可以点击&#xff0c;真正用途中写实际URL <nav class"list1"><ul><li><a href"#">Alternative</a></li><li><…

AI智能化赋能电商经济,守护消费净土,基于轻量级YOLOv8n开发构建公共生活景下的超大规模500余种商品商标logo智能化检测识别分析系统

在数字经济浪潮的推动下&#xff0c;全力发展新质生产力已成为当今社会发展的主旋律。各行各业正经历着前所未有的变革&#xff0c;其中&#xff0c;电商行业作为互联网经济的重要组成部分&#xff0c;更是以惊人的速度重塑着商业格局与消费模式。AI智能化技术的深度融合&#…

C与Python Socket性能比较

在比较 C 和 Python 的 Socket 性能时&#xff0c;主要考虑以下几个方面&#xff1a; 运行时性能&#xff1a; C 是编译型语言&#xff0c;生成的机器代码运行速度更快&#xff0c;通常能够提供更低的延迟和更高的吞吐量。Python 是解释型语言&#xff0c;运行时有一定的开销&…

分布式时序数据库TimeLyre 9.2发布:原生多模态、高性能计算、极速时序回放分析

在当今数据驱动的世界中&#xff0c;多模态数据已经成为企业的重要资产。随着数据规模和多样性的不断增加&#xff0c;企业不仅需要高效存储和处理这些数据&#xff0c;更需要从中提取有价值的洞察。工业领域在处理海量设备时序数据的同时&#xff0c;还需要联动分析警报信息、…