Nginx学习笔记:常用命令端口占用报错解决Nginx核心配置文件解读
Nginx
- 1. 基础命令
- 1.1 重新加载systemd配置
- 1.2 停止Nginx服务
- 1.3 启动Nginx服务
- 1.4 重启Nginx服务
- 1.5 查看Nginx服务状态
- 1.6 测试配置和重载Nginx
- 2. 额外命令
- 2.1 启用开机自启
- 2.2 禁用开机自启
- 2.3 强制关闭所有Nginx进程
- 3. Nginx端口占用解决方案
- 3.1 查找占用端口8090的进程
- 3.2 终止占用端口的进程
- 3.3 验证端口是否已被释放
- 3.4 重新启动Nginx
- 3.5 修改Nginx配置(可选)
- 4. Nginx配置文件
- 4.1 Web前端资源目录
- 4.2 Conf 配置文件
- 4.2.1 基本配置
- 4.2.2 默认根目录
- 4.2.3 特定路径处理
- 4.3 PID(进程标识符)
- 4.3.1 nginx.conf 中的 PID
- 4.3.2 nginx.service 中的 PID
Nginx(发音为 “engine-x”)是一款高性能的开源Web服务器软件,同时也可用作反向代理、负载均衡器和HTTP缓存。最初由俄罗斯程序员Igor Sysoev开发,并于2004年首次公开发布。Nginx以其高效的并发处理能力、低资源消耗以及高可靠性而著称,特别适用于高流量网站。
1. 基础命令
这些命令适用于大多数Linux发行版,如Ubuntu, CentOS等,它们使用systemd作为初始化系统和服务管理器。
1.1 重新加载systemd配置
当您修改了Nginx的配置文件后,需要重新加载systemd以识别这些更改。
sudo systemctl daemon-reload
1.2 停止Nginx服务
sudo systemctl stop nginx
1.3 启动Nginx服务
sudo systemctl start nginx
1.4 重启Nginx服务
如果您对配置进行了更改,并希望这些更改生效,可以使用restart命令。
sudo systemctl restart nginx
1.5 查看Nginx服务状态
用于检查Nginx服务的状态,包括是否正在运行、最后一次启动时间等信息。
sudo systemctl status nginx
1.6 测试配置和重载Nginx
每次修改配置文件后,使用以下命令进行测试并重载Nginx。
sudo nginx -t # 测试配置文件是否正确
sudo systemctl reload nginx # 重新加载配置
2. 额外命令
2.1 启用开机自启
确保Nginx服务随系统启动而自动启动。
sudo systemctl enable nginx
2.2 禁用开机自启
相反地,如果我们不希望Nginx随系统启动而自动启动,可以使用如下命令。
sudo systemctl disable nginx
2.3 强制关闭所有Nginx进程
仅建议在常规停止方法(如systemctl stop nginx)不起作用时使用。
pkill -9 nginx
请注意,直接杀掉Nginx进程(使用pkill -9 nginx)可能会导致数据丢失或损坏,因为它不会给Nginx机会正常关闭连接和保存状态。因此,尽量使用systemctl stop或其他推荐的方法来停止服务。
3. Nginx端口占用解决方案
错误信息 nginx: [emerg] bind() to 0.0.0.0:8090 failed (98: Address already in use) 表明端口8090已经被其他进程占用,导致Nginx无法绑定到该端口。要解决这个问题,我们需要找出并处理占用该端口的进程。以下是具体的步骤:
3.1 查找占用端口8090的进程
在Linux系统中,可以使用以下命令来查找哪个进程正在使用端口8090:
sudo lsof -i :8090
或者使用netstat或ss命令(如果已安装):
sudo netstat -tuln | grep :8090
sudo ss -tuln | grep :8090
这些命令将显示占用端口8090的进程ID(PID)和相关信息。
3.2 终止占用端口的进程
找到占用端口8090的进程后,你可以通过其PID终止该进程。假设PID为12345,可以使用以下命令终止它:
sudo kill 12345
如果进程无法正常终止,可以强制终止:
sudo kill -9 12345
注意:请确保你终止的是正确的进程,并且了解终止该进程可能带来的影响。
3.3 验证端口是否已被释放
再次运行上述命令(如lsof -i :8090),确认端口8090已经不再被任何进程占用。
3.4 重新启动Nginx
现在尝试重新启动Nginx:
sudo systemctl restart nginx
或者
sudo service nginx restart
3.5 修改Nginx配置(可选)
如果我们不想终止占用端口8090的进程,可以选择修改Nginx配置文件,使用另一个未被占用的端口。编辑Nginx配置文件(通常位于 /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/ 目录下的某个文件),找到监听端口的部分,例如:
server {listen 8090;...
}
将其改为另一个可用端口,如8091:
server {listen 8091;...
}
然后保存更改,并重新加载Nginx配置:
sudo nginx -s reload
通过以上步骤,我们应该能够解决端口冲突的问题,并使Nginx成功启动。
4. Nginx配置文件
4.1 Web前端资源目录
假设我们的Web前端资源文件夹目录长这样:
/home/miqi/web/
├── first/ # 默认根目录
│ ├── index.html # 默认首页文件
│ ├── index.htm # 另一个默认首页文件(如果有)
│ └── resources/ # 资源文件夹
│ ├── images/ # 图片文件
│ ├── css/ # CSS 样式表
│ └── js/ # JavaScript 文件
│
├── news/ # 对应 /category/180918.html
│ ├── 180918.html # 指定的HTML文件
│ ├── index.html # 其他可能的首页文件
│ ├── index.htm # 其他可能的首页文件(如果有)
│ └── resources/ # 资源文件夹
│ ├── images/ # 图片文件
│ ├── css/ # CSS 样式表
│ └── js/ # JavaScript 文件
│
├── about/ # 对应 /category/180917.html
│ ├── 180917.html # 指定的HTML文件
│ ├── index.html # 其他可能的首页文件
│ ├── index.htm # 其他可能的首页文件(如果有)
│ └── resources/ # 资源文件夹
│ ├── images/ # 图片文件
│ ├── css/ # CSS 样式表
│ └── js/ # JavaScript 文件
│
├── online/ # 对应 /category/180920.html
│ ├── 180920.html # 指定的HTML文件
│ ├── index.html # 其他可能的首页文件
│ ├── index.htm # 其他可能的首页文件(如果有)
│ └── resources/ # 资源文件夹
│ ├── images/ # 图片文件
│ ├── css/ # CSS 样式表
│ └── js/ # JavaScript 文件
│
├── product/ # 对应 /category/180919.html
│ ├── 180919.html # 指定的HTML文件
│ ├── index.html # 其他可能的首页文件
│ ├── index.htm # 其他可能的首页文件(如果有)
│ └── resources/ # 资源文件夹
│ ├── images/ # 图片文件
│ ├── css/ # CSS 样式表
│ └── js/ # JavaScript 文件
│
├── contact/ # 对应 /category/180921.html
│ ├── 180921.html # 指定的HTML文件
│ ├── index.html # 其他可能的首页文件
│ ├── index.htm # 其他可能的首页文件(如果有)
│ └── resources/ # 资源文件夹
│ ├── images/ # 图片文件
│ ├── css/ # CSS 样式表
│ └── js/ # JavaScript 文件
│
└── client/ # 对应 /category/180928.html├── 180928.html # 指定的HTML文件├── index.html # 其他可能的首页文件├── index.htm # 其他可能的首页文件(如果有)└── resources/ # 资源文件夹├── images/ # 图片文件├── css/ # CSS 样式表└── js/ # JavaScript 文件
4.2 Conf 配置文件
这时候就会有一个位于 /usr/local/nginx/conf/nginx.conf 的Nginx服务器核心配置文件,主要用于定义服务器的全局设置、HTTP和流模块的配置参数,以及对前端响应进行精细化控制。在其中是server字段中
server {listen 8090;server_name localhost;#charset koi8-r;#access_log logs/host.access.log main;location / {root /home/miqi/web/first/;index index.html index.htm;}location /category/180918.html {alias /home/miqi/web/news/;index 180918.html index.html index.htm;}location /category/180917.html {alias /home/miqi/web/about/;index 180917.html index.html index.htm;} location /category/180920.html {alias /home/miqi/web/online/;index 180920.html index.html index.htm;} location /category/180919.html {alias /home/miqi/web/product/;index 180919.html index.html index.htm;} location /category/180921.html {alias /home/miqi/web/contact/;index 180921.html index.html index.htm;} location /category/180928.html {alias /home/miqi/web/client/;index 180928.html index.html index.htm;}
这段Nginx配置文件定义了一个虚拟服务器,监听在8090端口,并且为不同的URL路径设置了不同的处理规则。以下是对每个部分的详细解释:
4.2.1 基本配置
server {listen 8090;server_name localhost;
listen 8090;:指定服务器监听8090端口。server_name localhost;:指定服务器名称为localhost,即只响应来自本地主机的请求。
4.2.2 默认根目录
location / {root /home/miqi/web/first/;index index.html index.htm;
}
location / { ... }:匹配根路径(/)的所有请求。root /home/miqi/web/first/;:指定文档根目录为/home/miqi/web/first/。这意味着所有对根路径的请求都会从这个目录中查找文件。index index.html index.htm;:如果请求的是一个目录,则尝试返回index.html或index.htm文件作为默认首页。
4.2.3 特定路径处理
接下来的部分定义了多个特定路径的处理规则,使用 alias 指令来指定这些路径对应的物理目录。
location /category/180918.html {alias /home/miqi/web/news/;index 180918.html index.html index.htm;
}
location /category/180918.html { ... }:匹配/category/180918.html路径的请求。alias /home/miqi/web/news/;:将请求映射到/home/miqi/web/news/目录下。注意,alias会替换整个匹配部分(包括/category/180918.html),所以实际访问的是/home/miqi/web/news/180918.html。index 180918.html index.html index.htm;:指定优先级最高的索引文件是180918.html,其次是index.html和index.htm。
4.3 PID(进程标识符)
在Nginx的配置和管理中,nginx.conf 和 nginx.service 所涉及的PID(进程标识符)有不同的用途和配置方式。
4.3.1 nginx.conf 中的 PID
在 nginx.conf 文件中,你可以指定一个指令来定义 Nginx 主进程写入其PID的位置。这个指令是 pid。默认情况下,Nginx 的PID文件路径可能取决于操作系统和安装方式,但通常位于 /var/run/nginx.pid 或 /usr/local/nginx/logs/nginx.pid。你可以在 nginx.conf 中通过如下方式自定义PID文件的位置:
pid /path/to/nginx.pid;
这条指令指定了Nginx主进程将它的进程ID写入到哪个文件中。这对于控制Nginx进程(例如发送信号重启或停止服务)非常有用。
4.3.2 nginx.service 中的 PID
nginx.service 文件是 systemd 服务单元文件的一部分,用于定义如何启动和管理Nginx服务。在这个文件中,PIDFile选项用于告诉systemd在哪里找到服务的PID文件。这有助于systemd跟踪服务的状态和进程ID。如果Nginx使用默认的PID文件位置,则 nginx.service 可能包含如下行:
[Service]
PIDFile=/run/nginx.pid
这里假设PID文件位于 /run/nginx.pid。如果你在 nginx.conf 中更改了PID文件的位置,确保同样更新 nginx.service 文件中的 PIDFile 路径以保持一致性,这样systemd才能正确地管理和监控Nginx服务。
总之,nginx.conf 中的 pid 指令用于指定Nginx应该将自己的PID写入到哪个文件,而 nginx.service 中的 PIDFile 则告知systemd该去哪里查找此PID文件,以便进行服务管理。调整这两个设置时,请确保它们指向相同的PID文件位置。
相关文章:
Nginx学习笔记:常用命令端口占用报错解决Nginx核心配置文件解读
Nginx 1. 基础命令1.1 重新加载systemd配置1.2 停止Nginx服务1.3 启动Nginx服务1.4 重启Nginx服务1.5 查看Nginx服务状态1.6 测试配置和重载Nginx 2. 额外命令2.1 启用开机自启2.2 禁用开机自启2.3 强制关闭所有Nginx进程 3. Nginx端口占用解决方案3.1 查找占用端口8090的进程3…...
Pinia 3.0 正式发布:全面拥抱 Vue 3 生态,升级指南与实战教程
一、重大版本更新解析 2024年2月11日,Vue 官方推荐的状态管理库 Pinia 迎来 3.0 正式版发布,本次更新标志着其全面转向 Vue 3 技术生态。以下是开发者需要重点关注的升级要点: 1.1 核心变更说明 特性3.0 版本要求兼容性说明Vue 支持Vue 3.…...
at32f103a+rtt+AT组件+esp01s 模块使用
AT组件使用 这里需要设置wifi名称和密码 配置使用的串口 配置上边的自动会配置,at_device 依赖了at_client 依赖sal也自动加入 依赖了串口2 uart2 连接WiFi AT+ CWJAP = TP-LINK_45A1...
EasyRTC:全平台支持与自研算法驱动的智能音视频通讯解决方案
在智能硬件的浪潮中,设备之间的互联互通已成为提升用户体验的核心需求。无论是智能家居、智能办公,还是工业物联网,高效的音视频通讯和交互能力是实现智能化的关键。然而,传统音视频解决方案往往面临平台兼容性差、交互体验不佳以…...
Spring 实战技术文档
一、引言 Spring 是一个轻量级的 Java 开发框架,它为企业级开发提供了全面的解决方案,涵盖了从依赖注入、面向切面编程到 Web 开发、数据访问等多个方面。本技术文档旨在通过一个具体的实战项目,详细介绍 Spring 框架的核心特性和使用方法,帮助开发者更好地掌握 Spring 框架…...
设计模式教程:解释器模式(Interpreter Pattern)
1. 什么是解释器模式? 解释器模式(Interpreter Pattern)是一种行为型设计模式,通常用于处理语言(例如数学表达式、SQL查询等)中的语法和解释。该模式定义了一个文法,并通过解释器类来解释文法中…...
ARM SOC 架构系统M系、R系、A系
**SOC R5** 通常指的是基于 **ARM Cortex-R5** 内核的系统级芯片(System on Chip, SoC)。ARM Cortex-R5 是属于 **ARM Cortex-R 系列**的处理器内核,Cortex-R 系列专为实时性要求较高的嵌入式应用设计,主要目标是实现高性能、低延…...
Hutool - Script:脚本执行封装,以 JavaScript 为例
一、简介 在 Java 开发中,有时需要动态执行脚本代码,比如 JavaScript 脚本,来实现一些灵活的业务逻辑,如动态规则计算、数据处理等。Java 本身提供了 javax.script 包来支持脚本执行,但使用起来较为繁琐。Hutool - Sc…...
【开源项目】分布式文本多语言翻译存储平台
分布式文本多语言翻译存储平台 地址: Gitee:https://gitee.com/dreamPointer/zza-translation/blob/master/README.md 一、提供服务 分布式文本翻译服务,长文本翻译支持流式回调(todo)分布式文本多语言翻译结果存储服…...
小智机器人CMakeLists编译文件解析
编译完成后,成功烧录! 这段代码是一个CMake脚本,用于配置和构建一个嵌入式项目,特别是针对ESP32系列芯片的项目。CMake是一个跨平台的构建系统,用于管理项目的编译过程。 set(SOURCES "audio_codecs/audio_code…...
SOME/IP--协议英文原文讲解11
前言 SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块: 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 4.2.6 Er…...
python~http的请求参数中携带map
背景 调试 http GET请求的 map 参数,链路携带参数一直有问题,最终采用如下方式携带map 解决 user{"demo":"true","info":"王者"}url encode之后的效果如下所示 user%7B%22demo%22:%22true%22,%22info%22:%22…...
深研究:与Dify建立研究自动化应用
许多个人和团队面临筛选各种网页或内部文档的挑战,以全面概述一个主题。那么在这里我推荐大家使用Dify,它是一个用于LLM应用程序开发的低代码,开源平台,它通过自动化工作流程的多步搜索和有效汇总来解决此问题,仅需要最小的编码。 在本文中,我们将创建“ Deepresearch”…...
ESP32S3:参考官方提供的led_strip组件使用 SPI + DMA 方式驱动WS2812 RGB灯的实现思路 (实现各个平台移植使用该方式)
目录 引言使用SPI + DMA 方式实现思路分析1. 查看WS2812的datasheet手册2. 根据官方的led_strip组件的方式,自己手把手实现一遍3.完整的程序(实现霓虹灯效果)引言 参考官方提供的led_strip组件使用 SPI + DMA 方式驱动WS2812 RGB灯的实现思路,只有明白实现的思路,方能将其…...
Http模块及练习
### 作业 1. 静态文件服务器 js const http await import(http) const fs await import(fs) const proc ((req,res)>{ let file ./public${req.url} let FilePath file.replace(favicon.ico,"") // 检查文件是否存在 if (!fs.existsSync(FilePa…...
计算机视觉行业洞察--影像行业系列第一期
计算机视觉行业产业链的上下游构成相对清晰,从基础技术研发到具体应用场景的多个环节相对成熟。 以下是我结合VisionChina经历和行业龙头企业对计算机视觉行业产业链上下游的拆解总结。 上下游总结 上游产业链分为软硬件两类,视觉的硬件主要指芯片、…...
C语言番外篇(3)------------>break、continue
看到我的封面图的时候,部分读者可能认为这和编程有什么关系呢? 实际上这个三个人指的是本篇文章有三个部分组成。 在之前的博客中我们提及到了while循环和for循环,在这里面我们学习了它们的基本语法。今天我们要提及的是关于while循环和for…...
【NLP 31、预训练模型的发展过程】
人的行为,究竟是人所带来的思维方式不同还是与机器一样,刻在脑海里的公式呢? 只是因为不同的人公式不同,所以人的行为才不同,可这又真的是人引以为傲的意识吗? 人脑只是相当于一个大型、驳杂的处理器&#…...
sqlclchery面对复杂的sql语句怎么办
面对复杂的SQL语句时,可以采取以下步骤来简化和解决问题: 理解需求 明确查询的目标,确保清楚需要获取哪些数据。 分解查询 将复杂查询拆分为多个简单部分,逐步构建最终结果。 使用注释 添加注释,解释每个部分的逻辑&…...
C++/JavaScript ⭐算法OJ⭐下一个排列
题目描述 31. Next Permutation A permutation of an array of integers is an arrangement of its members into a sequence or linear order. For example, for arr [1,2,3], the following are all the permutations of arr: [1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1]…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
