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

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

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

相关文章

网络拓扑图绘制全流程:从架构解析到工具实战

在数据呈现与系统管理中&#xff0c;清晰展示设备间的逻辑关系至关重要。网络拓扑图正是这样一种有效的可视化工具。它通过节点设备和连接线路&#xff0c;直观呈现网络结构或项目流程中各元素的布局与交互关系&#xff0c;帮助理解系统运作、诊断问题并确保项目顺利进行。 1. …

Git 简介安装教程

&#x1f4e2;欢迎点赞&#x1f44d;收藏⭐留言&#x1f4dd;如有错误敬请指正&#xff01; 目录 一、Git 的安装1.1 Git 的下载1.2 Git 的安装1.2.1 使用许可声明1.2.2 选择安装目录1.2.3 选择安装组件1.2.4 选择开始菜单文件夹1.2.5 选择 Git 默认编辑器1.2.6 决定初始化新项…

鸿蒙NEXT-鸿蒙三层架构搭建,嵌入HMRouter,实现便捷跳转,新手攻略。(2/3)

在上一小节我们已经完成了关于三层架构的搭建&#xff0c;接下来我们来实现在三层架构中的导入依赖&#xff0c;将他们相互联系起来。 第一步&#xff1a;在features产品定制层中&#xff0c;对其中所有的动态共享包导入依赖&#xff0c;示例features>my>oh-package.jso…

【每天一个知识点】语料投毒(Corpus Poisoning)

“语料投毒”&#xff08;Corpus Poisoning&#xff09; 是指攻击者通过向大型语言模型&#xff08;如 ChatGPT&#xff09;使用的外部知识库中注入恶意或误导性文档&#xff0c;从而干扰模型的检索与回答过程&#xff0c;导致其输出错误、虚假或有害内容。 &#x1f50d; 举个…

疏通经脉: Bridge 联通逻辑层和渲染层

本节概述 经过前面两节的开发&#xff0c;我们已经完成了小程序逻辑线程和 UI 线程的启动引擎准备&#xff0c;这节开始&#xff0c;我们将完善 native bridge 层的搭建&#xff0c;构建起逻辑线程和UI线程之间的桥梁。 开始之前我们先来回顾一下逻辑引擎小节相关的流程图: 一…

【攻防篇】解决:阿里云docker 容器中自动启动xmrig挖矿

解决&#xff1a;阿里云服务器docker容器被植入挖矿程序 **1. 紧急处理&#xff1a;停止挖矿进程****&#xff08;1&#xff09;查找并终止 xmrig 进程****&#xff08;2&#xff09;删除恶意文件** **2. 清理被感染的容器****&#xff08;1&#xff09;停止并删除容器****&…

对称非对称加密,https和http,https通讯原理,Charles抓包原理

文章目录 对称加密的非对称加密http和https原理TCP三次握手四次挥手https通讯流程&#xff1a;Charles抓包原理 对称加密的非对称加密 对称加密&#xff1a;发送方的接收方式使用同一个秘钥进行加密和解密&#xff0c;发送方将需要发送的数据&#xff0c;选择某种加密算法&…

Kubernetes(K8s)_15_调度原理

文章目录 Pod调度实现原理调度队列优先队列底层数据 调度缓存调度框架 Pod调度 Pod调度: 通过污点、容忍度和亲和性影响Pod的调度 调度器实现, 其基于配置器构造(其配置来源于配置API)调度过程中任何插件返回拒绝, 都会导致Pod可能再次返回调度队列 如: Pod调度简略流程 调度…

moduo之tcp客户端TcpClient

结构 #mermaid-svg-muvN6eOMXA4rCyXP {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-muvN6eOMXA4rCyXP .error-icon{fill:#552222;}#mermaid-svg-muvN6eOMXA4rCyXP .error-text{fill:#552222;stroke:#552222;}#merm…

中国科技术语杂志中国科技术语杂志社中国科技术语编辑部2025年第3期目录

理论研究 认知术语学与社会认知术语学比较研究 吴小芳; 3-11 大语言模型背景下的术语翻译研究&#xff1a;现状、问题与展望 朱玉彬;王梓; 12-20 航空事件谣言叙事中的术语初探 刘成盼;刘东亮; 21-28 定名研讨 浅谈训诂、训诂学和训诂学术语 林童; 29-35 …

