首页 > 其他分享 >出海业务如何搭建国内也能快速访问的https网站与接口(无需备案)

出海业务如何搭建国内也能快速访问的https网站与接口(无需备案)

时间:2024-02-02 21:04:28浏览次数:24  
标签:快速访问 ssl 证书 sudo 接口 nginx https com

背景信息

由于最近在搭建我的出海网站 https://www.idatariver.com/zh-cn , 感兴趣的可以看看。

其中一个环节便是给后端API接口加上ssl,毕竟http看着不如https,但因为没有备案,所以不能使用国内的服务器(国内未备案域名是不开放服务器443和80端口的),本文便是解决怎么在网站没有备案的情况下部署https并且保证不牺牲国内用户的访问速度。

为什么不使用Cloudflare?

众所周知,Cloudflare有免费的https可以白嫖,如果是前端代码,直接部署到Vercel上也是能白嫖https的,那么为什么不白嫖呢?

原因就是网络优化问题,这些平台都是海外公司的产品。由于没有特别优化国内网络路线,因此国内访问这些平台的速度是比较慢的(对于未备案的网站来说,即便是Cloudflare的边缘网络也不好使),如下图:

www.idatariver.com在国内的访问ping延时
可以看到我的网站在国内ping的延时稳定在200+ms,而优化过之后的延时可以达到30-40ms的范围。

操作流程

整个搭建并不复杂,使用的ssl证书也是免费的,所以非常适合初学者或者想省钱的同学使用。

解决方案就是将https部署到大陆网络优化过的香港服务器上(因为香港服务器无需备案)。

准备一台香港服务器(需要CN2大陆网络优化)

前文说了没有备案所以不能使用国内的服务器,这时最好的选择就是准备一台香港服务器(有CN2路线优化的),这时国内ping的延时基本上在30-40ms

接下来只要将域名dns解析到这台服务器上即可,不过默认不支持ssl,也就是说只能http访问,接下来就是加上SSL证书使得能够https访问,这也是本篇文章重要讲解的部分。

使用Let's Encrypt提供的免费SSL证书

CA 的证书提供商有许多个,有收费的有免费的,Let’s Encrypt 就是其中之一的免费提供商,它提供 90 天的免费授权,90 天后可以免费续签。

这里有个坑需要大家注意,并不是所有的免费ssl供应商都好用,有的供应商虽然浏览器访问https没问题,但是在代码里发起https请求或者直接curl请求时会报错,比如:

'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1000)

为了排查这个问题花了很多时间(当时使用的是freessl的免费证书),最后把证书换成Let's Encrypt的就好了。原因应该是虽然浏览器认可证书,但是代码里使用的库可能更新不及时,不认可该证书,虽然可以通过强制verify=false或者手动指定证书路径的方式解决,但也给用户的使用带来了不便。

下面以我的centos服务器为例讲解如何在nginx上部署ssl证书:

安装certbot

