Centos9 安装 nginx 及配置
1. 安装nginx
- 安装依赖软件,安装之前可以看一下是否已经安装过以下软件,
dnf list installed | grep zlib
dnf install gcc-c++
dnf install zlib
dnf install pcre pcre-devel
dnf install openssl openssl-devel
- 下载nginx,这里是下载到opt文件夹
nginx官网下载页面
[root@centoshost opt]# wget https://nginx.org/download/nginx-1.26.3.tar.gz
- 解压nginx,新建一个nginx目录
[root@centoshost opt]# tar -vxf nginx-1.26.3.tar.gz
[root@centoshost opt]# mkdir nginx
- 编译nginx到/opt/nginx
[root@centoshost opt]# cd nginx-1.26.3
[root@centoshost nginx-1.26.3]# ./configure --prefix=/opt/nginx
[root@centoshost nginx-1.26.3]# make
[root@centoshost nginx-1.26.3]# make install
[root@centoshost nginx-1.26.3]# cd ..
[root@centoshost opt]# cd nginx
[root@centoshost nginx]# ll
总用量 4
drwxr-xr-x. 2 root root 4096 4月 20 11:29 conf
drwxr-xr-x. 2 root root 40 4月 20 11:29 html
drwxr-xr-x. 2 root root 6 4月 20 11:29 logs
drwxr-xr-x. 2 root root 19 4月 20 11:29 sbin
- 启动nginx
[root@centoshost nginx]# cd sbin
[root@centoshost sbin]# ll
总用量 3796
-rwxr-xr-x. 1 root root 3914936 4月 20 11:29 nginx
[root@centoshost sbin]# ./nginx
[root@centoshost sbin]# ps -aux|grep nginx
root 1861753 0.0 0.0 4344 1256 ? Ss 11:33 0:00 nginx: master process ./nginx
nobody 1861754 0.0 0.2 13144 4840 ? S 11:33 0:00 nginx: worker process
root 1863247 0.0 0.1 6344 1792 pts/0 R+ 11:34 0:00 grep --color=auto nginx
- 通过浏览器访问服务器的80端口
- 停止nginx
[root@centoshost sbin]# ./nginx -s stop
[root@centoshost sbin]# ps -aux|grep nginx
root 1874737 0.0 0.1 6344 1920 pts/0 S+ 11:38 0:00 grep --color=auto nginx
- 修改配置文件并刷新
[root@centoshost nginx]# pwd
/opt/nginx
[root@centoshost nginx]# ll
总用量 4
drwxr-xr-x. 2 root root 4096 4月 20 11:29 conf
drwxr-xr-x. 2 root root 40 4月 20 11:29 html
drwxr-xr-x. 2 root root 41 4月 20 11:38 logs
drwxr-xr-x. 2 root root 19 4月 20 11:29 sbin
[root@centoshost nginx]# vim ./conf/nginx.conf
[root@centoshost nginx]# ./sbin/nginx -s reload
nginx 常用命令
- nginx 文件,后缀是temp的文件是后来自动生成的,可以删除
[root@centoshost nginx]# ll
总用量 4
drwx------. 2 nobody root 6 4月 20 11:33 client_body_temp
drwxr-xr-x. 2 root root 4096 4月 20 11:41 conf
drwx------. 2 nobody root 6 4月 20 11:33 fastcgi_temp
drwxr-xr-x. 2 root root 40 4月 20 11:29 html
drwxr-xr-x. 2 root root 58 4月 20 14:26 logs
drwx------. 2 nobody root 6 4月 20 11:33 proxy_temp
drwxr-xr-x. 2 root root 19 4月 20 11:29 sbin
drwx------. 2 nobody root 6 4月 20 11:33 scgi_temp
drwx------. 2 nobody root 6 4月 20 11:33 uwsgi_temp
- 启动nginx
[root@centoshost nginx]# ./sbin/nginx
- 刷新配置
[root@centoshost nginx]# ./sbin/nginx -s reload
- 停止nginx
[root@centoshost nginx]# ./sbin/nginx -s stop
- 查看nginx进程
[root@centoshost ~]# ps -aux|grep nginx
2. 配置nginx
超详细配置解释参考文章链接
1. 全局块
全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
- nginx 用户和组的配置,window 下不指定,但是在 linux 里面推荐使用 root
user root;
- 绑定 cup 的核心,默认为 1 一般配置可以 Auto [自动适配操作系统]
worker_processes auto;
- 绑定 nginx 到某一个 cpu 的核心 把 nginx 绑定到所在机器的 1 号和 2 号 CPU 上,01代表1号,10代表2号,这里是2进制
worker_cpu_affinity 01 10
- 添加优先级(-20-20)数字越小优先级越高
worker_priority -20
- 错误日志的存放
error_log logs/error.log;
error_log logs/error.log notice;
error_log logs/error.log info;
- 指定pid文件的存放路径
pid logs/nginx.pid;
2. events块
配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
- 指这一每个工作进程可以同时处理的最大连接数,理论上每台 nginx 服务器的最大连接数为
worker_processes * worker_connections
worker_connections 1024;
- ON 时 Nginx 服务器的每个工作进程可以同时接受多个新的网络连接,此指令默认为 off,即默认为一个工作进程只能一次接受一个连接
multi_accept on;
3. http块
可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
- 加载mime类型,类型由mime.type文件提供
include mime.types;
- 设置mime类型,当文件没有明确定义类型时,使用默认类型
default_type application/octet-stream;
- 设定日志输出格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';
- 日志存放位置
access_log logs/access.log main;
- 为了平衡硬盘和IO的处理速度,降低系统的响应时间
sendfile on;
- 在sendfile为on的状态下,避免网络阻塞
tcp_nopush on;
- 设置服务器和客户端回话的保持时间
#keepalive_timeout 0;
keepalive_timeout 65;
- 开启/关闭gzip压缩
gzip on;
4. server块
每个server块就相当于一台虚拟主机,它内部可有多台主机联合提供服务,一起对外提供在逻辑上关系密切的一组服务(或网站)。在使用Nginx服务器提供Web服务时,利用虚拟主机的技术就可以避免为每一个要运行的网站提供单独的Nginx服务器,也无需为每个网站对应运行一组Nginx进程。虚拟主机技术使得Nginx服务器可以在同一台服务器上只运行一组Nginx进程,就可以运行多个网站。
- 多个server中,主机名与域名不能完全相同
主机名相同,端口要不同;端口相同,主机名要不同
如果两个server的端口和主机名都相同,下面的server将会被忽略
# 该主机的监听端口listen 80;# 设置主机名称或者域名server_name localhost;
5. localtion块
location块的主要作用是,基于Nginx服务器接收到的请求字符串,对除虚拟主机名称之外的字符串进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能都是在这部分实现。许多第三方模块的配置也是在location块中提供功能。
location / {# 设置网站根目录,可指向任何目录,例如:/home/wwwroot/root html;# 设置默认首页,例如:index.htmlindex index.html index.htm;
}
1. location的匹配规则
符号 | 规则 | 优先级 |
---|---|---|
= | 精确匹配 | 1 |
^~ | 以某个字符串开头 | 2 |
~ | 区分大小写的正则匹配 | 3 |
~* | 不区分大小写的正则匹配 | 4 |
!~ | 区分大小写的不匹配正则 | 5 |
!~* | 不区分大小写的不匹配正则 | 6 |
/ | 通用匹配,任何请求都会匹配到 | 7 |
- 示例
# 通用匹配location / {return 200 "通用匹配 location / \n";}# 正则匹配,区分大小写location ~ /hello {return 200 "正则匹配,区分大小写 location ~ /hello/ \n";}# 正则匹配,不区分大小写location ~* /hello {return 200 "正则匹配,不区分大小写 location ~* /hello \n";}# 以...开头的匹配location ^~ /hello {return 200 "以...开头的匹配 location ^~ /hello \n";}# 精确匹配location = /hello {return 200 "精确匹配 location = /hello \n";}
# /hello
精确匹配 location = /hello
# /nginx/hello
正则匹配,区分大小写 location ~ /hello/
# /hellonginx
以...开头的匹配 location ^~ /hello
# /hEllo
正则匹配,不区分大小写 location ~* /hello
# /hello/world
以...开头的匹配 location ^~ /hello
# /world
通用匹配 location /
2. 获取路径参数
location /error {error_page 418 = @error418;error_page 419 = @error419;if ($args ~ "418"){return 418;}if ($args ~ "419"){return 419;}}
location @error418 {return 200 "418 \n";
}
location @error419 {return 200 "419 \n";
}
[root@centoshost nginx]# curl localhost/error?418
418
- 获取完整的请求参数
location /test {return 200 "请求参数为:$args";
}
当访问 http://yourserver.com/test?name=John&age=30 时,Nginx 会返回 请求参数为:name=John&age=30。
- 使用 $arg_参数名 获取指定参数的值
location /test {if ($arg_name) {return 200 "您的名字是:$arg_name";} else {return 400 "未提供名字参数";}
}
当访问 http://yourserver.com/test?name=Alice 时,Nginx 会返回 您的名字是:Alice;如果访问 http://yourserver.com/test,则会返回 未提供名字参数。
- 使用正则表达式匹配路径中的参数
location ~ ^/user/(\w+)$ {set $username $1;return 200 "欢迎,$username!";
}
~ ^/user/(\w+)$ 是一个正则表达式,它匹配以 /user/ 开头,后面跟着一个或多个单词字符的路径。(\w+) 是一个捕获组,捕获到的内容会赋值给 $1 变量,这里通过 set $username $1; 将其赋值给自定义变量 $username。当访问 http://yourserver.com/user/Bob 时,Nginx 会返回 欢迎,Bob!
3. 重定向
浏览器访问a.html
location /a.html {return 301 https://www.baidu.com; # 重定向到百度
}
4. 反向代理
浏览器访问a.html
location /a.html {proxy_pass http://www.baidu.com; # 如果是https需要ssl证书
}
- 使用全局变量设置请求头
location /a.html {porxy_set_header X_Real_IP $remote_addr;proxy_set_header X-Forwarded-Host $http_host;proxy_set_header X-Forwarded-Port $server_port;proxy_set_header X-Forwarded-Server $server_name;proxy_set_header X-Forwarded-Proto $scheme;proxy_set_header X-Forwarded-Url $scheme://$http_host$request_uri;proxy_pass http://www.baidu.com; # 如果是https需要ssl证书
}
5. 开启目录浏览
/menu/download/
URI要与目录路径相匹配
location /menu/download/ {autoindex on; # 开启目录浏览autoindex_exact_size off; # 关闭计算目录文件大小autoindex_localtime on; # 显示本地时间格式
}
-
真实路径
-
效果
6. 全局变量
分类 | 变量名 | 说明 |
---|---|---|
与服务器相关 | $server_name | 当前请求的服务器名称,根据请求的域名确定 |
与服务器相关 | $server_port | 服务器监听的端口号 |
与服务器相关 | $document_root | 当前请求的文档根目录,通常在 server 块中通过 root 指令设置 |
与客户端请求相关 | $remote_addr | 客户端的 IP 地址 |
与客户端请求相关 | $remote_port | 客户端的端口号 |
与客户端请求相关 | $http_user_agent | 客户端发送请求时附带的 User - Agent 字段的值,包含浏览器类型、版本、操作系统等信息 |
与客户端请求相关 | $http_cookie | 客户端发送的 Cookie 信息 |
与客户端请求相关 | $request_method | 客户端的请求方法,如 GET 、POST 、PUT 、DELETE 等 |
与客户端请求相关 | $request_uri | 客户端请求的完整 URI,包括查询字符串。例如,对于请求 http://example.com/index.html?param=value ,$request_uri 的值为 /index.html?param=value |
与客户端请求相关 | $uri | 客户端请求的 URI,不包含查询字符串。对于上述例子,$uri 的值为 /index.html |
与请求处理相关 | $args | 请求中的查询字符串。例如,对于请求 http://example.com/index.html?param=value ,$args 的值为 param=value |
与请求处理相关 | $scheme | 请求使用的协议,通常是 http 或 https |
与请求处理相关 | $server_protocol | 服务器使用的协议版本,如 HTTP/1.1 、HTTP/2 |
与时间相关 | $time_iso8601 | 当前时间的 ISO 8601 格式表示,例如 2025-04-21T12:00:00+08:00 |
与时间相关 | $time_local | 当前时间的本地格式表示,例如 21/Apr/2025:12:00:00 +0800 |
6. 负载均衡
假设有3个服务器同时给我们提供服务,3个服务器的地址分别是:
localhost:8001;
localhost:8002;
localhost:8003;
- 配置nginx反向代理
http {# ... 其他配置# 配置服务组,名字是groupupstream group{server localhost:8001;server localhost:8002;server localhost:8003;}server {listen 80;server_name localhost;charset utf-8;# 配置反向代理,指向服务组location / {proxy_pass http://group;}
}
- 效果:会在3个服务之间轮着使用
- ip_hash
# 配置服务组upstream group{server localhost:8001;server localhost:8002;server localhost:8003;ip_hash;}
效果:用户固定访问一个服务器
ip_hash:Nginx 会根据客户端的 IP 地址进行哈希计算,然后将请求固定地转发到某个上游服务器。这样可以确保来自同一个客户端的请求始终被转发到同一台服务器,对于一些需要保持会话状态的应用(如用户登录后需要在同一台服务器上处理后续请求)非常有用。
- 配置权重
# 配置服务组upstream group{server localhost:8001 weight=1;server localhost:8002 weight=1;server localhost:8003 weight=2;# ip_hash;}
- 效果:服务器的使用会按照权重的比例出现
- 配置最大失败次数和不可用时间
# 配置服务组upstream group{server localhost:8001 weight=1 max_fails=2 fail_timeout=30s;server localhost:8002 weight=1 max_fails=2 fail_timeout=30s;server localhost:8003 weight=2 max_fails=2 fail_timeout=30s;# ip_hash;}
- fail_timeout:定义了服务器失败后的不可用时间
- max_fails:最大失败次数
- 表示在 fail_timeout 时间段内,允许该服务器失败(例如返回错误状态码等情况)的最大失败次数是max_fails。如果在 fail_timeout 内失败次数达到 max_fails 次,Nginx 将认为该服务器暂时不可用,在 fail_timeout 时间段内不会再将请求转发到该服务器。
相关文章:

