CentOS 如何安装并配置 Nginx

📅 2026/6/18 16:33:17
CentOS 如何安装并配置 Nginx
从零开始在 CentOS 上装好 Nginx配置好虚拟主机十分钟上线。一、为什么选 Nginx如果你在 CentOS 上搭建 Web 服务Nginx几乎是首选。对比项NginxApache并发能力极强事件驱动架构较弱进程/线程模型内存占用低约 2~3MB/进程高静态文件非常快一般反向代理原生支持配置简单需要额外模块配置语法简洁清晰相对复杂一句话高性能、低资源、易配置。适合做 Web 服务器、反向代理、负载均衡。二、安装前准备开始之前确认以下条件✅ CentOS 7 / 8 / 9本文以CentOS 7为主8/9 差异会标注✅ root 或 sudo 权限✅ 系统已更新sudo yum update -y✅ 关闭 SELinux可选但推荐避免权限问题sudosetenforce0sudosed-is/SELINUXenforcing/SELINUXdisabled//etc/selinux/config三、安装 NginxCentOS 7 — 使用 EPEL 源推荐CentOS 7 官方源里的 Nginx 版本较老1.16建议用 EPEL 源安装最新稳定版。# 1. 安装 EPEL 源sudoyuminstall-yepel-release# 2. 安装 Nginxsudoyuminstall-ynginx# 3. 查看安装的版本nginx-v输出类似nginx version: nginx/1.24.0CentOS 8 / 9 — 使用 AppStream 源sudodnfinstall-ynginxCentOS 8/9 自带的 Nginx 版本已经比较新1.18一般不需要额外源。如果需要最新版所有版本通用使用官方源安装最新稳定版# CentOS 7sudoyuminstall-yyum-utilssudoyum-config-manager --add-repo https://nginx.org/packages/centos/7/x86_64/sudoyuminstall-ynginx# CentOS 8/9sudodnfinstall-ydnf-plugins-coresudodnf config-manager --add-repo https://nginx.org/packages/centos/8/x86_64/sudodnfinstall-ynginx⚠️ 用官方源后系统自带的yum install nginx会被覆盖。如需切回删除/etc/yum.repos.d/nginx.repo即可。四、启动 Nginx 并设置开机自启# 启动sudosystemctl start nginx# 设置开机自启sudosystemctlenablenginx# 查看状态sudosystemctl status nginx看到active (running)就说明启动成功了。五、配置防火墙CentOS 默认开启 firewalld需要放行 HTTP 和 HTTPS 端口sudofirewall-cmd--permanent--add-servicehttpsudofirewall-cmd--permanent--add-servicehttpssudofirewall-cmd--reload验证sudofirewall-cmd --list-all应该能看到http和https在 services 列表里。六、验证安装在浏览器中访问服务器 IPhttp://你的服务器IP如果看到 Nginx 默认欢迎页面Welcome to nginx!说明安装成功 ✅默认网页文件位置/usr/share/nginx/html/index.html七、Nginx 目录结构先搞清楚文件在哪目录用途/etc/nginx/nginx.conf主配置文件所有配置从这里开始/etc/nginx/conf.d/额外配置文件目录虚拟主机放这里/usr/share/nginx/html/默认网站根目录/var/log/nginx/访问日志和错误日志/var/run/nginx.pidNginx 进程 PID 文件八、配置虚拟主机核心Nginx 的虚拟主机叫server block和 Apache 的 VirtualHost 一个意思。1. 创建网站目录sudomkdir-p/var/www/example.comsudochown-R$USER:$USER/var/www/example.comsudochmod-R755/var/www/example.com2. 创建测试页面echoh1Hello, example.com!/h1/var/www/example.com/index.html3. 创建虚拟主机配置sudovim/etc/nginx/conf.d/example.com.conf写入以下内容server { listen 80; server_name example.com www.example.com; root /var/www/example.com; index index.html index.htm; location / { try_files $uri $uri/ 404; } # 访问日志可选 access_log /var/log/nginx/example.com_access.log; error_log /var/log/nginx/example.com_error.log; }指令含义listen 80监听 80 端口HTTPserver_name绑定的域名支持多个用空格隔开root网站根目录index默认首页文件try_files找不到文件时返回 404防止目录遍历4. 检查配置是否正确sudonginx-t看到以下输出就没问题nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful5. 重载配置sudosystemctl reload nginx✅reload不中断服务restart会短暂中断。日常改配置用reload。九、配置 HTTPS接 Let’s Encrypt 免费证书HTTPS 配置和 HTTP 几乎一样只是多了 SSL 相关指令。方式一Certbot 一键配置最简单sudoyuminstall-yepel-releasesudoyuminstall-ycertbot python3-certbot-nginxsudocertbot--nginx-dexample.com-dwww.example.com按提示输入邮箱选择是否强制 HTTPS一条命令搞定证书申请 Nginx 配置 自动重定向。方式二手动配置server { listen 443 ssl http2; server_name example.com www.example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; root /var/www/example.com; index index.html index.htm; location / { try_files $uri $uri/ 404; } } # HTTP → HTTPS 301 重定向 server { listen 80; server_name example.com www.example.com; return 301 https://$host$request_uri; }十、常用操作命令速查操作命令启动sudo systemctl start nginx停止sudo systemctl stop nginx重载配置sudo systemctl reload nginx重启sudo systemctl restart nginx查看状态sudo systemctl status nginx检查配置sudo nginx -t查看版本nginx -v测试配置并退出sudo nginx -t sudo systemctl reload nginx十一、配置反向代理高频使用场景如果你的应用跑在127.0.0.1:3000想通过example.com访问server { listen 80; server_name example.com; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }常用后端场景后端proxy_passNode.jshttp://127.0.0.1:3000Python/Gunicornhttp://127.0.0.1:8000Java/Tomcathttp://127.0.0.1:8080Docker 容器http://172.17.0.1:端口十二、常见问题排查问题原因解决方案浏览器打不开防火墙没放行firewall-cmd --add-servicehttp --permanent firewall-cmd --reload502 Bad Gateway后端服务没启动检查后端进程是否运行curl http://127.0.0.1:3000403 Forbidden目录权限不对sudo chmod -R 755 /var/www/example.com配置改了不生效没 reloadsudo systemctl reload nginxSELinux 报错权限被拦截sudo setenforce 0或设置正确的 SELinux 上下文端口被占用80 端口被其他程序占用sudo netstat -tlnp | grep :80找到并处理十三、总结步骤命令耗时安装 Nginxyum install -y nginx30 秒启动 开机自启systemctl start nginx systemctl enable nginx5 秒放行防火墙firewall-cmd --add-servicehttp --permanent reload5 秒配置虚拟主机创建.conf文件2 分钟检查 重载nginx -t systemctl reload nginx5 秒总计—不到 3 分钟Nginx 的配置逻辑非常清晰一个 server 块 一个网站改完nginx -t验一下reload一下就完事了。装好 Nginx 只是第一步后面搭配Let’s Encrypt 证书 反向代理 自动续期就是一套完整的生产级 Web 服务方案。现在就去把你的网站跑起来