活动公告

系统通知
05-18 21:22
系统通知
通知:本站资源由网友上传分享,如有违规等问题请到版务模块进行投诉,资源失效请在帖子内回复要求补档,会尽快处理!
10-23 09:31

详解CentOS Stream环境下静态网页部署全流程从配置到优化的完整指南

SunJu_FaceMall

3万

主题

2860

科技点

3万

积分

白金月票

碾压王

积分
32872

塔罗立华奏

<font color=白金月票" /> 发表于 2025-9-12 21:50:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
引言

CentOS Stream作为RHEL(Red Hat Enterprise Linux)的上游开发平台,为企业和开发者提供了一个稳定、可靠且前瞻性的操作系统环境。在CentOS Stream上部署静态网页是许多开发人员和系统管理员的常见需求,无论是个人博客、企业官网还是项目文档网站,静态网页都因其加载速度快、安全性高和维护成本低而备受青睐。

本文将详细介绍在CentOS Stream环境下部署静态网页的完整流程,从初始环境准备到最终的优化和维护,帮助读者全面掌握静态网页部署的各个环节。

1. 环境准备

1.1 系统安装与更新

首先,确保已正确安装CentOS Stream系统。如果尚未安装,可以从官方网站下载最新的ISO镜像文件进行安装。安装完成后,执行以下命令更新系统:
  1. sudo dnf update -y
复制代码

1.2 系统基本配置

设置合适的主机名:
  1. sudo hostnamectl set-hostname webserver.example.com
复制代码

CentOS Stream默认使用firewalld作为防火墙管理工具。配置防火墙允许HTTP和HTTPS流量:
  1. sudo firewall-cmd --permanent --add-service=http
  2. sudo firewall-cmd --permanent --add-service=https
  3. sudo firewall-cmd --reload
复制代码

SELinux(Security-Enhanced Linux)是CentOS Stream的安全增强功能。确保其处于启用状态:
  1. sudo sestatus
复制代码

如果显示为enabled,则表示SELinux已启用。在后续配置中,我们需要确保文件和目录的SELinux上下文正确设置。

为了安全起见,建议创建一个非root用户用于日常管理:
  1. sudo useradd -m -s /bin/bash webadmin
  2. sudo passwd webadmin
  3. sudo usermod -aG wheel webadmin
复制代码

2. Web服务器选择与安装

在CentOS Stream中,有多种Web服务器可供选择,其中最常用的是Nginx和Apache。下面分别介绍这两种Web服务器的安装方法。

2.1 Nginx安装与配置

使用DNF包管理器安装Nginx:
  1. sudo dnf install nginx -y
复制代码
  1. sudo systemctl start nginx
  2. sudo systemctl enable nginx
复制代码

验证Nginx是否正常运行:
  1. sudo systemctl status nginx
复制代码

或者,在浏览器中访问服务器的IP地址,应该能看到Nginx的默认欢迎页面。

2.2 Apache安装与配置

Apache在CentOS Stream中被称为httpd:
  1. sudo dnf install httpd -y
复制代码
  1. sudo systemctl start httpd
  2. sudo systemctl enable httpd
复制代码

验证Apache是否正常运行:
  1. sudo systemctl status httpd
复制代码

同样,在浏览器中访问服务器的IP地址,应该能看到Apache的默认测试页面。

2.3 选择合适的Web服务器

Nginx和Apache各有优势:

• Nginx:轻量级,高并发性能好,适合静态内容处理,资源占用少。
• Apache:功能丰富,模块众多,配置灵活,适合复杂需求。

对于静态网页部署,Nginx通常是更好的选择,因为它在处理静态文件方面性能更优。本文将以Nginx为主要示例进行讲解。

3. 静态网页文件准备

3.1 创建网站目录结构

在部署静态网页之前,需要创建合适的目录结构来存放网站文件。通常,我们会将网站文件放在/var/www目录下:
  1. sudo mkdir -p /var/www/example.com/html
  2. sudo mkdir -p /var/www/example.com/logs
复制代码

3.2 设置目录权限