Centos9 安装 nginx 及配置
1. 安装nginx 安装依赖软件,安装之前可以看一下是否已经安装过以下软件,dnf list installed | grep zlib dnf install gcc-c dnf install zlib dnf install pcre pcre-devel dnf install openssl openssl-devel下载nginx,这里是下载到opt文…...

使用Handsontable实现动态表格和下载表格
1.效果 2.实现代码 首先要加载Handsontable,在示例中我是cdn的方式引入的,vue的话需要下载插件 let hot null;var exportPlugin null;function showHandsontable(param) {const container document.getElementById("hot-container");// 如果…...

Action:Update your application‘s configuration
在使用Maven项目时,有一个报错信息是:Update your applications configuration 这类问题,就是我们的application.yml文件 或者 application.properties文件 内容哪里写错了 最有可能就是对齐方式有问题...

【计算机网络】IP地址
IPv4 五类地址 1.0.0.0 ~ 126.255.255.255A类子网8位,主机24位128.0.0.0 ~ 191.255.255.255B类子网16位,主机16位192.0.0.0 ~ 223.255.255.255C类子网24位,主机8位224.0.0.0 ~ 239.255.255.255D类不分网络地址和主机地址,作为组播…...

Rundeck 介绍及安装:自动化调度与执行工具
Rundeck介绍 概述:Rundeck 是什么? Rundeck 是一款开源的自动化调度和任务执行工具,专为运维场景设计,帮助工程师通过统一的平台管理和执行跨系统、跨节点的任务。它由 PagerDuty 维护(2016 年收购)&#…...

vue element使用el-table时,切换tab,table表格列项发生错位问题
展示问题 问题描述:使用el-table的fixed"right"属性后,如果切换tab时,回出现最后一列错误的问题 官网提供解决方法:doLayout 需要注意的事项:我这里是通过组件使用的table组件,涉及多层组件封装…...

第十二章 Python语言-大数据分析PySpark(终)
目录 一. PySpark前言介绍 二.基础准备 三.数据输入 四.数据计算 1.数据计算-map方法 2.数据计算-flatMap算子 3.数据计算-reduceByKey方法 4.数据计算-filter方法 5.数据计算-distinct方法 6.数据计算-sortBy方法 五.数据输出 1.输出Python对象 (1&am…...
【RedisLockRegistry】分布式锁
RedisLockRegistry分布式锁 介绍 RedisLockRegistry是Spring框架提供的一种分布式锁机制,它基于Redis来实现对共享资源的保护,防止多个进程同时对同一资源进行修改,从而避免数据不一致或其他问题 基本原理 RedisLockRegistry通过Redi…...
leetcode-排序
排序 面试题 01.01. 判定字符是否唯一 题目 实现一个算法,确定一个字符串 s 的所有字符是否全都不同。 示例 1: 输入: s "leetcode" 输出: false 示例 2: 输入: s "abc" 输出: true限制: 0 < len(s) &…...

AD相同网络的铜皮和导线连接不上
出现这样的情况是不是很烦恼,明明是相同的网络连接不上????? 直接修改铜皮属性(选择所有相同这个选项) 这样就可以连接上了...

keil修改字体无效,修改字体为“微软雅黑”方法
在网上下载了微软雅黑字体,微软雅黑参考下载链接 结果在Edit->Configuration中找不到这个字体 这个时候可以在keil的安装目录中找到UV4/global.prop文件 用记事本打开它进行编辑,把字体名字改成微软雅黑 重新打开keil就发现字体成功修改了。 这个…...

【网络编程】从零开始彻底了解网络编程(三)
本篇博客给大家带来的是网络编程的知识点. 🐎文章专栏: JavaEE初阶 🚀若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅🚀 要开心要快乐顺便进步 TCP流…...

NVIDIA --- 端到端自动驾驶
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、传统驾驶模型二、NVIDIA的端到端驾驶模型1.基本模型2.自查讯向量3.通用框架 总结 前言 端到端自动驾驶指的是系统接收来自摄像头雷达和激光雷达的原始传感…...
关于在Springboot中设置时间格式问题
目录 1-设置全局时间格式1.Date类型的时间2.JDK8时间3.使Date类和JDK8时间类统统格式化时间 2-关于DateTimeFormat注解 1-设置全局时间格式 1.Date类型的时间 对于老项目来说,springboot中许多类使用的是Date类型的时间,没有用到LocalDateTime等JDK8时…...

CSRF请求伪造
该漏洞主要是关乎于用户,告诫用户不可乱点击链接,提升自我防范,才能不落入Hacker布置的陷阱! 1. cookie与session 简单理解一下两者作用 1.1. 🍪 Cookie:就像超市的会员卡 存储位置:你钱包里…...

(一)单机架构、应用数据分离架构、应用服务集群架构
文章目录 明确为什么要学习架构的演进单机架构什么是单机架构单机架构的模型单机架构的优缺点优点缺点 单机架构的技术案例 应用数据分离架构什么是应用数据分离架构架构模型应用数据分离架构的优缺点优点缺点 技术案例 应用服务集群架构什么是应用服务集群架构架构模型应用服务…...

Python数据分析案例72——基于股吧评论数据的情感分析和主题建模(LDA)
背景 好久没更新了,最近忙其他去了。最近股市波动太大,看了不少新闻的评论。抽空写了个股吧评论数据的LDA建模和情感分析,简单写到博客上来更新一下。 数据来源 上证指数(000001)股吧_上证指数怎么样_分析讨论社区— 数据来源上述网站的东…...
Git分支管理方案
成都众望智慧有限公司Git分支管理方案 采用 轻量级Git Flow 敏捷版本控制策略,在保证稳定性的同时提升开发效率。以下是优化后的方案: 1. 精简分支模型(相比6-8人团队减少分支层级) 分支类型作用生命周期devops生产环境代码&am…...

力扣-160.相交链表
题目描述 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。 注意,函数返…...
c语言中float和double 类型的区别
在 C 语言里,float和double都用于表示浮点数,不过二者在多个方面存在差异,下面为你详细介绍: 1. 存储空间大小 在 C 语言中,数据类型所占用的存储空间大小通常与编译器和系统架构有关,但一般来说…...

【C++】特殊类的设计、单例模式以及Cpp类型转换
📚 博主的专栏 🐧 Linux | 🖥️ C | 📊 数据结构 | 💡C 算法 | 🅒 C 语言 | 🌐 计算机网络 上篇文章: C 智能指针使用,以及shared_ptr编写 下篇文章ÿ…...

050_基于springboot的音乐网站
一、系统架构 前端:vue | element-ui | html | jquery | css | ajax 后端:springboot | mybatis 环境:jdk1.8 | mysql | maven | nodejs | idea 二、代码及数据 三、功能介绍 01. web端-注册 02. web端-登录 03. web…...
全局变量Msg.sender
msg.sender 在 Solidity 中,有一些全局变量可以被所有函数调用。 其中一个就是 msg.sender,它指的是当前调用者(或智能合约)的 address。 注意:在 Solidity 中,功能执行始终需要从外部调用者开始。 一个合…...

【论文阅读】平滑量化:对大型语言模型进行准确高效的训练后量化
论文题目:SmoothQuant: Accurate and Efficient Post-Training Quantization for Large Language Models 论文地址:[2211.10438] SmoothQuant: Accurate and Efficient Post-Training Quantization for Large Language Models 代码地址:http…...

【资料推荐】LVDS Owner’s Manual
一份年代有些久远的技术资料,但是内容全面且经典! 本用户手册提供了很多有用的信息,首先简要概述了三种最常见的高速接口技术:LVDS(包括B-LVDS和M-LVDS)、CML和LVPECL,并对其相应的特性进行了分…...

ARM Cortex-M (STM32)如何调试HardFault
目录 步骤 1: 实现一个有效的 HardFault 处理程序 步骤 2: 复现 HardFault 并使用调试器分析 步骤 3: 解读故障信息 步骤 4: 定位并修复源代码 HardFault 是 ARM Cortex-M 处理器中的一种异常。当处理器遇到无法处理的错误,或者配置为处理特定类型错误ÿ…...

黑马 redis面试篇笔记
redis主从 version: "3.2"services:r1:image: rediscontainer_name: r1network_mode: "host"entrypoint: ["redis-server", "--port", "7001"]r2:image: rediscontainer_name: r2network_mode: "host"entrypoint:…...
Docker端口映射与容器间DNS发现:打通服务通信的任督二脉
Docker端口映射与容器间DNS发现:打通服务通信的任督二脉 一、端口映射深度解析1.1 端口映射核心机制映射规则语法: 1.2 高级映射技巧批量端口映射:查看端口绑定状态: 二、容器间服务发现机制2.1 自定义网络DNS体系DNS解析特性&…...

DBdriver使用taos数据库
首先创建连接 连接后比如数据库里有三个库 选择其中的hypon 选中localhost,右键sql编辑器,打开sql控制台 就插入了一条数据...

观成科技:摩诃草组织Spyder下载器流量特征分析
一、概述 自2023年以来,摩诃草组织频繁使用Spyder下载器下载远控木马,例如Remcos。观成安全研究团队对近几年的Spyder样本进行了深入研究,发现不同版本的样本在数据加密、流量模式等方面存在差异。基于此,我们对多个版本样本的通…...