ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Nginx 上安装 SSL 证书并启用 HTTPS 访问

Nginx 上安装 SSL 证书并启用 HTTPS 访问 本文将介绍如何在 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 客户端可以顺利地克隆和拉取代码。
返回列表