当前位置: 首页 > news >正文

CentOS下Nginx服务器搭建全攻略

Nginx 安装与配置完整指南

一、安装 Nginx

1.1 添加 Nginx 官方仓库

在 CentOS 系统中,默认仓库的 Nginx 版本可能较旧(通常为 1.12 或更早版本),建议添加官方仓库来安装最新稳定版本(目前为 1.25.x):

sudo tee /etc/yum.repos.d/nginx.repo <<EOF
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/
gpgcheck=0
enabled=1
EOF

此命令会创建 /etc/yum.repos.d/nginx.repo 文件,配置 Nginx 官方 YUM 仓库。其中:

  • baseurl 会根据 CentOS 版本自动匹配(例如 CentOS 7 对应 7/$basearch/,CentOS 8 对应 8/$basearch/)
  • gpgcheck=0 表示不进行 GPG 验证(生产环境建议设为1并导入密钥:sudo rpm --import http://nginx.org/keys/nginx_signing.key
  • enabled=1 表示启用该仓库

1.2 安装 Nginx 软件包

sudo yum install -y nginx

安装完成后,系统会自动创建以下重要文件和目录:

  • 主程序/usr/sbin/nginx
  • 配置文件目录/etc/nginx/
    • 主配置文件:nginx.conf
    • 虚拟主机配置目录:conf.d/
    • 模块配置目录:modules-available/
  • 默认网站目录/usr/share/nginx/html
  • 日志目录/var/log/nginx/
    • 访问日志:access.log
    • 错误日志:error.log
  • 系统服务单元/usr/lib/systemd/system/nginx.service

1.3 启动服务并设置开机自启

# 启动Nginx服务
sudo systemctl start nginx# 设置开机自动启动
sudo systemctl enable nginx

验证服务状态:

sudo systemctl status nginx

正常输出应显示"active (running)"状态。常见状态说明:

  • active (running):服务正常运行
  • failed:启动失败(需检查日志)
  • inactive (dead):服务已停止

二、防火墙配置

2.1 开放基础端口

# 永久开放HTTP(80)和HTTPS(443)服务
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https# 重新加载防火墙规则
sudo firewall-cmd --reload

对于云服务器(如AWS、阿里云等),还需在安全组中开放80和443端口:

  1. 登录云平台控制台
  2. 找到对应实例的安全组配置
  3. 添加入站规则:TCP 80和443,源地址0.0.0.0/0

2.2 可选端口管理

查看已开放端口和服务:

sudo firewall-cmd --list-all

输出示例:

public (active)target: defaulticmp-block-inversion: nointerfaces: eth0sources: services: dhcpv6-client http https sshports: protocols: masquerade: noforward-ports: source-ports: icmp-blocks: rich rules: 

临时开放特定端口(测试用,重启后失效):

sudo firewall-cmd --add-port=8080/tcp

永久开放端口:

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

三、验证安装

访问服务器公网 IP(如 http://你的服务器IP),应看到 Nginx 默认欢迎页(显示"Welcome to nginx!")。

若无法访问,检查步骤:

  1. 检查防火墙设置
    sudo firewall-cmd --list-all
    

  2. 确认服务器网络配置
    curl -I localhost  # 本地测试
    ping 你的服务器IP  # 检查网络连通性
    

  3. 查看 Nginx 错误日志
    sudo tail -f /var/log/nginx/error.log
    

  4. 检查端口监听状态
    sudo netstat -tulnp | grep nginx
    

    正常应显示:
    tcp   0   0 0.0.0.0:80    0.0.0.0:*    LISTEN   1234/nginx: master
    

四、配置文件结构

4.1 主要配置文件

  • 主配置文件/etc/nginx/nginx.conf
    • 包含全局设置、events 块和 http 块
    • 通常通过 include 指令加载其他配置文件

典型结构示例:

user  nginx;
worker_processes  auto;error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;events {worker_connections  1024;
}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;gzip  on;include /etc/nginx/conf.d/*.conf;
}

  • 虚拟主机配置目录/etc/nginx/conf.d/
    • 建议每个站点单独创建 .conf 文件
    • 文件名通常与域名一致,如 example.com.conf

4.2 重要目录

  • 默认网站根目录/usr/share/nginx/html

    • 存放静态网页文件
    • 可修改为自定义路径
  • 日志文件

    • 访问日志:/var/log/nginx/access.log
      • 记录所有访问请求
    • 错误日志:/var/log/nginx/error.log
      • 记录Nginx运行错误和警告
  • PID 文件/run/nginx.pid

    • 存储Nginx主进程的进程ID
    • 用于服务管理和进程控制

五、虚拟主机配置示例

5.1 创建站点配置文件

/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;# 日志配置access_log /var/log/nginx/example.com.access.log main;error_log /var/log/nginx/example.com.error.log warn;# 默认请求处理location / {try_files $uri $uri/ =404;}# 静态文件缓存设置location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {expires 30d;add_header Cache-Control "public, no-transform";}# 禁止访问隐藏文件location ~ /\. {deny all;}# 自定义错误页面error_page 404 /404.html;error_page 500 502 503 504 /50x.html;
}

5.2 创建网站目录并设置权限

# 创建网站目录
sudo mkdir -p /var/www/example.com# 设置目录所有权(Nginx运行用户通常为nginx)
sudo chown -R nginx:nginx /var/www/example.com# 设置目录权限
sudo chmod -R 755 /var/www/example.com# 创建测试页面
echo "<!DOCTYPE html>
<html>
<head><title>Welcome to example.com</title>
</head>
<body><h1>Welcome to example.com</h1><p>This is a test page for Nginx configuration.</p>
</body>
</html>" | sudo tee /var/www/example.com/index.html# 创建错误页面
echo "<h1>404 Not Found</h1>" | sudo tee /var/www/example.com/404.html
echo "<h1>50x Server Error</h1>" | sudo tee /var/www/example.com/50x.html

5.3 测试并重载配置

# 测试配置语法是否正确
sudo nginx -t# 如果测试通过,平滑重载配置(不影响现有连接)
sudo systemctl reload nginx# 或者完全重启服务(会中断现有连接)
sudo systemctl restart nginx

配置测试成功输出:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

六、常见问题解决方案

6.1 Nginx 启动失败

检查步骤:

  1. 查看错误信息

    sudo journalctl -xe
    sudo tail -f /var/log/nginx/error.log
    

  2. 端口冲突检查

    sudo netstat -tulnp | grep :80
    

    如果其他服务(如Apache)占用了80端口,需要先停止它们:

    sudo systemctl stop httpd
    sudo systemctl disable httpd
    

  3. 配置文件测试

    sudo nginx -t
    

  4. 检查SELinux状态

    getenforce
    

6.2 SELinux 相关问题

临时解决方案(不推荐生产环境):

sudo setenforce 0

永久解决方案(需重启生效):

sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

更安全的做法是配置正确的SELinux上下文:

# 为网站目录设置httpd上下文
sudo chcon -R -t httpd_sys_content_t /var/www/example.com# 允许Nginx访问网络
sudo setsebool -P httpd_can_network_connect 1

七、性能优化建议

7.1 进程配置优化

/etc/nginx/nginx.conf 示例:

worker_processes auto;  # 自动匹配CPU核心数
worker_rlimit_nofile 65535;  # 提高worker进程能打开的文件描述符数量events {worker_connections 4096;  # 每个worker的最大连接数use epoll;  # 高效事件模型(Linux专用)multi_accept on;  # 一次接受多个连接
}

调整系统限制:

# 编辑/etc/security/limits.conf
echo "nginx soft nofile 65535" | sudo tee -a /etc/security/limits.conf
echo "nginx hard nofile 65535" | sudo tee -a /etc/security/limits.conf

7.2 连接优化

http {keepalive_timeout 65;  # 保持连接的超时时间keepalive_requests 100;  # 单个连接的最大请求数sendfile on;  # 启用高效文件传输tcp_nopush on;  # 优化数据包发送tcp_nodelay on;  # 禁用Nagle算法client_body_buffer_size 10K;client_header_buffer_size 1k;client_max_body_size 8m;large_client_header_buffers 2 1k;
}

7.3 压缩配置

gzip on;
gzip_min_length 1k;  # 最小压缩文件大小
gzip_comp_level 6;  # 压缩级别(1-9)
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_vary on;  # 根据客户端支持情况决定是否压缩
gzip_disable "MSIE [1-6]\.";  # 对旧版IE禁用压缩
gzip_proxied any;  # 对所有代理请求启用压缩

7.4 缓存优化

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m use_temp_path=off;server {location / {proxy_cache my_cache;proxy_cache_key "$scheme$request_method$host$request_uri";proxy_cache_valid 200 304 12h;proxy_cache_valid any 10m;add_header X-Proxy-Cache $upstream_cache_status;}
}

创建缓存目录并设置权限:

sudo mkdir -p /var/cache/nginx
sudo chown nginx:nginx /var/cache/nginx

八、HTTPS 配置建议

8.1 使用 Certbot 自动配置

安装 Certbot(Let's Encrypt客户端):

sudo yum install -y epel-release
sudo yum install -y certbot python3-certbot-nginx

申请证书(自动配置Nginx):

sudo certbot --nginx -d example.com -d www.example.com

按照提示操作后,Certbot会:

  1. 验证域名所有权
  2. 获取SSL证书
  3. 自动修改Nginx配置启用HTTPS
  4. 设置自动续期任务

手动续期测试:

sudo certbot renew --dry-run

查看自动续期任务:

sudo systemctl list-timers | grep certbot

8.2 手动配置示例

/etc/nginx/conf.d/example.com_ssl.conf

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 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305';ssl_prefer_server_ciphers on;ssl_session_cache shared:SSL:10m;ssl_session_timeout 10m;ssl_session_tickets off;# OCSP Staplingssl_stapling on;ssl_stapling_verify on;resolver 8.8.8.8 8.8.4.4 valid=300s;resolver_timeout 5s;# 其他站点配置...root /var/www/example.com;index index.html;location / {try_files $uri $uri/ =404;}
}# HTTP重定向到HTTPS
server {listen 80;server_name example.com www.example.com;return 301 https://$host$request_uri;
}

配置完成后测试并重载:

sudo nginx -t
sudo systemctl reload nginx

检查SSL配置质量:

curl -I https://example.com
openssl s_client -connect example.com:443 -servername example.com | openssl x509 -noout -text

可以使用在线工具测试SSL配置:

  • SSL Labs Test
  • Mozilla SSL Config Generator

相关文章:

  • 做网站和软件哪个挣钱宁波seo优化定制
  • wordpress图片站点seo站外优化最主要的是什么
  • wordpress商城 微信支付北仑seo排名优化技术
  • 印刷报价网站源码seo百度贴吧
  • 怎么用腾讯云做网站0元做游戏代理
  • 网站建设价格是哪些方面决定的做一个网站需要什么
  • kotlin中::class.java的意义
  • 简单使用python
  • 【零基础学AI】第5讲:Pandas数据处理
  • CSMA/CD相关习题---谢希仁课后题
  • 【redis使用场景——缓存——数据过期策略 】
  • 国外开源客服系统chathoot部署,使用教程
  • Python实例题:基于 Flask 的博客系统
  • 人工智能编程三大核心流程详解--机器学习、神经网络、NLP自然语言处理
  • K8s: Kubernetes
  • 权威认证!华宇TAS应用中间件荣获CCRC“中间件产品安全认证”
  • Beam2.61.0版本消费kafka重复问题排查
  • SQL SERVER存储过程
  • SQL重置自增
  • Solidity学习 - 认识Solidity合约结构
  • Windows命令连接符的安全风险分析与防御策略
  • [附源码+数据库+毕业论文+开题报告]基于Spring+MyBatis+MySQL+Maven+jsp实现的宠物领养管理系统,推荐!
  • 无人机关键算法分析 ( MPU6050 ,PID,滤波,四元数,欧拉角,IMU 姿态解算)
  • vue3中使用vue-grid-layout来实现可拖动的仪表盘面板
  • 深度学习在智能物流中的创新应用与未来趋势
  • 在统信UOS(Linux)中构建SQLite3桌面应用笔记