Nginx学习笔记:常用命令端口占用报错解决Nginx核心配置文件解读

news2025/2/25 0:48:42

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文件位置。

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

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

相关文章

【玩转 Postman 接口测试与开发2_020】(完结篇)DIY 实战:随书示例 API 项目本地部署保姆级搭建教程(含完整调试过程)

《API Testing and Development with Postman》最新第二版封面 文章目录 最新版《Postman 接口测试与开发实战》示例 API 项目本地部署保姆级搭建教程1 前言2 准备工作3 具体部署3.1 将项目 Fork 到自己名下3.2 创建虚拟环境并安装依赖3.3 初始运行与项目调试 4 示例项目的用法…

网络运维学习笔记 021 HCIA-Datacom新增知识点02 SDN与NFV概述

SDN与NFV概述 经典IP网络是一个分布式的、对等控制的网络。 每台网络设备存在独立的数据平面、控制平面和管理平面。 设备的控制平面对等的交互路由协议,然后独立的生成数据平面指导报文转发。 它的优势在于设备与协议解耦,厂家间的兼容性较好且故障场景…

【Linux】多线程 -> 线程同步与基于BlockingQueue的生产者消费者模型

线程同步 条件变量 当一个线程互斥地访问某个变量时,它可能发现在其它线程改变状态之前,它什么也做不了。 例如:一个线程访问队列时,发现队列为空,它只能等待,直到其它线程将一个节点添加到队列中。这…

Docker Mysql 数据迁移

查看启动命令目录映射 查看容器名称 docker ps查看容器的启动命令 docker inspect mysql8.0 |grep CreateCommand -A 20如下图所示:我这边是把/var/lib/mysql 目录映射到我宿主机的/mnt/mysql/data目录下,而且我的数量比较大使用方法1的话时间比较久,所以我采用方法2 如果没…

四步彻底卸载IDEA!!!

各位看官早安午安晚安呀 如果您觉得这篇文章对您有帮助的话 欢迎您一键三连,小编尽全力做到更好 欢迎您分享给更多人哦 大家好,我们今天来学习四步彻底卸载IDEA!!! 首先我要提醒各位 如果你想删除 IDEA 相关&#xf…

HTTP实验(ENSP模拟器实现)

HTTP概述 HTTP(HyperText Transfer Protocol,超文本传输协议),设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。 HTTP定义了多种请求方法,常用的包括: GET:请求资源。 POST&…

【网络安全】常见的web攻击

1、SQL注入攻击 定义: 攻击者在HTTP请求中注入恶意的SQL代码,当服务器利用参数构建SQL语句的时候,恶意的SQL代码被一起构建,并在数据库中执行。 示例: 用户登录: 输入用户名xx, 密码 or 1 …

登录-05.JWT令牌-介绍

一.JWT令牌 JWT令牌是一种简洁的、自包含的格式,用于在通讯双方之间以json数据格式安全的传输数据。说白了,JWT令牌就是将json格式的数据进行封装,从而实现安全传输。 所谓简洁,就是指JWT令牌就是一个简单的字符串。 所谓自包含…

K8S下redis哨兵集群使用secret隐藏configmap内明文密码方案详解

#作者:朱雷 文章目录 一、背景环境及方案说明1.1、环境说明1.2、方案一:使用配置文件设置密码1.3、方案二:使用args 的命令行传参设置密码 二、redis secret configmap deployment参考2.1 创建secret-redis.yaml参考2.2 修改configmap配置参…

Spring框架基本使用(Maven详解)

前言: 当我们创建项目的时候,第一步少不了搭建环境的相关准备工作。 那么如果想让我们的项目做起来方便快捷,应该引入更多的管理工具,帮我们管理。 Maven的出现帮我们大大解决了管理的难题!! Maven&#xf…

鸿蒙NEXT应用App测试-专项测试(DevEco Testing)

注意:大家记得先学通用测试在学专项测试 鸿蒙NEXT应用App测试-通用测试-CSDN博客 注意:博主有个鸿蒙专栏,里面从上到下有关于鸿蒙next的教学文档,大家感兴趣可以学习下 如果大家觉得博主文章写的好的话,可以点下关注…

Rocky8 源码安装 HAProxy

HAProxy 是一款开源的高性能 负载均衡器 和 反向代理 软件,专注于处理高并发流量分发,广泛应用于企业级架构中提升服务的可用性、扩展性和安全性。 一、HAProxy 简介 1.1.HAProxy 是什么? 本质: 基于 C 语言开发 的轻量级工具&a…

【从0做项目】Java文档搜索引擎(9)烧脑终章!

阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 文章导读 零:项目结果展示 一:导入 二:问题引入 1:情…

Linux 第二次脚本作业

1、需求:判断192.168.1.0/24网络中,当前在线的ip有哪些,并编写脚本打印出来。 2、设计一个 Shell 程序,在/userdata 目录下建立50个目录,即 user1~user50,并设置每个目录的权限,其中其他用户的权…

mysql的源码包安装

安装方式一:(编译好的直接安装) 1.添加一块10G的硬盘,给root逻辑卷扩容 (下面安装方式二有,一模一样的装就行,我就不写了,再写的话篇幅就太长了) 2.下载编译好的源码包…

#渗透测试#批量漏洞挖掘#畅捷通T+远程命令执行漏洞

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。 目录 一、漏洞概况 二、攻击特征 三、应急处置…

【2024 CSDN博客之星】大学四年,我如何在CSDN实现学业与事业的“双逆袭”?

前言: Hello大家好,我是Dream。不知不觉2024年已经过去,自己也马上迈入23岁,感慨时间飞快,从19岁刚入大学加入CSDN,到现在大学毕业已经整整四年了。CSDN陪伴我走过了最青涩的四年大学时光,在这里…

06排序 + 查找(D1_排序(D1_基础学习))

目录 学习预热:基础知识 一、什么是排序 二、为什么要排序 三、排序的稳定性 四、排序稳定性的意义 五、排序分类方式 方式一:内外分类 方式二:比较分类 六、排序算法性能评估 1. 算法的时间复杂度 2. 算法的空间复杂度 七、知识小…

【数据挖掘】深度挖掘

【数据挖掘】深度挖掘 目录:1. 减少样本集的数量知识点示例 2. 对噪声比集剪枝知识点示例建立局部树代码示例(使用 Python 和 scikit - learn 库构建局部决策树)代码解释注意事项 最大超平面定义原理求解方法代码示例(使用 Python…

【Linux】基于UDP/TCP套接字编程与守护进程

目录 一、网路套接字编程 (一)基础概念 1、源IP地址与目的IP地址 2、端口号 3、TCP与UDP 4、网络字节序 (二)套接字编程接口 1、socket 常见API 2、sockaddr结构 (三)UDP套接字 1、UDP服务器创建…