本文将在 CentOS 系统上使用 Nginx 配置 HTTPS。同时,通过一些配置策略来禁止通过 IP 地址直接访问站点,增强安全性。更重要的是,如果在配置正确后访问仍然失败,将探讨可能的原因,例如 WAF 等防火墙设置的影响。
在进行配置前,请确保您的 CentOS 服务器已经安装了 Nginx。此外,您还需要为您的域名准备一个有效的 SSL/TLS 证书。证书可以通过 Let’s Encrypt 免费获取,或从其他证书颁发机构购买。
Let’s Encrypt 提供了免费的证书和自动配置工具 Certbot,操作如下:
sudo yum install epel-release
sudo yum install certbot-nginx
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
请务必将 yourdomain.com 和 www.yourdomain.com 替换为您实际的域名。
在获取 SSL 证书后,Certbot 会尝试自动更新您的 Nginx 配置。以下是手动配置 HTTPS 的示例,包括如何禁止 IP 地址访问。
sudo nano /etc/nginx/conf.d/yourdomain.com.conf
server {
listen 80;
listen [::]:80;
server_name yourdomain.com www.yourdomain.com;
# 重定向所有 HTTP 请求到 HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name yourdomain.com www.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE';
ssl_prefer_server_ciphers on;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
# 禁止通过 IP 地址访问
if ($host != yourdomain.com && $host != www.yourdomain.com) {
return 403;
}
}
sudo nginx -t
sudo systemctl reload nginx
如果在配置后,HTTPS 访问未能成功,这可能与服务器的防火墙或 WAF(Web Application Firewall)设置有关。您需要检查:
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload