服务器 > 网络 > SSL

Nginx安装免费SSL证书开启Https请求实现步骤

47人参与 2026-04-12 SSL

在部分场景中,我们必须使用 https 请求,因为 https 请求更为安全,常用于支付方面的请求调用

https 的基础是 ssl,我们一般是没有 ssl 证书的,我们需要向供应商购买 ssl 证书,今天我们使用 let’s encrypt 获取免费证书,搭建我们的 https 请求

1、安装 nginx

在 centos 中搭建 nginx 环境,

可以参考我的这篇文章,centos7中搭建nginx环境

2、安装 ssl 模块

我们默认安装的 nginx 是没有 ssl 模块的,可以输入命令验证,进入 nginx 的目录

cd /usr/local/nginx/sbin/

执行命令

./nginx -v

注意是大写的 v,小写的 v 只会出现 nginx 的版本信息

如图所示,我是已经安装了 ssl 模块的,没有安装的可以参考如下:

cd  /usr/local/nginx-1.8.0/

./configure --prefix=/usr/local/nginx --with-http_ssl_module

配置了 ssl 模块,使用 make 命令重新编译

make

注意,不能使用 make install 命令,这样会导致重新安装 nginx,此时当前目录就会出现 objs 目录

进入 objs 目录,会看到 nginx 的可执行文件

我们使用这个新的 nginx 可执行文件 替换 sbin 目录下的 nginx 可执行文件

cp ./nginx /usr/local/nginx/sbin/

系统会询问你是否覆盖,输入 y 即可,如果覆盖失败,多半是因为你的 nginx 还在启动中,先将 nginx 关闭即可

进入 nginx 目录

cd /usr/local/nginx/sbin/

执行命令

./nginx -v

此时就能看到 ssl 模块已经安装成功了

3、获取 ssl 证书

如果要启用 https,我们需要一个 ca 证书,let’s encrypt 是一个免费的证书颁发机构,由 isrg(internet security research group)运作。

certbot 是 let’s encrypt 官方推荐的证书获取工具,它可以帮助用户很方便的获取和更新 let’s encrypt 证书,certbot 支持所有 unix 内核的操作系统。

执行命令

yum install -y epel-release
yum install -y certbot

因为使用 certbot 获取证书时,let’s encrypt 服务器会访问 http://sub.domain.com/.well-known 来验证你的域名服务器,因此你需要修改 nginx 配置文件,配置 .well-known 指向本地一个目录

location /.well-known {
    alias /usr/local/nginx/html/.well-known;
}

certbot certonly --webroot -w /usr/local/nginx/html/ -d xxx.com -m xxxxxx@xxx.com --agree-tos

如果获取成功,你的密钥和证书存放在 /etc/letsencrypt/live/xxx.com/ 目录下

错误解决:

1、importerror: cannot import name unrewindablebodyerror

解决办法,重装 urllib3 库,执行命令

pip uninstall urllib3

卸载 urllib3 库

pip install urllib3

安装 urllib3 库

2、pkg_resources.distributionnotfound: the ‘urllib3<1.23,>=1.21.1’ distribution was not found and is required by requests

执行命令

easy_install urllib3==1.21.1

3、importerror: ‘pyopenssl’ module missing required functionality. try upgradin

执行命令

pip install --upgrade --force-reinstall 'requests==2.6.0'

以上就是我遇到的三个问题,期间会有询问的地方,输入 y 即可

以上错误解决完后,再次输入命令获取 ssl 证书

certbot certonly --webroot -w /usr/local/nginx/html/ -d xxx.com -m xxxxxx@xxx.com --agree-tos

没错误,就能够在 /etc/letsencrypt/live/xxx.com/ 目录下看到你的 ssl 证书了

注意:

该证书 90 天有效,到期需要重新申请,你也可以通过定时任务来定时更新 ssl 证书

4、配置 nginx https server

编辑 nginx 的配置文件

cd /usr/local/nginx/conf/

编辑 nginx.conf 文件

vim nginx.conf

在 server {} 后面加入以下内容

# https server
server {
	# 监听端口,默认443
	listen 443 ssl;
	# 你的域名
	server_name xxx.com;

	# 你证书的位置
	ssl_certificate      /etc/letsencrypt/live/xxx.com/fullchain.pem;
	ssl_certificate_key  /etc/letsencrypt/live/xxx.com/privkey.pem;

	ssl_ciphers ecdhe-rsa-aes128-gcm-sha256:ecdhe:ecdh:aes:high:!null:!anull:!md5:!adh:!rc4;
    ssl_protocols tlsv1 tlsv1.1 tlsv1.2;
    ssl_prefer_server_ciphers  on;
	
	# 默认首页
	location / {
		root   html;
           index  index.html index.htm;                   
	}
}

5、访问测试

重启 nginx,进入 sbin 目录

cd /usr/local/nginx/sbin

输入命令

./nginx -s reload

浏览器访问

https://xxx.com

表示,我们的 ssl 证书生效,https 配置成功

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

您想发表意见!!点此发布评论

推荐阅读

Centos7中搭建Nginx环境全过程

04-12

Nginx安装后添加ssl模块方式实践

04-12

Nginx服务器上安装SSL证书方式

04-13

Nginx编译时openssl not found问题及解决过程

04-07

Nginx 中 ssl_buffer_size 参数调优的具体实现

04-19

Nginx proxy_ssl_server_name 解决后端多域名证书匹配失败的方法

04-20

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论