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]…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...
Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...