设置适当的目录权限,确保Web服务器可以读取文件:
  1. sudo chown -R nginx:nginx /var/www/example.com/html
  2. sudo chmod -R 755 /var/www/example.com/html
复制代码

如果使用Apache,则用户和组应为apache:
  1. sudo chown -R apache:apache /var/www/example.com/html
复制代码

3.3 创建示例静态网页

创建一个简单的HTML页面作为测试:
  1. sudo nano /var/www/example.com/html/index.html
复制代码

添加以下内容:
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <title>Welcome to Example.com</title>
  7.     <style>
  8.         body {
  9.             font-family: Arial, sans-serif;
  10.             line-height: 1.6;
  11.             margin: 0;
  12.             padding: 20px;
  13.             color: #333;
  14.         }
  15.         .container {
  16.             max-width: 800px;
  17.             margin: 0 auto;
  18.             padding: 20px;
  19.             background-color: #f9f9f9;
  20.             border-radius: 5px;
  21.             box-shadow: 0 0 10px rgba(0,0,0,0.1);
  22.         }
  23.         h1 {
  24.             color: #2c3e50;
  25.         }
  26.     </style>
  27. </head>
  28. <body>
  29.     <div class="container">
  30.         <h1>Welcome to Example.com</h1>
  31.         <p>This is a sample static webpage hosted on CentOS Stream with Nginx.</p>
  32.         <p>If you see this page, your web server is successfully installed and working.</p>
  33.     </div>
  34. </body>
  35. </html>
复制代码

保存并退出编辑器。

3.4 设置SELinux上下文

确保SELinux上下文正确设置,允许Web服务器访问文件:
  1. sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/example.com/html(/.*)?"
  2. sudo restorecon -Rv /var/www/example.com/html
复制代码

4. Nginx配置

4.1 创建Nginx服务器块配置

为网站创建Nginx服务器块配置文件:
  1. sudo nano /etc/nginx/conf.d/example.com.conf
复制代码

添加以下配置:
  1. server {
  2.     listen 80;
  3.     server_name example.com www.example.com;
  4.    
  5.     root /var/www/example.com/html;
  6.     index index.html index.htm;
  7.    
  8.     access_log /var/www/example.com/logs/access.log;
  9.     error_log /var/www/example.com/logs/error.log;
  10.    
  11.     location / {
  12.         try_files $uri $uri/ =404;
  13.     }
  14.    
  15.     # Security headers
  16.     add_header X-Frame-Options "SAMEORIGIN" always;
  17.     add_header X-Content-Type-Options "nosniff" always;
  18.     add_header X-XSS-Protection "1; mode=block" always;
  19.     add_header Referrer-Policy "strict-origin-when-cross-origin" always;
  20.    
  21.     # Cache static files
  22.     location ~* \.(jpg|jpeg|png|gif|ico|css|js|pdf|txt)$ {
  23.         expires 7d;
  24.         add_header Cache-Control "public, no-transform";
  25.     }
  26.    
  27.     # Custom error pages
  28.     error_page 404 /404.html;
  29.     error_page 500 502 503 504 /50x.html;
  30.     location = /50x.html {
  31.         root /usr/share/nginx/html;
  32.     }
  33. }
复制代码

保存并退出编辑器。

4.2 测试Nginx配置

在应用新配置之前,先测试Nginx配置文件是否有语法错误:
  1. sudo nginx -t
复制代码

如果显示syntax is ok和test is successful,则表示配置文件没有语法错误。

4.3 重新加载Nginx配置

重新加载Nginx配置以应用更改:
  1. sudo systemctl reload nginx
复制代码

5. 域名与SSL配置

5.1 域名解析设置

确保已注册域名并正确设置DNS解析,将域名的A记录指向服务器的IP地址。这通常在域名注册商的控制面板中完成。

5.2 安装Let’s Encrypt客户端

使用Let’s Encrypt获取免费的SSL证书。首先安装Certbot客户端:
  1. sudo dnf install certbot python3-certbot-nginx -y
复制代码

5.3 获取SSL证书

