nginx配置https证书

前提概要

很多时候我们需要在网站上启用HTTPS协议,比如我们要开发微信小程序的服务端,微信小程序的请求域名只支持https协议的,或者是我们希望使用nginx做端口转发,比如https的域名转发到http的一个公网ip地址,需要配置ssl证书。

泛域名证书申请和配置

目前常用的 Let’s Encrypt 证书生成工具有 certbotacme.shacme-tiny,本文使用的是 acme.shacme.sh 申请和安装泛域名 SSL 证书相对来说是比较方便的。

环境准备

这里你准备一个云服务器实例,以及备案好的域名。以及使用xshell工具以及xftp工具远程,当然也可以用宝塔或者云服务器自带的终端,根据个人的一个开发习惯选择。

使用acme.sh配置泛域名

1.安装acme.sh

安装过程需要服务器已安装 socat 模块,它是一个多功能的网络小工具。

dnf install socat -y

通过下面命令安装 acme.sh ,Email 用来接收重要重要通知,如证书快到期未更新会收到通知。

curl https://get.acme.sh | sh -s email=my@example.com

安装后,理论上会自动添加一个 acme.sh 全局应用别名,但有时候会 command not found,需要手动执行以下命令:source ~/.bashrcsource ~/.bash_profile,或关掉终端重新打开,然后再继续下一步。

2.生成证书

acme.sh 实现了 acme 协议支持的所有验证协议,一般有三种验证方式:HTTP 方式、手动 DNS 方式和 DNS API 方式。推荐使用 DNS API 方式

这里根据我们选择的一个云服务器来,如果腾讯云,阿里云,或者其他云的话就在他们对应的控制台里面操作,一般这类云厂商都是有提供DNS API的方式

我这里使用的是阿里云的,在右上角头像下拉中选择“AccessKey 管理”,创建密钥:

创建完成秘钥之后把秘钥信息进行保存然后配置到环境变量中

# 腾讯云
export DP_Id="YourId"
export DP_Key="YourToken"

# 阿里云
export Ali_Key="YourAccessKeyId"
export Ali_Secret="YourAccessKeySecret"

再通过下面命令生成证书:

# 腾讯云
acme.sh --issue --dns dns_dp -d example.com -d *.example.com

# 阿里云
acme.sh --issue --dns dns_ali -d example.com -d *.example.com

2024.6.28 补充更新:
这里腾讯云的方式以及失效了,会存在问题,阿里云的还可以这样使用,腾讯云的DNS API具体可以查看:https://zhuanlan.zhihu.com/p/705407934

注意:这里第一个域名为顶级域名,后面一个为泛域名。这种方式将自动为你的域名添加一条 TXT 解析,验证成功后,这条解析记录会被删除,对你来说是无感的。

证书生成成功后,默认保存在 ~/.acme.sh/example.com/ 目录中。请不要直接使用 ~/.acme.sh/ 目录下的文件,这里面的文件都是内部使用的,而且目录结构可能会变化,我们需要把证书复制到需要用的地方去。

3. 安装证书

~/.acme.sh/example.com/ 目录生成的证书文件中,我们主要需要用到两个文件:fullchain.cerexample.com.key。下面以 Nginx 为例,来看看如何安装证书。

一般来说生成了证书之后,证书文件的位置会在

在这里插入图片描述

安装nginx

如果你的云服务器第一次安装的话可以查看我的nginx安装的教程:https://blog.csdn.net/weixin_42770320/article/details/139756281?spm=1001.2014.3001.5501

为nginx安装ssl证书

在nginx目录下新建文件夹ssl

在这里插入图片描述

在服务器终端执行命令

这里的话会生成证书,将证书的key-file放到我们指定的目录,fullchain-file也是同理

acme.sh --install-cert -d *.yicode.net \
--key-file /usr/local/nginx/ssl/*.yicode.net.key \
--fullchain-file /usr/local/nginx/ssl/*.yicode.net.pem

在这里插入图片描述

域名解析

这里需要在你使用的云服务器厂商去配置对应的dns解析

在这里插入图片描述

配置nginx文件

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        #当 http 协议被请求时,统一转发到https协议上
        listen 80;
        server_name chai.yicode.net;
        return 301 https://$server_name;
    }

  server {
        listen 443 ssl;
        ssl_certificate "/usr/local/nginx/ssl/*.yicode.net.pem";
        ssl_certificate_key "/usr/local/nginx/ssl/*.yicode.net.key";
        server_name chai.yicode.net;

        location / {
            root  /usr/local/test/;
            try_files $uri $uri/ /index.html;
            index  index.html index.htm;
        }
    }
}

上面的nginx的意思

监听80端口和443端口,80是http协议的默认端口,443是https协议默认端口,

如果访问chai.yicode.net,不带https协议的会自动转发到https协议,如果访问这个路径,会去访问服务器的/usr/local/test/路径,默认去找对应的index.html文件,如果不存在会去找index.htm

启动nginx

这个在我们启动nginx的时候可能会遇到一个问题

在这里插入图片描述

这个问题其实是安装nginx的时候,没有去安装相关的ssl模块,所以我们需要重新的安装nginx

这里需要进入到我们之前安装的nginx的源目录,我这里的源目录是/usr/local/nginx-1.27.0,然后进入到这个目录

依次执行下面命令

./configure --with-http_ssl_module
make && make install

nginx配置API

http {
  #...
  server {
        listen 443 ssl;
        ssl_certificate "/usr/local/nginx/ssl/*.yicode.net.pem";
        ssl_certificate_key "/usr/local/nginx/ssl/*.yicode.net.key";
        server_name chai.yicode.net;

        location / {
            root  /usr/local/test/;
            try_files $uri $uri/ /index.html;
            index  index.html index.htm;
        }

        location /api/ {
             proxy_pass http://43.139.142.183:7001/;
        }
    }

}

这里可以配置多个location,当我们访问chai.yicode.net/api的时候,就会自动转发代理到43.139.142.183:7001这个地址

参考文献

Let’s Encrypt SSL 泛域名证书申请和配置

感谢

这里非常感谢一位大佬给我提供了很大的技术支持,大家可以关注他的csdn博客,以及掘金

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值