本文将在 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
-