Nginx 服务器 SSL 证书安装部署 实现HTTPS+域名 的形式访问nginx服务器
情况:
- 在阿里云有1个域名。
- 腾讯云有1个云服务器及IP地址。
- 云服务器上已经安装了Nginx服务器,通过IP已经可以实现HTTP访问服务器。
说明:域名解析到IP,通过IP或域名都可以实现HTTP访问。
目的:现在需要把HTTP改为HTTPS访问,改为HTTPS+域名的形式访问Nginx服务器
第一步:需要在云服务器上在安装SSL证书。
参考文档:https://cloud.tencent.com/document/product/400/35244
证书云平台上有免费的1年有效期,1年后重新申请一遍。
通过云平台申请,签发证书,大概半小时签发成功,然后把证书下载到本地。
证书下载好,解压,里面有效的是.crt和.key或.pem和.key这两个文件,,都可以,选一组即可。
接下来在Nginx服务器下安装SSL证书。
前提条件
- 已准备文件远程拷贝软件,例如 WinSCP(建议从官方网站获取最新版本)。本人用的是FileZilla Client
- 已准备远程登录工具,例如 PuTTY 或者 Xshell(建议从官方网站获取最新版本)。本人用的是XShell 7
- 已在当前服务器中安装配置 Nginx 服务。
- 安装 SSL 证书前需准备的数据如下:
名称 说明 服务器的 IP 地址 服务器的 IP 地址,用于 PC 连接到服务器。 用户名 登录服务器的用户名。 密码 登录服务器的密码。
操作步骤
证书安装
- 请在 SSL 证书管理控制台 中选择您需要安装的证书并单击下载。
- 在弹出的 “证书下载” 窗口中,服务器类型选择 Nginx,单击下载并解压缩
cloud.tencent.com
证书文件包到本地目录。
解压缩后,可获得相关类型的证书文件。其中包含cloud.tencent.com_nginx
文件夹:- 文件夹名称:
cloud.tencent.com_nginx
- 文件夹内容:
cloud.tencent.com_bundle.crt
证书文件(或称作安全文件)cloud.tencent.com_bundle.pem
证书文件cloud.tencent.com.key
私钥文件cloud.tencent.com.csr
CSR 文件
- 文件夹名称:
CSR 文件是申请证书时由您上传或系统在线生成的,提供给 CA 机构。安装时可忽略该文件。
可以将.crt\.pem\.key文件都拷贝到指定服务器目录,nginx.conf中可以只配置一组即可,如.crt和.key一组,或.使用pem和.key一组。
- 使用 “WinSCP”(即本地与远程计算机间的复制文件工具)登录 Nginx 服务器。
- 将已获取到的
cloud.tencent.com_bundle.crt
证书文件和cloud.tencent.com.key
私钥文件从本地目录拷贝到 Nginx 服务器的/usr/local/nginx/conf
目录(此处为 Nginx 默认安装目录,请根据实际情况操作)下。———>如果放在/usr/local/nginx/conf这个默认目录下下,nginx.conf可以不用写明路径,也可以写明路径。放在其它目录下则必须要写明文件路径。 - 远程登录 Nginx 服务器。例如,使用 “PuTTY” 工具 登录。
- 编辑 Nginx 根目录下的
conf/nginx.conf
文件。修改内容如下:
说明:
- 如找不到以下内容,可以手动添加。
- 此操作可通过执行
vim /usr/local/nginx/conf/nginx.conf
命令行编辑该文件。 - 由于版本问题,配置文件可能存在不同的写法。例如:Nginx 版本为
nginx/1.15.0
以上请使用listen 443 ssl
代替listen 443
和ssl on
。
把HTTP的server全部注释掉。
下面编辑的是nginx.conf中的HTTPS server
#user nobody;
worker_processes 1;
events { worker_connections 1024;}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#gzip on;
#编辑HTTPS server时把HTTP server全部注释掉。
#// server {
#// listen 80;
#// server_name xxx.com;
#// root /usr/download/;
#// location /{
#// autoindex on;
#// autoindex_localtime on;
#// autoindex_exact_size off;
#//}
#// error_page 500 502 503 504 /50x.html;
#// location = /50x.html {
#// root html;
#// }
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
server {
listen 443 ssl;
server_name XXX.com;
root /usr/download/;
#让该目录下的文件自动显示出来
location / {
autoindex on;
autoindex_localtime on;
autoindex_exact_size off; }
}
ssl_certificate 下载的pem文件名.pem; //放在默认目录/usr/local/nginx/conf下可不写明详细目录,否则要写清文件所在目录。如/usr/XXX/XXX/aaa.pem
ssl_certificate_key 下载的key文件名.key; //放在默认目录/usr/local/nginx/conf下可不写明详细目录。
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m; ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA_AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
#将HTTP访问都重定向到HTTPS访问
server{
listen 80;
server_name XXX.com;
#将请求转成
https rewrite ^/(.*)$ https://$host$1 permanent;
}
}
- 在 Nginx 根目录下,通过执行以下命令验证配置文件问题。
./sbin/nginx -t
- 若存在,请您重新配置或者根据提示修改存在问题。
- 若不存在,请执行 步骤8。
- 重启 Nginx。
遇到问题:
nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:104
解决参考网址:https://www.daozhao.com/8285.html
步骤:
1.切换到nginx源码包位置
cd /usr/local/nginx/nginx-1.19.10 我的nginx-1.19.10位置
2.查看nginx原有的模块
/usr/local/nginx/sbin/nginx -V
3.那么我们的新配置信息就应该这样写 (在原有基础上增加 --with-http_ssl_modul):
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
4.运行上面的命令即可,等配置完 配置完成后,运行命令 make
这里不要进行make install
,否则就是覆盖安装 然后备份原有已安装好的nginx
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
5.然后将刚刚编译好的nginx覆盖掉原有的nginx(这个时候nginx要停止状态)
停止nginx服务:
killall nginx
覆盖原有nginx:
cp ./objs/nginx /usr/local/nginx/sbin/
6.然后启动nginx
cd /usr/local/nginx/sbin
./nginx -s reload
./nginx
通过命令查看是否已经加入成功
/usr/local/nginx/sbin/nginx -V
查看包含--with-http_ssl_module
说明SSL安装成功。
TIPS
如果意外出现443端口被占用的情况nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
可以使用
sudo fuser -k 443/tcp
杀掉占用进程,再启动nginx
HTTP 自动跳转 HTTPS 的安全配置(可选)
如果您需要将 HTTP 请求自动重定向到 HTTPS。您可以通过以下操作设置:
- 根据实际需求,选择以下配置方式:
- 在页面中添加 JS 脚本。
- 在后端程序中添加重定向。
- 通过 Web 服务器实现跳转。
- Nginx 支持 rewrite 功能。若您在编译时没有去掉 pcre,您可在 HTTP 的 server 中增加
,即可将默认80端口的请求重定向为 HTTPS。修改如下内容:https rewrite ^/(.*)$ https://$host$1 permanent;
说明:
- 未添加注释的配置语句,您按照下述配置即可。
- 由于版本问题,配置文件可能存在不同的写法。例如:Nginx 版本为
nginx/1.15.0
以上请使用listen 443 ssl
代替listen 443
和ssl on
。
server { listen 80; #填写绑定证书的域名 server_name XXX.com; #把http的域名请求转成https https rewrite ^/(.*)$ https://$host$1 permanent;
- 若修改完成,重启 Nginx。
问题解决:
SSL证书安装好、ssl免费证书已签发,域名已解析到IP,www.xxx.com解析到xxx.com,nginx.conf已配置好,安全组端口已放开,发现腾讯云sslpod监控下仍然提示域名未配置证书。
然后输入浏览器域名也无法访问到服务器。
证书监控 SSLPod 提示 “连接异常”
https://cloud.tencent.com/document/product/1084/61741#TroubleshootNetwork
Linux防火墙——IPtables配置策略思路
https://baijiahao.baidu.com/s?id=1721666195906523725&wfr=spider&for=pc
SSL连接异常
https://cloud.tencent.com/document/product/1084/61741#TroubleshootNetwork
如何选择 SSL 证书安装部署类型?
https://cloud.tencent.com/document/product/400/4143?from=copy
Nginx 服务器 SSL 证书安装部署
https://cloud.tencent.com/document/product/400/35244
按照官方给出的连接异常逐个排查,然后关闭服务器防火墙后可以顺利访问HTTPS:xxx.com了。
正常访问截图如下:
这个是放在/usr/download下的几个文件。
用到的一些命令:
查看端口占用情况
netstat -anon|grep 443
netstat -anon|grep 80
ps -e |grep -ltunp
netstat -ltunp
停止nginx
./nginx -s stop
启动nginx
./nginx
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!