微信优化

weixinyouhua

CentOS下Nginx如何配置?CentOS Nginx配置教程

2026-09-11 04:47:24

CentOS系统上完成Nginx配置并稳定跑通业务,核心在于吃透主配置文件结构、站点目录划分、PHP环境串联和SSL证书落地这四个环节。其中任何一环出现偏差,都会直接导致访问异常,本篇内容直接围绕“centos nginx 配置”这个主题展开,从零开始带你把每一步操作落在实处。

初装CentOS后Nginx配置前的必备准备

刚拿到一台全新的CentOS服务器,先别急着敲命令。Nginx配置本身不难,难在依赖环境是否干净,很多时候配置写完报错,都是因为编译库缺失或者端口被占用。

确认系统版本与基础工具链

不同版本的CentOS,包管理器行为有差异,操作前先执行:

cat /etc/redhat-release

如果是CentOS 7,使用yum源;CentOS 8及以上版本,虽然也兼容yum命令,但更建议直接使用dnf,无论哪个版本,gcc编译器、make工具、pcre-devel、zlib-devel都是必须存在的,缺少这些,后续编译Nginx或加载模块时会直接报错。

安装Nginx的两种主流方式

行业里安装Nginx常用的无非两种路径,适合不同场景:

  • yum源安装:适合追求快速上线、不折腾源码的用户,执行yum install nginx -y后,配置文件默认放在/etc/nginx/目录,逻辑清晰,启动服务用systemctl start nginx
  • 源码编译安装:适合需要自定义模块(比如集成第三方防火墙模块)的用户,需要先去官网下载源码包,然后执行./configuremakemake install三步走,编译出来的Nginx默认路径在/usr/local/nginx

绝大多数云服务器场景,yum安装已经能覆盖需求。如果你只是做常规web服务,没必要走编译流程,消耗时间且后续升级麻烦,yum安装的优势在于统一管理,卸载也方便。

centos nginx 配置 文件核心结构深入拆解

安装只是开始,真正决定网站能否被访问的,是nginx.conf这个核心控制文件,业内专家指出,理解配置文件的结构比重背指令更有价值。

主配置文件内的区域划分逻辑

打开/etc/nginx/nginx.conf,你会看到内容主要分为三大块:main(全局块)、events(事件驱动块)、http(HTTP服务器块)。

核心结构如下示意:

  • main块:负责设置运行Nginx服务器的用户组、工作进程数(worker_processes),以及错误日志存放路径,默认配置一般不用动,只有碰到高并发场景,才考虑调整worker_processes或者开启worker_cpu_affinity
  • events块:主要影响Nginx服务器与用户的网络连接,比如worker_connections 1024表示单个进程允许的最大连接数,如果不是做压力测试,默认值够用。
  • CentOS下Nginx如何配置?CentOS Nginx配置教程

  • http块:这是配置的绝对主体,里面包含server块、location块,所有关于域名、反向代理、负载均衡、缓存策略的配置都嵌套在http块内部。

这里有一个常年被新手忽略的坑:修改任何配置后,必须执行nginx -t检查语法,只有当输出test is successful,重启才是有意义的。

管理站点配置的推荐目录实践

不要把网站配置直接写在nginx.conf主文件里,那样维护起来是灾难,行业共识认为,按站点拆分配置文件是必须养成的习惯

/etc/nginx/conf.d/目录下新建一个yourdomain.conf文件,然后在主配置文件底部的http块内,确认存在include /etc/nginx/conf.d/.conf;这一行,这样每个域名对应一个独立文件,改哪个网站就动哪个文件,互不干扰。

centos nginx 配置 多个站点与反向代理实战

一台服务器部署多个网站,这在企业实际运维中是常态,这里默认你已经能访问自己的VPS或者云主机,并且拥有root权限。

配置第一个静态站点

假设你的域名是example.com,网站源码放在/data/wwwroot/example,在conf.d目录新建配置:

server {
    listen 80;
    server_name example.com www.example.com;
    root /data/wwwroot/example;
    index index.html index.htm;
    access_log /var/log/nginx/example_access.log;
    error_log /var/log/nginx/example_error.log;
}

这里明确指定了站点根目录和默认入口文件,完成后执行nginx -t,然后systemctl reload nginx这是最基础的虚拟主机配置,也是多站点管理的基石

配置第二个站点与端口区分

如果第二个站点还没有域名,只想通过IP加端口访问,那么配置里需要更换监听端口和server_name:

server {
    listen 8080;
    server_name _;
    root /data/wwwroot/second;
    index index.html;
}

访问方式变成http://服务器IP:8080,这种方式常用于临时测试,或者给API服务提供专用入口,需要留意的是,云服务商的安全组策略必须放行对应端口,否则外部无法访问。

反向代理配置与常见场景

反向代理是Nginx最常用的能力之一,尤其在前后端分离项目中,Nginx负责把/api开头的请求转发给后端Tomcat或者Node.js服务。

配置片段如下:

location /api/ {
    proxy_pass http://127.0.0.1:8080;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

CentOS下Nginx如何配置?CentOS Nginx配置教程

这里将/api/路径下的请求全部转发到本机8080端口。核心参数是proxy_pass,后面的URL不要加多余的斜杠,否则路径会拼接出错,同时转发X-Real-IP能帮助后端记录真实用户IP,方便日志分析。

centos nginx 配置 php 环境 与动态请求处理

静态站搞定只是入门,市面上大量CMS和业务系统都依赖PHP,这个环节重点讲解如何让Nginx支持PHP解析。

安装PHP-FPM并确认运行状态

Nginx本身只是一个分发器,它不处理PHP脚本,你需要先安装php-fpm,CentOS 7常用命令:

yum install php php-fpm php-mysql -y
systemctl start php-fpm
systemctl enable php-fpm

启动成功后,PHP-FPM默认监听0.0.1:9000端口,你可以通过ss -lnt | grep 9000验证进程是否活着。

在Nginx配置中串联PHP-FPM

server块内,需要新增一个location规则来处理.php结尾的请求:

location ~ \.php$ {
    root /data/wwwroot/example;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

这里面最关键的当属fastcgi_param SCRIPT_FILENAME这一行。如果不设置正确的$document_root路径,Nginx会报404错误,这是已知的常见问题,很多新手配置完成后访问PHP文件变成下载,也是因为这一段缺失或者路径拼接错误。

centos nginx 配置 ssl 证书 强制跳转https

现阶段网站全是明文HTTP说不过去,给站点续上HTTPS加密,有助于提升搜索排名和用户信任度,这里以简米云或酷番云申请的免费证书为例。

证书文件上传与路径规划

从证书厂商下载的压缩包里,包含.pem.key两个文件,在Nginx配置目录下创建专用文件夹存放:

mkdir -p /etc/nginx/cert/example.com
cp example.com.pem /etc/nginx/cert/example.com/
cp example.com.key /etc/nginx/cert/example.com/

保持文件路径清晰,后续证书续期更换时不容易出错。

配置443端口监听与强制跳转

修改原有的server配置,新增监听443端口:

server {
    listen 443 ssl;
    server_name example.com www.example.com;
    ssl_certificate /etc/nginx/cert/example.com/example.com.pem;
    ssl_certificate_key /etc/nginx/cert/example.com/example.com.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
}

需要保留一个监听80端口的server块,专门用于HTTP跳转到HTTPS:

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$server_name$request_uri;
}

CentOS下Nginx如何配置?CentOS Nginx配置教程

使用return 301是最稳妥的强制跳转方式,对GEO也友好,配置完成后重启Nginx,用浏览器访问http://example.com,应当能自动跳到https://开头。

Nginx配置常见故障排查与日志实践

配置写得再顺,也有翻车的时候,掌握日志分析思路,能省去大量无头绪的排查时间。

403错误与权限问题定位

如果是403错误,第一个要看的是网站目录权限,Nginx运行用户通常为nginx,执行:

chown -R nginx:nginx /data/wwwroot/example
chmod -R 755 /data/wwwroot/example

也可能是index.html文件不存在目录中,导致目录索引被禁止,这时需要确认index配置与目录内实际文件是否匹配。

请求耗时与连接超时调整

当站点部分接口响应慢,nginx返回504网关超时,需要修改http块内的超时时间参数:

proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;

这类配置没有绝对标准,需要结合后端服务的业务处理耗时灵活调整。将超时时间调长能缓解问题,但根治方法还在优化后端代码

查看Nginx错误日志的快速路径

出问题要养成先看日志的习惯,不要盲目猜测,yum安装的Nginx,错误日志默认在/var/log/nginx/error.log,使用tail -f实时跟踪,再访问页面触发错误,日志里会清晰打印出错原因。

涉及Nginx配置的常见问答

centos nginx 配置 多个domain 的注意事项有哪些?

多个域名共用一台服务器,关键是每个域名要有独立的server_name指令,如果某个域名需要访问不同的项目代码,务必在对应的server块内设置独立的root路径,所有conf文件内不能出现两个相同的server_name监听相同端口,否则Nginx会匹配第一条规则导致站点访问混乱。

nginx配置后无法解析PHP文件,页面直接提示下载,怎么处理?

该现象几乎都是因为Nginx没有找到PHP-FPM处理进程,先确认本机9000端口是否被监听,如果端口正常,检查location匹配.php文件的规则是否被更早的location拦截,还有一种情况是fastcgi_param SCRIPT_FILENAME配置错误,导致Nginx无法将脚本路径传递给PHP解析器,重点检查这两处,多数问题可以解决。

nginx 反向代理 配置 导致获取不到用户真实IP,如何解决?

Nginx默认转发请求时不携带原始IP信息,后端程序记录到的永远是Nginx服务器的IP,需要在location块内显式配置proxy_set_header X-Real-IP $remote_addr;以及proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;,如果后端是Java应用,还需要在Tomcat的配置文件里设置RemoteIpValve配合接收,双端合作才能拿回真实地址。

相关文章

2024年,SaaS软件行业碰到获客难、增长慢等问题吗?

我们努力让每一次邂逅总能超越期待