运行Certbot获取SSL证书:
  1. sudo certbot --nginx -d example.com -d www.example.com
复制代码

按照提示完成证书申请过程。Certbot会自动修改Nginx配置文件以启用HTTPS。

5.4 验证SSL证书

验证SSL证书是否正确安装:
  1. sudo certbot certificates
复制代码

或者,在浏览器中访问https://example.com,检查是否显示安全连接标志。

5.5 设置自动续期

Let’s Encrypt证书有效期为90天,设置自动续期:
  1. sudo systemctl enable --now certbot-renew.timer
复制代码

检查定时器状态:
  1. sudo systemctl status certbot-renew.timer
复制代码

6. 部署测试

6.1 本地测试

在服务器上使用curl命令测试网站是否正常响应:
  1. curl -I http://example.com
  2. curl -I https://example.com
复制代码

6.2 远程测试

从远程计算机或使用在线工具测试网站的可访问性和性能:

• 使用浏览器访问网站
• 使用在线工具如GTmetrix或Google PageSpeed Insights测试性能
• 使用SSL Labs的SSL Test测试SSL配置

6.3 检查日志文件

检查Nginx访问日志和错误日志,确保没有异常:
  1. sudo tail -f /var/www/example.com/logs/access.log
  2. sudo tail -f /var/www/example.com/logs/error.log
复制代码

7. 性能优化

7.1 启用Gzip压缩

编辑Nginx主配置文件:
  1. sudo nano /etc/nginx/nginx.conf
复制代码

在http块中添加或修改以下配置:
  1. gzip on;
  2. gzip_vary on;
  3. gzip_min_length 1024;
  4. gzip_proxied any;
  5. gzip_comp_level 6;
  6. gzip_types
  7.     text/plain
  8.     text/css
  9.     text/xml
  10.     text/javascript
  11.     application/json
  12.     application/javascript
  13.     application/xml+rss
  14.     application/atom+xml
  15.     image/svg+xml;
复制代码

保存并退出,然后重新加载Nginx配置:
  1. sudo systemctl reload nginx
复制代码

7.2 启用浏览器缓存

在服务器块配置中,我们已经为静态文件添加了缓存控制。可以根据需要调整缓存时间:
  1. location ~* \.(jpg|jpeg|png|gif|ico|css|js|pdf|txt)$ {
  2.     expires 30d;
  3.     add_header Cache-Control "public, no-transform";
  4. }
复制代码

7.3 优化Nginx工作进程

编辑Nginx主配置文件:
  1. sudo nano /etc/nginx/nginx.conf
复制代码

根据服务器CPU核心数调整工作进程数:
  1. worker_processes auto;
  2. worker_cpu_affinity auto;
复制代码

调整每个工作进程的最大连接数:
  1. events {
  2.     worker_connections 1024;
  3.     multi_accept on;
  4. }
复制代码

保存并退出,然后重新加载Nginx配置:
  1. sudo systemctl reload nginx
复制代码

7.4 启用HTTP/2

HTTP/2可以显著提高网站加载速度。在服务器块配置中修改监听指令:
  1. listen 443 ssl http2;
复制代码

保存并退出,然后重新加载Nginx配置:
  1. sudo systemctl reload nginx
复制代码

7.5 使用CDN加速

考虑使用内容分发网络(CDN)来加速全球访问。常见的CDN提供商包括Cloudflare、Akamai和Fastly等。

以Cloudflare为例,只需将域名服务器更改为Cloudflare提供的NS记录,然后在Cloudflare控制面板中配置网站即可。

8. 安全加固

8.1 隐藏Nginx版本信息

编辑Nginx主配置文件:
  1. sudo nano /etc/nginx/nginx.conf
复制代码

在http块中添加:
  1. server_tokens off;
复制代码

保存并退出,然后重新加载Nginx配置:
  1. sudo systemctl reload nginx
复制代码

8.2 配置安全响应头

在服务器块配置中,我们已经添加了一些基本的安全响应头。可以根据需要添加更多:
  1. add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' data:; style-src 'self' 'unsafe-inline';" always;
  2. add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
  3. add_header Feature-Policy "geolocation 'self'; microphone 'none'; payment 'none'" always;
复制代码

8.3 限制HTTP请求方法

在服务器块配置中添加:
  1. if ($request_method !~ ^(GET|HEAD|POST)$ ) {
  2.     return 405;
  3. }
复制代码

8.4 防止图片盗链

在服务器块配置中添加:
  1. location ~* \.(jpg|jpeg|png|gif|ico)$ {
  2.     valid_referers none blocked example.com www.example.com;
  3.     if ($invalid_referer) {
  4.         return 403;
  5.     }
  6. }
复制代码

8.5 配置Fail2Ban防止暴力破解

安装Fail2Ban:
  1. sudo dnf install fail2ban -y
复制代码

创建Nginx的Fail2Ban过滤器:
  1. sudo nano /etc/fail2ban/filter.d/nginx-http-auth.conf
复制代码

添加以下内容:
  1. [Definition]
  2. failregex = ^ \[error\] \d+#\d+: \*\d+ user "\S+":? (password mismatch|was not found in ".*"), client: \S+, server: \S+, request: "\S+ \S+ HTTP/\d+\.\d+", host: "\S+"(?:, referrer: "\S+")?\s*$
  3.             ^ \[error\] \d+#\d+: \*\d+ no user/password was provided for basic authentication, client: \S+, server: \S+, request: "\S+ \S+ HTTP/\d+\.\d+", host: "\S+"\s*$
  4. ignoreregex =
复制代码

创建Nginx的Fail2Ban jail:
  1. sudo nano /etc/fail2ban/jail.d/nginx.conf
复制代码

添加以下内容:
  1. [nginx-http-auth]
  2. enabled = true
  3. filter = nginx-http-auth
  4. port = http,https
  5. logpath = /var/log/nginx/error.log
  6. maxretry = 3
  7. findtime = 600
  8. bantime = 3600
复制代码

启动并启用Fail2Ban:
  1. sudo systemctl start fail2ban
  2. sudo systemctl enable fail2ban
复制代码

9. 监控与维护

9.1 安装监控工具

Netdata是一个实时性能和健康监控工具:
  1. sudo dnf install epel-release -y
  2. sudo dnf install netdata -y
  3. sudo systemctl start netdata
  4. sudo systemctl enable netdata
复制代码

访问http://your_server_ip:19999查看Netdata仪表板。

Nginx Amplify是一个免费的监控工具,专门用于监控Nginx性能:
  1. sudo wget https://github.com/nginxinc/nginx-amplify-agent/raw/master/packages/install.sh
  2. sudo API_KEY='YOUR_API_KEY' sh ./install.sh
复制代码

将YOUR_API_KEY替换为在Nginx Amplify网站上注册后获取的实际API密钥。

9.2 设置日志轮转

配置日志轮转以防止日志文件过大:
  1. sudo nano /etc/logrotate.d/nginx
复制代码