自然语言处理NLP期末复习

目录 第一章1. NLP的基本过程包括哪些-自然语言处理面临的困难是什么2. 自然语言处理算法定义&#xff0c;过程和应用3. 结合自己的研究-描述研究中涉及的自然语言处理模型或算法&#xff0c;模型或算法原理&#xff0c;具体的处理过程4. 自然语言处理的的两大核心任务是5. 程序…

单片机 - STM32F103“复用功能重映射”完整解析:从JTAG释放到TIM重映射实战详解

本文将详细讲解 STM32F103 系列中常见的“复用功能重映射”&#xff08;Remap&#xff09;机制&#xff0c;包括 JTAG 占用、引脚默认功能与复用功能的关系&#xff0c;以及如何通过寄存器或标准库代码实现重映射。以 TIM3 在 PB4/PB5 上输出 PWM 为例&#xff0c;进行实战讲解…

【C语言】知识总结·内存函数

目录 前言&#xff1a; 一、内存复制函数 1. memcpy - 内存块复制 2. memmove - 内存块移动 二、内存设置函数 1. memset - 内存块填充 三、内存比较函数 1. memcmp 2.memchr 三内存分配函数 1 .malloc 2.free 总结&#xff1a; 注意事项&#xff1a; 前言&…

python+uniapp基于微信小程序面向品牌会员的在线商城系统

文章目录 具体实现截图本项目支持的技术路线源码获取详细视频演示&#xff1a;文章底部获取博主联系方式&#xff01;&#xff01;&#xff01;&#xff01;本系统开发思路进度安排及各阶段主要任务java类核心代码部分展示主要参考文献&#xff1a;源码获取/详细视频演示 ##项目…

小鱼fish系统 sudo apt update报错(密钥失效)

在使用小鱼fish提供的系统镜像文件&#xff0c;sudo apt update系统更新时遇到了以下报错&#xff0c;即ROS 2 仓库的 GPG 密钥已过期&#xff0c;以及 Docker 仓库使用了过时的密钥存储方式 fishrosfishros-linux:~$ sudo apt update 获取:1 http://mirrors.tuna.tsinghua.ed…

深度优先搜索 (DFS) 详解

1. 什么是深度优先搜索&#xff1f; 深度优先搜索&#xff08;Depth-First Search, DFS&#xff09;是一种用于遍历或搜索树或图的算法。这个算法会尽可能深地搜索树的分支。当节点v的所在边都已被探寻过&#xff0c;搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进…

文心4.5开源大模型的使用和部署

前言 就在今天&#xff0c;文心4.5模型开源了&#xff0c;不是一个&#xff0c;而是整个系列模型正式开源。很突然&#xff0c;我都震惊了。文心4.5系列开源模型共10款&#xff0c;涵盖了激活参数规模分别为47B 和3B 的混合专家&#xff08;MoE&#xff09;模型&#xff08;最…

HarmonyOs开发之——TypeScript介绍、入门,及 TypeScript、JavaScript、ArkTs的具体区别解读。

HarmonyOs开发之——TypeScript介绍、入门&#xff0c;及 TypeScript、JavaScript、ArkTs的具体区别解读。 一、 开发语言介绍&#xff1a; TypeScript是JavaScript的超集&#xff0c;ArkTS则是TypeScript的超集。ArkTs是 HarmonyOs的主力开发语言&#xff0c;它在TypeScript…

《JMS事务性会话彻底解析:消息监听中的 commit、rollback 和幂等设计》

大家好&#xff0c;我是G探险者&#xff01; &#x1f4cc; 场景引入 在实际项目中&#xff0c;我们常常面临以下挑战&#xff1a; 监听 MQ 消息失败了&#xff0c;希望自动重试&#xff1f;消费 MQ 消息后&#xff0c;要写数据库&#xff0c;但中间报错了&#xff1f;消息处…

vue3 el-table 列增加 自定义排序逻辑

在 Vue 3 中使用 Element Plus 的 <el-table> 组件时&#xff0c;如果你想增加自定义排序逻辑&#xff0c;可以通过以下几个步骤实现&#xff1a; 1. 使用 default-sort 属性 首先&#xff0c;你可以在 <el-table> 组件上使用 default-sort 属性来指定默认的排序…