|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
引言
CentOS Stream作为RHEL(Red Hat Enterprise Linux)的上游开发平台,为企业和开发者提供了一个稳定、可靠且前瞻性的操作系统环境。在CentOS Stream上部署静态网页是许多开发人员和系统管理员的常见需求,无论是个人博客、企业官网还是项目文档网站,静态网页都因其加载速度快、安全性高和维护成本低而备受青睐。
本文将详细介绍在CentOS Stream环境下部署静态网页的完整流程,从初始环境准备到最终的优化和维护,帮助读者全面掌握静态网页部署的各个环节。
1. 环境准备
1.1 系统安装与更新
首先,确保已正确安装CentOS Stream系统。如果尚未安装,可以从官方网站下载最新的ISO镜像文件进行安装。安装完成后,执行以下命令更新系统:
1.2 系统基本配置
设置合适的主机名:
- sudo hostnamectl set-hostname webserver.example.com
复制代码
CentOS Stream默认使用firewalld作为防火墙管理工具。配置防火墙允许HTTP和HTTPS流量:
- sudo firewall-cmd --permanent --add-service=http
- sudo firewall-cmd --permanent --add-service=https
- sudo firewall-cmd --reload
复制代码
SELinux(Security-Enhanced Linux)是CentOS Stream的安全增强功能。确保其处于启用状态:
如果显示为enabled,则表示SELinux已启用。在后续配置中,我们需要确保文件和目录的SELinux上下文正确设置。
为了安全起见,建议创建一个非root用户用于日常管理:
- sudo useradd -m -s /bin/bash webadmin
- sudo passwd webadmin
- sudo usermod -aG wheel webadmin
复制代码
2. Web服务器选择与安装
在CentOS Stream中,有多种Web服务器可供选择,其中最常用的是Nginx和Apache。下面分别介绍这两种Web服务器的安装方法。
2.1 Nginx安装与配置
使用DNF包管理器安装Nginx:
- sudo dnf install nginx -y
复制代码- sudo systemctl start nginx
- sudo systemctl enable nginx
复制代码
验证Nginx是否正常运行:
- sudo systemctl status nginx
复制代码
或者,在浏览器中访问服务器的IP地址,应该能看到Nginx的默认欢迎页面。
2.2 Apache安装与配置
Apache在CentOS Stream中被称为httpd:
- sudo dnf install httpd -y
复制代码- sudo systemctl start httpd
- sudo systemctl enable httpd
复制代码
验证Apache是否正常运行:
- sudo systemctl status httpd
复制代码
同样,在浏览器中访问服务器的IP地址,应该能看到Apache的默认测试页面。
2.3 选择合适的Web服务器
Nginx和Apache各有优势:
• Nginx:轻量级,高并发性能好,适合静态内容处理,资源占用少。
• Apache:功能丰富,模块众多,配置灵活,适合复杂需求。
对于静态网页部署,Nginx通常是更好的选择,因为它在处理静态文件方面性能更优。本文将以Nginx为主要示例进行讲解。
3. 静态网页文件准备
3.1 创建网站目录结构
在部署静态网页之前,需要创建合适的目录结构来存放网站文件。通常,我们会将网站文件放在/var/www目录下:
- sudo mkdir -p /var/www/example.com/html
- sudo mkdir -p /var/www/example.com/logs
复制代码
3.2 设置目录权限
设置适当的目录权限,确保Web服务器可以读取文件:
- sudo chown -R nginx:nginx /var/www/example.com/html
- sudo chmod -R 755 /var/www/example.com/html
复制代码
如果使用Apache,则用户和组应为apache:
- sudo chown -R apache:apache /var/www/example.com/html
复制代码
3.3 创建示例静态网页
创建一个简单的HTML页面作为测试:
- sudo nano /var/www/example.com/html/index.html
复制代码
添加以下内容:
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Welcome to Example.com</title>
- <style>
- body {
- font-family: Arial, sans-serif;
- line-height: 1.6;
- margin: 0;
- padding: 20px;
- color: #333;
- }
- .container {
- max-width: 800px;
- margin: 0 auto;
- padding: 20px;
- background-color: #f9f9f9;
- border-radius: 5px;
- box-shadow: 0 0 10px rgba(0,0,0,0.1);
- }
- h1 {
- color: #2c3e50;
- }
- </style>
- </head>
- <body>
- <div class="container">
- <h1>Welcome to Example.com</h1>
- <p>This is a sample static webpage hosted on CentOS Stream with Nginx.</p>
- <p>If you see this page, your web server is successfully installed and working.</p>
- </div>
- </body>
- </html>
复制代码
保存并退出编辑器。
3.4 设置SELinux上下文
确保SELinux上下文正确设置,允许Web服务器访问文件:
- sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/example.com/html(/.*)?"
- sudo restorecon -Rv /var/www/example.com/html
复制代码
4. Nginx配置
4.1 创建Nginx服务器块配置
为网站创建Nginx服务器块配置文件:
- sudo nano /etc/nginx/conf.d/example.com.conf
复制代码
添加以下配置:
- server {
- listen 80;
- server_name example.com www.example.com;
-
- root /var/www/example.com/html;
- index index.html index.htm;
-
- access_log /var/www/example.com/logs/access.log;
- error_log /var/www/example.com/logs/error.log;
-
- location / {
- try_files $uri $uri/ =404;
- }
-
- # Security headers
- add_header X-Frame-Options "SAMEORIGIN" always;
- add_header X-Content-Type-Options "nosniff" always;
- add_header X-XSS-Protection "1; mode=block" always;
- add_header Referrer-Policy "strict-origin-when-cross-origin" always;
-
- # Cache static files
- location ~* \.(jpg|jpeg|png|gif|ico|css|js|pdf|txt)$ {
- expires 7d;
- add_header Cache-Control "public, no-transform";
- }
-
- # Custom error pages
- error_page 404 /404.html;
- error_page 500 502 503 504 /50x.html;
- location = /50x.html {
- root /usr/share/nginx/html;
- }
- }
复制代码
保存并退出编辑器。
4.2 测试Nginx配置
在应用新配置之前,先测试Nginx配置文件是否有语法错误:
如果显示syntax is ok和test is successful,则表示配置文件没有语法错误。
4.3 重新加载Nginx配置
重新加载Nginx配置以应用更改:
- sudo systemctl reload nginx
复制代码
5. 域名与SSL配置
5.1 域名解析设置
确保已注册域名并正确设置DNS解析,将域名的A记录指向服务器的IP地址。这通常在域名注册商的控制面板中完成。
5.2 安装Let’s Encrypt客户端
使用Let’s Encrypt获取免费的SSL证书。首先安装Certbot客户端:
- sudo dnf install certbot python3-certbot-nginx -y
复制代码
5.3 获取SSL证书
运行Certbot获取SSL证书:
- sudo certbot --nginx -d example.com -d www.example.com
复制代码
按照提示完成证书申请过程。Certbot会自动修改Nginx配置文件以启用HTTPS。
5.4 验证SSL证书
验证SSL证书是否正确安装:
- sudo certbot certificates
复制代码
或者,在浏览器中访问https://example.com,检查是否显示安全连接标志。
5.5 设置自动续期
Let’s Encrypt证书有效期为90天,设置自动续期:
- sudo systemctl enable --now certbot-renew.timer
复制代码
检查定时器状态:
- sudo systemctl status certbot-renew.timer
复制代码
6. 部署测试
6.1 本地测试
在服务器上使用curl命令测试网站是否正常响应:
- curl -I http://example.com
- curl -I https://example.com
复制代码
6.2 远程测试
从远程计算机或使用在线工具测试网站的可访问性和性能:
• 使用浏览器访问网站
• 使用在线工具如GTmetrix或Google PageSpeed Insights测试性能
• 使用SSL Labs的SSL Test测试SSL配置
6.3 检查日志文件
检查Nginx访问日志和错误日志,确保没有异常:
- sudo tail -f /var/www/example.com/logs/access.log
- sudo tail -f /var/www/example.com/logs/error.log
复制代码
7. 性能优化
7.1 启用Gzip压缩
编辑Nginx主配置文件:
- sudo nano /etc/nginx/nginx.conf
复制代码
在http块中添加或修改以下配置:
- gzip on;
- gzip_vary on;
- gzip_min_length 1024;
- gzip_proxied any;
- gzip_comp_level 6;
- gzip_types
- text/plain
- text/css
- text/xml
- text/javascript
- application/json
- application/javascript
- application/xml+rss
- application/atom+xml
- image/svg+xml;
复制代码
保存并退出,然后重新加载Nginx配置:
- sudo systemctl reload nginx
复制代码
7.2 启用浏览器缓存
在服务器块配置中,我们已经为静态文件添加了缓存控制。可以根据需要调整缓存时间:
- location ~* \.(jpg|jpeg|png|gif|ico|css|js|pdf|txt)$ {
- expires 30d;
- add_header Cache-Control "public, no-transform";
- }
复制代码
7.3 优化Nginx工作进程
编辑Nginx主配置文件:
- sudo nano /etc/nginx/nginx.conf
复制代码
根据服务器CPU核心数调整工作进程数:
- worker_processes auto;
- worker_cpu_affinity auto;
复制代码
调整每个工作进程的最大连接数:
- events {
- worker_connections 1024;
- multi_accept on;
- }
复制代码
保存并退出,然后重新加载Nginx配置:
- sudo systemctl reload nginx
复制代码
7.4 启用HTTP/2
HTTP/2可以显著提高网站加载速度。在服务器块配置中修改监听指令:
保存并退出,然后重新加载Nginx配置:
- sudo systemctl reload nginx
复制代码
7.5 使用CDN加速
考虑使用内容分发网络(CDN)来加速全球访问。常见的CDN提供商包括Cloudflare、Akamai和Fastly等。
以Cloudflare为例,只需将域名服务器更改为Cloudflare提供的NS记录,然后在Cloudflare控制面板中配置网站即可。
8. 安全加固
8.1 隐藏Nginx版本信息
编辑Nginx主配置文件:
- sudo nano /etc/nginx/nginx.conf
复制代码
在http块中添加:
保存并退出,然后重新加载Nginx配置:
- sudo systemctl reload nginx
复制代码
8.2 配置安全响应头
在服务器块配置中,我们已经添加了一些基本的安全响应头。可以根据需要添加更多:
- 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;
- add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
- add_header Feature-Policy "geolocation 'self'; microphone 'none'; payment 'none'" always;
复制代码
8.3 限制HTTP请求方法
在服务器块配置中添加:
- if ($request_method !~ ^(GET|HEAD|POST)$ ) {
- return 405;
- }
复制代码
8.4 防止图片盗链
在服务器块配置中添加:
- location ~* \.(jpg|jpeg|png|gif|ico)$ {
- valid_referers none blocked example.com www.example.com;
- if ($invalid_referer) {
- return 403;
- }
- }
复制代码
8.5 配置Fail2Ban防止暴力破解
安装Fail2Ban:
- sudo dnf install fail2ban -y
复制代码
创建Nginx的Fail2Ban过滤器:
- sudo nano /etc/fail2ban/filter.d/nginx-http-auth.conf
复制代码
添加以下内容:
- [Definition]
- 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*$
- ^ \[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*$
- ignoreregex =
复制代码
创建Nginx的Fail2Ban jail:
- sudo nano /etc/fail2ban/jail.d/nginx.conf
复制代码
添加以下内容:
- [nginx-http-auth]
- enabled = true
- filter = nginx-http-auth
- port = http,https
- logpath = /var/log/nginx/error.log
- maxretry = 3
- findtime = 600
- bantime = 3600
复制代码
启动并启用Fail2Ban:
- sudo systemctl start fail2ban
- sudo systemctl enable fail2ban
复制代码
9. 监控与维护
9.1 安装监控工具
Netdata是一个实时性能和健康监控工具:
- sudo dnf install epel-release -y
- sudo dnf install netdata -y
- sudo systemctl start netdata
- sudo systemctl enable netdata
复制代码
访问http://your_server_ip:19999查看Netdata仪表板。
Nginx Amplify是一个免费的监控工具,专门用于监控Nginx性能:
- sudo wget https://github.com/nginxinc/nginx-amplify-agent/raw/master/packages/install.sh
- sudo API_KEY='YOUR_API_KEY' sh ./install.sh
复制代码
将YOUR_API_KEY替换为在Nginx Amplify网站上注册后获取的实际API密钥。
9.2 设置日志轮转
配置日志轮转以防止日志文件过大:
- sudo nano /etc/logrotate.d/nginx
复制代码
添加以下内容:
- /var/www/*/logs/*.log {
- daily
- missingok
- rotate 52
- compress
- delaycompress
- notifempty
- create 0640 nginx nginx
- postrotate
- if [ -f /var/run/nginx.pid ]; then
- kill -USR1 `cat /var/run/nginx.pid`
- fi
- endscript
- }
复制代码
9.3 设置自动备份
创建备份脚本:
- sudo nano /usr/local/bin/backup_website.sh
复制代码
添加以下内容:
- #!/bin/bash
- # Variables
- BACKUP_DIR="/backup"
- WEBSITE_DIR="/var/www/example.com"
- NGINX_CONF_DIR="/etc/nginx/conf.d"
- DATE=$(date +%Y%m%d%H%M%S)
- # Create backup directory if it doesn't exist
- mkdir -p $BACKUP_DIR
- # Backup website files
- tar -czf $BACKUP_DIR/website_files_$DATE.tar.gz -C $WEBSITE_DIR .
- # Backup Nginx configuration
- tar -czf $BACKUP_DIR/nginx_config_$DATE.tar.gz -C $NGINX_CONF_DIR .
- # Keep only last 7 days of backups
- find $BACKUP_DIR -type f -name "*.tar.gz" -mtime +7 -delete
- echo "Backup completed: $DATE"
复制代码
使脚本可执行:
- sudo chmod +x /usr/local/bin/backup_website.sh
复制代码
设置定时任务,每天凌晨2点执行备份:
添加以下行:
- 0 2 * * * /usr/local/bin/backup_website.sh
复制代码
10. 故障排除
10.1 常见Nginx问题及解决方案
如果访问网站时出现403 Forbidden错误,可能是由于文件权限或SELinux设置不正确。
检查文件权限:
- ls -la /var/www/example.com/html/
复制代码
确保Web服务器用户(nginx或apache)有读取权限:
- sudo chown -R nginx:nginx /var/www/example.com/html
- sudo chmod -R 755 /var/www/example.com/html
复制代码
检查SELinux上下文:
- ls -dZ /var/www/example.com/html/
复制代码
如果上下文不正确,重新设置:
- sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/example.com/html(/.*)?"
- sudo restorecon -Rv /var/www/example.com/html
复制代码
502 Bad Gateway错误通常表示Nginx无法与后端服务器通信。对于静态网站,这可能是由于配置错误或资源不足导致的。
检查Nginx错误日志:
- sudo tail -f /var/www/example.com/logs/error.log
复制代码
检查系统资源使用情况:
如果资源不足,考虑优化配置或升级服务器硬件。
如果网站加载缓慢,可以采取以下措施进行诊断和优化:
1. 使用WebPageTest或GTmetrix等工具分析网站性能
2. 启用Gzip压缩和浏览器缓存
3. 优化图片大小和格式
4. 考虑使用CDN加速
5. 检查服务器资源使用情况
10.2 SSL证书问题
如果Let’s Encrypt证书自动续期失败,可以尝试手动续期:
- sudo certbot renew --dry-run
复制代码
如果测试成功,执行实际续期:
检查续期日志以获取更多信息:
- sudo tail -f /var/log/letsencrypt/letsencrypt.log
复制代码
如果网站使用HTTPS但仍加载HTTP资源,浏览器会显示混合内容警告。使用浏览器开发者工具查找并修复所有HTTP资源引用。
在Nginx配置中添加Content-Security-Policy头可以帮助防止混合内容:
- 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等)的静态导出功能使得静态网站的开发和部署变得更加便捷。结合本文介绍的服务器配置和优化方法,读者可以构建出功能丰富、性能卓越的静态网站。 |
|