当前位置:首页 > 技术 > 正文内容

CentOS 环境下 Nginx 部署与核心配置文件深度解析

访客 技术 2026年7月8日 1

安装与服务初始化

在 CentOS 环境中,通常使用 YUM 包管理器来部署 Nginx:

sudo yum install -y nginx

安装完毕后,利用 systemctl 工具接管服务的生命周期:

# 启动 Nginx 服务
sudo systemctl start nginx

# 配置开机自动启动
sudo systemctl enable nginx

# 验证进程运行状态
ps aux | grep [n]ginx

通过进程列表可以观察到 Nginx 采用 Master-Worker 架构。Worker 进程的数量默认与系统 CPU 核心数相匹配,从而充分利用多核处理能力。

Systemd 单元文件剖析

通过包管理器安装的 Nginx 会自动生成 Systemd 服务脚本,默认路径为 /usr/lib/systemd/system/nginx.service

[Unit]
Description=NGINX High Performance Web Server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -q
ExecStart=/usr/sbin/nginx
ExecReload=/usr/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

如果手动修改了该单元文件,必须执行 sudo systemctl daemon-reload 重新加载守护进程配置。日常维护中,可通过 restartstopstatus 子命令控制服务。

网络端口与连接监控

查看当前 Nginx 的编译参数与版本信息:

nginx -V

为了确认 Nginx 是否正确监听了目标端口,推荐使用更现代的 ss 工具替代传统的 netstat

# 查看 TCP/UDP 监听端口及关联进程
sudo ss -tulpn | grep nginx

参数解析:-t (TCP), -u (UDP), -l (Listening), -p (Process), -n (Numeric)。若需实时追踪连接状态变化,可结合 watch 命令:

watch -n 1 'ss -tulpn | grep nginx'

默认配置下,Nginx 会同时监听 IPv4 和 IPv6 的 80 端口。

防火墙策略放行

若服务器启用了 firewalld,必须显式允许 HTTP 流量通过。放行标准 Web 服务:

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload

当 Nginx 监听非标准端口(如 8888)时,需直接放行特定端口:

sudo firewall-cmd --permanent --add-port=8888/tcp
sudo firewall-cmd --reload

验证规则是否成功应用:

sudo firewall-cmd --list-ports

完成上述配置后,通过客户端浏览器访问服务器 IP,即可正常加载 Nginx 的默认索引页面。

核心配置文件深度解析

Nginx 的主配置文件位于 /etc/nginx/nginx.conf。目录下带有 .default 后缀的文件是官方提供的基础参考模板。通过以下命令可过滤掉注释和空行,直观查看生效配置:

grep -Ev '^\s*#|^\s*$' /etc/nginx/nginx.conf

以下是重构后的主配置文件核心逻辑与详细注解:

# 全局指令块:控制 Nginx 整体运行行为
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;

# Events 模块:定义事件驱动模型
events {
    use epoll;
    worker_connections 2048;
    multi_accept on;
}

# HTTP 模块:处理 Web 请求的核心配置
http {
    include /etc/nginx/mime.types;
    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 /var/log/nginx/access.log main;

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;

    include /etc/nginx/conf.d/*.conf;

    # Server 模块:虚拟主机定义
    server {
        listen 80 default_server;
        listen [::]:80 default_server;
        
        server_name _;
        root /usr/share/nginx/html;

        include /etc/nginx/default.d/*.conf;

        location / {
            try_files $uri $uri/ =404;
        }

        error_page 404 /404.html;
        location = /40x.html {
            internal;
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            internal;
        }
    }
}

配置区块说明

  • 全局块:设定运行身份、Worker 数量及日志路径。worker_processes auto 可自动适配硬件拓扑。
  • Events 块:决定连接处理机制。在 Linux 环境下强烈建议开启 epoll 模型,worker_connections 决定了单进程的最大并发上限。
  • HTTP 块:囊括 MIME 映射、日志格式化、传输层优化(如 sendfile 零拷贝技术)以及子配置文件的引入。
  • Server 块:配置具体的域名绑定(server_name)、端口监听及站点根目录。
  • Location 块:执行 URI 路由匹配,通过 try_files 等指令实现静态资源查找或请求转发。

若需启用 HTTPS,只需在 Server 块中追加 443 端口监听,并配置 ssl_certificatessl_certificate_key 路径即可完成 TLS 握手配置。

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

linux screen 用法详情 (nohup 的替代方案)

一、screen 是什么?能干嘛?screen 是一个终端复用器,可以:在一个 SSH 会话中开多个“虚拟终端”SSH 断线后,程序仍然在后台运行随时重新连接到原来的会话特别适合:nohup 的替代方案跑脚本 / 爬虫 / 训练模型运维、远程开发二、安装 screen# CentOS / Rocky / Almayum install -y screen# Debian / Ubuntuapt i...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。