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

或者使用netstatss命令(如果已安装):

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.htmlindex.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.htmlindex.htm

4.3 PID(进程标识符)

在Nginx的配置和管理中,nginx.confnginx.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文件位置。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

紫光同创开发板使用教程(二):sbit文件下载

sbit文件相当于zynq里面的bit文件,紫光的fpga工程编译完成后会自动生成sbit文件,因工程编译比较简单,这里不在讲解工程编译,所以我这里直接下载sbit文件。 1.工程编译完成后,可以看到Flow列表里面没有报错&#xff0c…

完美解决:.vmx 配置文件是由 VMware 产品创建,但该产品与此版 VMware Workstation 不兼容

参考文章:该产品与此版 VMware Workstation 不兼容,因此无法使用 问题描述 当尝试使用 VMware Workstation 打开别人的虚拟机时,可能会遇到以下报错: 此问题常见于以下场景: 从其他 VMware 版本(如 ESX…

QQ登录测试用例报告

QQ登录测试用例思维导图 一、安全性测试用例 1. 加密传输与存储验证 测试场景:输入账号密码并提交登录请求。预期结果:账号密码通过加密传输(如HTTPS)与存储(如哈希加盐),无明文暴露。 2. 二…

Docker内存芭蕾:优雅调整容器内存的极限艺术

title: “💾 Docker内存芭蕾:优雅调整容器内存的极限艺术” author: “Cjs” date: “2025-2-23” emoji: “🩰💥📊” 当你的容器变成内存吸血鬼时… 🚀 完美内存编排示范 📜 智能内存管家脚本…

计算机毕业设计SpringBoot+Vue.jst网上购物商城系统(源码+LW文档+PPT+讲解)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

IoT设备硬件攻击技术与接口漏洞利用

IoT设备硬件攻击技术 0x01 总线与接口概述 1.1 UART 概述 UART(Universal Asynchronous Receiver/Transmitter)是一种常见的串行通信协议,广泛用于嵌入式设备中进行调试和数据传输。它通过两根信号线(TX和RX)实现异…

Windows程序设计29:对话框之间的数据传递

文章目录 前言一、父子对话框之间的数据传递1.父窗口获取子窗口数据2.子窗口获取父窗口数据 二、类外函数调用窗口的操作1.全局变量方式2.参数传递方式 总结 前言 Windows程序设计29:对话框之间的数据传递。 在Windows程序设计28:MFC模态与非模态对话框…

敏捷开发07:敏捷项目可视化管理-ScrumBoard(Scrum板)使用介绍

ScrumBoard(Scrum板)介绍 ScrumBoard(Scrum板)是敏捷项目管理中使用的可视化工具,用于跟踪和监控冲刺阶段的任务进度。 主要通过可视化的看板来管理工作,它可视化了敏捷开发中的工作流程、任务状态、团队角色。 Scrum 团队在各…

【每日八股】Redis篇(一):概述

Redis 为什么快? 一句话概括: Redis 之所以快,主要是因为它是基于内存操作的,避免了磁盘 I/O 的开销;采用单线程模型,避免了上下文切换和锁竞争;使用了高效的数据结构和紧凑的编码方式&#xf…

蓝桥杯——按键

一:按键得原理图 二:按键的代码配置 step1 按键原理图对应引脚配置为输入状态 step2 在GPIO中将对应引脚设置为上拉模式 step3 在fun.c中写按键扫描函数 写完后的扫描函数需放在主函数中不断扫描 扫描函数主要通过两个定义变量的值来判断&#xf…

语音控制热水器WTK69000离线语音识别芯片方案:迈向智能家居新时代

一、开发背景 在传统热水器使用中,人们往往需要手动调节水温、选择模式,这不仅操作繁琐,而且容易因误操作导致不必要的能源浪费。为了改善这一现状,热水器厂商开始引入语音识别技术。通过语音识别芯片,热水器能够准确识…

演示基于FPGA的视频图像去雾处理效果

我近期用FPGA开发板做了一个视频图像去雾算法模块,用于验证其能否在不进行帧缓冲的情况下实现去雾功能。 去雾算法来自一篇技术资料(私信提供篇名),其基础是近似的大气光模型。 1 算法原理概要 借助RGB直角坐标空间中的光矢量分…

UE_C++ —— Gameplay Tags

目录 一,Defining Gameplay Tags Adding Tags in Project Settings Importing Tags from Data Table Assets Defining Tags with C 二,Using Defined Gameplay Tags Applying Tags to Objects Evaluating Tags with Conditional Functions 三&am…

计算机视觉算法实战——三维重建(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ 1. 三维重建领域简介 三维重建(3D Reconstruction)是计算机视觉的核心任务之一,旨在通过多视角图像、视频…

Spring5框架八:整合Mybatis

精心整理了最新的面试资料&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 1、导入相关的jar包 <dependencies><!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --><dependency><groupId>…

AI学习第一天-什么是AI

AI的发展可以被分为四次浪潮&#xff0c;这包括符号主义、机器学习与神经网络&#xff0c;以及深度学习。在这些发展中&#xff0c;深度学习凭借其在处理非结构化复杂数据、强大的学习能力和可解释性方面的优势备受关注。深度学习技术的应用不仅提升了AI系统的性能&#xff0c;…

redis-bitmap使用场景

bitmap原理 Bitmap&#xff08;位图&#xff09;是一种基于二进制位的数据结构&#xff0c;用于高效地存储和操作大量的布尔值 可以对单个位进行读写操作 demo package org.example;import org.redisson.Redisson; import org.redisson.api.RBitSet; import org.redisson.ap…

华为 网络安全 认证

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 华为 网络安全 认证&#xff1a;保障信息安全的重要一环 在数字化时代的今天&#xff0c;网络安全成为了企业和个人都需要高度重视的问题。尤其是在企业信息化的…

ubuntu22.04连接github无法访问的问题

目录 说明安装 说明 此方案只针对虚拟机, 如果是云服务器(毕竟是官方维护, github还是能访问到的)多试几次肯定能够访问到的. 国内我们无法访问外网, 所以我们目前能够访问外网的途径基本上只能开佳速器. 所以我们需要选择一款加速器来帮助我们访问外网, 目前市面上很多佳速器…

【Research Proposal】基于提示词方法的智能体工具调用研究——难点

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;一、难点分析1. 提示词方法的多样性和组合问题2. 智能体工具调用的准确性和效率问题3. 多模态任务中的复杂性问题 &#x1f4af;二、解决思路与策略&#x1f…