Certbot 就是Let`s Encrypt官方出的一个客户端程序,能帮助你简化部署流程。

sudo yum install certbot

生成证书

生成证书需要验证域名的归属权,因此在生成证书前,确保dns已经指向本机,这样才能方便进行域名归属验证。

下面是nginx配置文件your.domain.com.conf的写法(将your.domain.com替换为你自己的域名):

server {
     listen       80;
     server_name  your.domain.com; #这里填你要验证的域名

     location ^~ /.well-known/acme-challenge/ { # 证书生成时的验证
         default_type "text/plain";
         root     /usr/share/nginx/html/; #这里需要与后文 --webroot -w 后面配置的路径一致
     }
 }

将此文件复制到/etc/nginx/conf.d/目录下,然后重载nginx配置:

sudo systemctl reload nginx

创建证书

sudo certbot certonly --webroot -w /usr/share/nginx/html/ -d your.domain.com

出现类似下图这种表示创建成功:
certbot创建证书成功

配置nginx的ssl证书

这个是我的域名api.idatariver.com的配置文件,只需要将域名替换成自己的,再将后端服务修改成自己的即可。

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  api.idatariver.com;

    ssl_certificate      /etc/letsencrypt/live/api.idatariver.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/api.idatariver.com/privkey.pem;

    ssl_session_timeout  5m;

    location / {
        proxy_pass http://localhost:****;  # 映射到本机后端服务端口
    }

    location ^~ /.well-known/acme-challenge/ {  # 证书续期时的验证
        default_type "text/plain";
        root     /usr/share/nginx/html/; #这里需要与后文 --webroot -w 后面配置的路径一致
    }
}

server {
    listen 80;
    server_name api.idatariver.com;
    rewrite ^(.*)$ https://$host$1 permanent;#将请求转成https

    location ^~ /.well-known/acme-challenge/ {  # 证书生成时的验证
        default_type "text/plain";
        root     /usr/share/nginx/html/; #这里需要与后文 --webroot -w 后面配置的路径一致
    }
}

将文件复制到/etc/nginx/conf.d/目录下,然后重载nginx配置文件即可。

sudo systemctl reload nginx

到这里,就已经能使用https访问你的服务了,而且大陆访问延时很ok,基本上就是服务器ping的延时,在30-40ms左右,跟访问国内服务器一样快。

证书续期

免费证书90天过期,所以需要在过期前及时续期,可先执行模拟续期操作(会对/etc/letsencrypt/live/ 对目录下的所有域名进行模拟续期):

sudo certbot renew --dry-run
sudo certbot renew

模拟续期没问题后,就可以执行以下命令进行续期了:

sudo certbot renew

一般只要在证书到期前执行续期命令即可,好像certbot现在本身就会在后台自动续期,不过我没验证过,不放心的话也可以设置cronjob定期执行。

sudo crontab -e

然后会打开打开定时任务配置文件,我们可以按i进入编辑模式,然后输入:

30 2 * * * /usr/bin/certbot renew  >> /var/log/le-renew.log

上面的执行时间为:每天凌晨2点30分执行renew任务。

删除证书

如果因为种种原因不小心生成了多余的证书,他会存在于我们的服务器中,导致无用的冗余。可是官方其实并没有提供取消授权的方式,我们可以在本地删除授权证书,并且不再续签,便可以释放该证书了,我们需要进入对应的文件夹内,查看自己已经生成的证书域名文件夹,然后依次删除就好,记得替换 your.domain.com 为你要删除的域名:

cd /etc/letsencrypt
ls
sudo rm -rf /etc/letsencrypt/live/your.domain.com/ 
sudo rm -rf /etc/letsencrypt/archive/your.domain.com/
sudo rm /etc/letsencrypt/renewal/your.domain.com.conf

好了,到这里就讲完了。

结束语

本文介绍了使用Let's Encrypt免费ssl证书 + nginx 搭建免费https服务的完整流程,通过在香港CN2网络优化的服务器上部署,可以使国内用户也能快速访问,比如我的平台接口,对于国外用户正常使用Cloudflare的服务走api.idatariver.com域名进行访问,对于国内用户,则是走cnapi.idatariver.com进行国内优化路线访问。

写作不易,觉得帮到忙了就点个赞吧,谢谢~

标签:快速访问,ssl,证书,sudo,接口,nginx,https,com
From: https://www.cnblogs.com/bameofme/p/18003970

相关文章

  • 定义HarmonyOS IDL接口
    HarmonyOSIDL简介HarmonyOSInterfaceDefinitionLanguage(简称HarmonyOSIDL)是HarmonyOS的接口描述语言。HarmonyOSIDL与其他接口语言类似,通过HarmonyOSIDL定义客户端与服务端均认可的编程接口,可以实现在二者间的跨进程通信(IPC,Inter-ProcessCommunication)。跨进程通信意味着......
  • 项目中如何保证API接口的幂等性?有哪些实现解决方法?有何利弊
    在实际开发项目中保证API接口的幂等性是十分重要的,因为在幂等性可以保证多次相同的操作不会对系统造成多次影响。首先来了解什么是接口API幂等性,简单来说就是对同一个接口的多次请求或操作造成的影响是相同的,就是说一个操作如果在其执行一次或者多次后产生的结果相同,这个操作就是......
  • Arduino - ESP8266和ESP32的I2C接口使用(超全)
    简介深入讲解I2C通信协议,以及,Arduino和ESP8266微控制器通过I2C连接设备需要哪些引脚、该通信协议的优缺点以及如何使用I2C多路复用器详解Arduino/ESP8266与其他设备通信,例如OLED显示器、气压传感器等,可以使用I2C通信协议。也可以使用两外两个通信协议:SPI和UARTI2C全称是Inte......
  • Java 中 Collection接口中常用的方法
    Collection接口中常用的方法关于java.util.Collection接口中常用的方法Collection中能放什么元素没有使用“泛型”之前,Collectiom中可以存放Object的所有子类型使用了“泛型”之后,Collection中只能存放某个具体的类型。(集合中不能存储基本数据类型,也不能存储Java对象,只能......
  • https请求获取token和cookie,并用于未来其他请求
    主要参考百度AI生成的程序。上次的例子用token带入了新的请求,请求成功,正确获取response.我这里的例子是:当请求不含token时,请求失败;当请求只含有token时,监控软件没有获取请求的用户名;当请求含有token和cookie时,监控软件能获取请求的用户名。我这里需要获取用户名,因此必须请求必须加......
  • 第16天:信息打点-CDN绕过&业务部署&漏洞回链&接口探针&全网扫描&反向邮件
    #CDN配置:配置1:加速域名-需要启用加速的域名配置2:加速区域-需要启用加速的地区配置3:加速类型-需要启用加速的资源 #参考知识:超级Ping:http://www.17ce.com/超级Ping:https://ping.chinaz.com/接口查询:https://get-site-ip.com/接口查询:https://fofa.info/extensions/source......
  • springboot接口加解密传输
    前言:写这个博客的目的也是想着后面如果需要用上的时候方便参考,这篇文章使用的也是比较简单的加解密流程,但这篇文章注重点是后端对于前端传过来的加密参数怎么接收,然后统一拦截解密后又回到原本接口上,接口返回结果时又是怎么将结果集加密后传输出去还有一个很重要的......
  • nvm安装Nodejs时报错,Could not retrieve https://npm.taobao.org/mirrors/node/latest
    1.首先要使用管理员运行命令2.在安装nvm的目录下找到settings.txt,没有就手动增加一个node_mirror:https://npm.taobao.org/mirrors/node/npm_mirror:https://npm.taobao.org/mirrors/npm/这个地方有点奇怪,安装18的时候把上面的Https://去掉以后就下载成功了3.安装19以及......
  • web-http协议与https协议
    web-http协议与https协议http协议超文本传输协议(英文:HyperTextTransferProtocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。http协议运行简要流程1.在客户端输入URL2.客户端向DNS服务器......
  • npm证书过期:npm ERR! request to https://registry.npm.taobao.org/element-ui failed
    场景:使用淘宝源安装element-ui时npm证书过期报错信息如下:npmERR!codeCERT_HAS_EXPIREDnpmERR!errnoCERT_HAS_EXPIREDnpmERR!requesttohttps://registry.npm.taobao.org/element-uifailed,reason:certificatehasexpirednpmERR!Acompletelogofthisrun......