
本文将介绍如何在 Nginx 上为你的域名安装 SSL 证书并配置 Nginx 使用 HTTPS 安全访问。我们将使用 Let’s Encrypt 免费的 SSL 证书通过 Certbot 生成并管理证书然后配置 Nginx 实现 HTTPS 加密访问。同时我们将解决因 SSL 证书导致的代码拉取问题。### 一、前置准备*服务器一台运行 Nginx 的服务器如阿里云、AWS、DigitalOcean 等云服务器。*域名一个已指向服务器公网 IP 的域名例如gitea.example.com。*服务器访问权限确保你有服务器的 root 权限或 sudo 用户权限。### 二、安装 Certbot 和生成 SSL 证书Certbot 是 Let’s Encrypt 提供的一个工具用于自动生成和管理 SSL 证书。#### 1. 安装 Certbot在基于 Debian/Ubuntu 的系统上可以使用以下命令安装 Certbot 和 Nginx 插件 sudo apt update sudo apt install certbot python3-certbot-nginx -y #### 2. 使用 Certbot 生成 SSL 证书Certbot 可以自动为你的域名生成和安装 SSL 证书。运行以下命令 sudo certbot --nginx -d gitea.example.com *--nginx告诉 Certbot 自动配置 Nginx。*-d指定需要申请证书的域名。Certbot 会提示输入邮箱地址并同意服务条款。之后它将自动生成 SSL 证书并更新 Nginx 配置以启用 HTTPS。#### 3. 验证证书安装Certbot 完成后你可以运行以下命令检查证书 sudo certbot certificates 这将显示已安装证书的信息。确保域名和证书路径正确无误。### 三、配置 Nginx 以启用 HTTPSCertbot 在生成证书时会自动修改 Nginx 配置但你可以手动优化和调整配置以满足安全性和性能的需求。以下是一个标准的 HTTPS 配置示例。#### 1. Nginx 配置文件假设你的网站配置文件在/etc/nginx/sites-available/gitea中。打开该文件进行编辑 # HTTPS 部分 - 配置反向代理到服务 server { listen 443 ssl http2; # 启用 HTTP/2 支持 server_name gitea.example.com; # SSL 配置 - Certbot 自动生成的配置 ssl_certificate /etc/letsencrypt/live/gitea.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/gitea.example.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; # Certbot 的自动配置文件 ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # HSTSHTTP Strict Transport Security配置 add_header Strict-Transport-Security “max-age31536000; includeSubDomains” always; # 反向代理设置代理到本地服务或其他端口 location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-ProtoKaTeX parse error: Expected EOF, got # at position 24: … #̲ 超时设置 …host$request_uri; } } #### 2. 配置说明*HTTP 重定向80 端口的 HTTP 请求将被自动重定向到 HTTPS。*SSL 证书路径ssl_certificate和ssl_certificate_key路径指向 Certbot 生成的证书。*HSTS 配置add_header Strict-Transport-Security可以强制客户端在未来仅通过 HTTPS 访问防止降级攻击。#### 3. 检查和重启 Nginx创建软链接以启用该配置 sudo ln -s /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled/ 检查 Nginx 配置是否正确 sudo nginx -t 如果一切正常重新加载 Nginx 配置 sudo systemctl reload nginx ### 四、拉取代码时的 SSL 证书问题及解决方案在启用了 HTTPS 后Git 客户端可能会因 SSL 证书问题而无法克隆或拉取代码。以下是几种解决方案#### 1. 使用 Let’s Encrypt 或其他受信任的证书如果你还没有使用受信任的 SSL 证书可以通过 Let’s Encrypt 获取免费证书这样 Git 客户端将自动信任该证书。#### 2. 手动信任自签名证书不推荐生产环境使用##### 在 Windows 系统中1. 导出自签名证书使用以下命令导出 Gitea 服务器上的自签名证书。在 Windows 中使用nul替代 /dev/null。 openssl s_client -showcerts -connect gitea.example.com:443 nul | openssl x509 -outform PEM gitea.crt 2. 在 Windows 中安装证书双击gitea.crt文件选择“安装证书”并将其安装到受信任的根证书颁发机构中。 ##### 在 macOS/Linux 系统中1. 将.crt文件复制到/usr/local/share/ca-certificates/目录中 sudo cp gitea.crt /usr/local/share/ca-certificates/gitea.crt 2. 更新系统的 CA 证书 sudo update-ca-certificates #### 3. 在 Git 配置中关闭 SSL 验证仅限测试环境在特定项目中关闭 SSL 验证 git config http.https://gitea.example.com.sslVerify “false” #### 4. 使用 SSH 连接如果 Gitea 支持 SSH可以使用 SSH 协议克隆仓库避免 SSL 证书问题。 git clone gitgitea.example.com:username/repository.git ### 五、测试 HTTPS 访问在浏览器中访问https://gitea.example.com确保网站可以通过 HTTPS 正常加载。如果一切配置正确浏览器地址栏应显示一个锁标志表示连接已加密。### 六、自动续订证书Let’s Encrypt 证书有效期为 90 天。Certbot 已自动设置续订任务可以通过以下命令手动测试续订 sudo certbot renew --dry-run ### 七、总结通过 Certbot 和 Nginx 配置 HTTPS 可以显著提高网站的安全性并且 Let’s Encrypt 提供的免费证书使配置过程简单高效。按以上步骤设置后你的站点将支持 HTTPS 安全访问提升用户数据传输的安全性。同时通过信任自签名证书或使用 SSH 协议Git 客户端可以顺利地克隆和拉取代码。