Nginx 静态资源站点配置
1. 概述
本文介绍如何配置一个带有 HTTPS、访问控制和目录浏览功能的 Nginx 静态资源站点。
2. 环境要求
- Nginx 版本 >= 1.19.0(支持 HTTP/2)
- OpenSSL 支持
- htpasswd 工具(apache2-utils)
3. 安装必要工具
# CentOS/RHEL
sudo yum install -y httpd-tools
# Ubuntu/Debian
sudo apt install -y apache2-utils
4. 配置步骤
4.1 创建访问密码
# 创建新的密码文件
sudo htpasswd -c /etc/nginx/.htpasswd admin
# 添加新用户或修改现有用户密码
sudo htpasswd /etc/nginx/.htpasswd username
4.2 配置目录权限
# 设置资源目录权限
sudo chown -R nginx:nginx /opt/resources
sudo chmod -R 755 /opt/resources
4.3 Nginx 配置
创建配置文件 /etc/nginx/conf.d/resource-site.conf:
server {
# 监听配置
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name resource.example.com;
# SSL 证书配置
ssl_certificate /etc/nginx/ssl/site.crt;
ssl_certificate_key /etc/nginx/ssl/site.key;
# SSL 协议和加密套件配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers on;
# SSL 会话配置
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_session_tickets off;
# 安全头配置
server_tokens off;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# 资源目录配置
location / {
root /opt/resources;
# 目录浏览配置
autoindex on;
autoindex_exact_size off; # 显示文件大小的可读格式
autoindex_localtime on; # 显示本地时间
# 访问控制
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/.htpasswd;
# 文件下载优化
sendfile on;
tcp_nopush on;
tcp_nodelay on;
# 超时设置
client_max_body_size 100m;
client_body_timeout 120s;
keepalive_timeout 65s;
}
# 错误页面配置
error_page 403 /403.html;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
}
# HTTP 重定向到 HTTPS
server {
listen 80;
listen [::]:80;
server_name resource.example.com;
return 301 https://$server_name$request_uri;
}
5. 安全加固建议
- 访问控制
# 添加 IP 访问限制
location / {
allow 192.168.0.0/16;
allow 10.0.0.0/8;
deny all;
}
- 日志配置
# 添加访问日志
access_log /var/log/nginx/resource-access.log combined buffer=512k flush=1m;
error_log /var/log/nginx/resource-error.log warn;
- 文件类型限制
# 限制特定文件类型访问
location ~* \.(php|php7|sh|pl)$ {
deny all;
}
6. 性能优化
# 开启 GZIP 压缩
gzip on;
gzip_vary on;
gzip_min_length 1k;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/javascript text/xml;
# 文件缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
7. 维护建议
-
定期任务
- 检查日志文件大小和轮转
- 更新 SSL 证书
- 检查文件系统使用情况
-
监控项目
- Nginx 服务状态
- 磁盘使用率
- 访问流量统计
- SSL 证书有效期
8. 故障排查
- 访问权限问题
# 检查 SELinux
sudo sestatus
sudo semanage fcontext -a -t httpd_sys_content_t "/opt/resources(/.*)?"
sudo restorecon -Rv /opt/resources
# 检查文件权限
ls -l /opt/resources
ls -l /etc/nginx/.htpasswd
- SSL 配置问题
# 测试 SSL 配置
openssl s_client -connect resource.example.com:443 -tls1_2
改进说明:
- 完善了配置结构
- 增加了安全配置
- 添加了性能优化选项
- 补充了维护建议
- 使用示例域名替换了真实域名
- 添加了故障排查指南
- 改进了文件权限配置
- 增加了 HTTP/2 支持