添加以下内容:
  1. /var/www/*/logs/*.log {
  2.     daily
  3.     missingok
  4.     rotate 52
  5.     compress
  6.     delaycompress
  7.     notifempty
  8.     create 0640 nginx nginx
  9.     postrotate
  10.         if [ -f /var/run/nginx.pid ]; then
  11.             kill -USR1 `cat /var/run/nginx.pid`
  12.         fi
  13.     endscript
  14. }
复制代码

9.3 设置自动备份

创建备份脚本:
  1. sudo nano /usr/local/bin/backup_website.sh
复制代码

添加以下内容:
  1. #!/bin/bash
  2. # Variables
  3. BACKUP_DIR="/backup"
  4. WEBSITE_DIR="/var/www/example.com"
  5. NGINX_CONF_DIR="/etc/nginx/conf.d"
  6. DATE=$(date +%Y%m%d%H%M%S)
  7. # Create backup directory if it doesn't exist
  8. mkdir -p $BACKUP_DIR
  9. # Backup website files
  10. tar -czf $BACKUP_DIR/website_files_$DATE.tar.gz -C $WEBSITE_DIR .
  11. # Backup Nginx configuration
  12. tar -czf $BACKUP_DIR/nginx_config_$DATE.tar.gz -C $NGINX_CONF_DIR .
  13. # Keep only last 7 days of backups
  14. find $BACKUP_DIR -type f -name "*.tar.gz" -mtime +7 -delete
  15. echo "Backup completed: $DATE"
复制代码

使脚本可执行:
  1. sudo chmod +x /usr/local/bin/backup_website.sh
复制代码

设置定时任务,每天凌晨2点执行备份:
  1. sudo crontab -e
复制代码

添加以下行:
  1. 0 2 * * * /usr/local/bin/backup_website.sh
复制代码

10. 故障排除

10.1 常见Nginx问题及解决方案

如果访问网站时出现403 Forbidden错误,可能是由于文件权限或SELinux设置不正确。

检查文件权限:
  1. ls -la /var/www/example.com/html/
复制代码

确保Web服务器用户(nginx或apache)有读取权限:
  1. sudo chown -R nginx:nginx /var/www/example.com/html
  2. sudo chmod -R 755 /var/www/example.com/html
复制代码

检查SELinux上下文:
  1. ls -dZ /var/www/example.com/html/
复制代码

如果上下文不正确,重新设置:
  1. sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/example.com/html(/.*)?"
  2. sudo restorecon -Rv /var/www/example.com/html
复制代码

502 Bad Gateway错误通常表示Nginx无法与后端服务器通信。对于静态网站,这可能是由于配置错误或资源不足导致的。

检查Nginx错误日志:
  1. sudo tail -f /var/www/example.com/logs/error.log
复制代码

检查系统资源使用情况:
  1. htop
  2. df -h
复制代码

如果资源不足,考虑优化配置或升级服务器硬件。

如果网站加载缓慢,可以采取以下措施进行诊断和优化:

1. 使用WebPageTest或GTmetrix等工具分析网站性能
2. 启用Gzip压缩和浏览器缓存
3. 优化图片大小和格式
4. 考虑使用CDN加速
5. 检查服务器资源使用情况

10.2 SSL证书问题

如果Let’s Encrypt证书自动续期失败,可以尝试手动续期:
  1. sudo certbot renew --dry-run
复制代码

如果测试成功,执行实际续期:
  1. sudo certbot renew
复制代码

检查续期日志以获取更多信息:
  1. sudo tail -f /var/log/letsencrypt/letsencrypt.log
复制代码

如果网站使用HTTPS但仍加载HTTP资源,浏览器会显示混合内容警告。使用浏览器开发者工具查找并修复所有HTTP资源引用。

在Nginx配置中添加Content-Security-Policy头可以帮助防止混合内容:
  1. add_header Content-Security-Policy "upgrade-insecure-requests" always;
复制代码

11. 总结

本文详细介绍了在CentOS Stream环境下部署静态网页的完整流程,从环境准备到性能优化和安全加固。通过遵循本文的指导,读者可以建立一个高性能、安全可靠的静态网站。

主要步骤包括:

1. 系统环境准备和基本配置
2. Web服务器(Nginx或Apache)的安装和配置
3. 静态网页文件的准备和组织
4. 域名解析和SSL证书配置
5. 性能优化措施,如Gzip压缩、浏览器缓存和HTTP/2
6. 安全加固措施,如隐藏版本信息、配置安全响应头和防止暴力破解
7. 监控和维护策略,确保网站长期稳定运行

静态网站部署虽然相对简单,但要做到高性能和高安全性仍需仔细规划和配置。希望本文能为读者提供全面的指导,帮助他们在CentOS Stream环境下成功部署和管理静态网站。

随着技术的发展,静态网站生成器(如Hugo、Jekyll、Hexo等)和现代前端框架(如React、Vue、Angular等)的静态导出功能使得静态网站的开发和部署变得更加便捷。结合本文介绍的服务器配置和优化方法,读者可以构建出功能丰富、性能卓越的静态网站。
「七転び八起き(ななころびやおき)」
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则