微信小程序(一)域名备案及HTTPS访问

这篇具有很好参考价值的文章主要介绍了微信小程序(一)域名备案及HTTPS访问。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、引言

        接上篇云服务器-Docker容器-系统搭建部署-CSDN博客,一方面是提高实践架构技术,一方面给家里人做点生活小工具。

        在搭建好服务器和前后端程序之后,经过测试,作者给家里人做的生活系微信小程序就差不多可以用了。

        先搞了一个体验版本试用。然后就崩了,接口不通,打开调试器再使用又可以了。

微信小程序 request failed,docker,云服务器,微信小程序,docker,容器,运维,微信小程序,nginx

二、分析

        这种调试情况可用,线上版本(不管是体验版还是发布版)不通的情况,肯定是微信做了什么拦截,在社区问了一下,其他博主说是微信必须使用域名访问,网络请求必须使用Https,域名还要在页面配一下合法。

        那么这就引出来很多其他工作了,大的方向可用分为域名、Https部署、ssl证书、小程序页面配置。还有很多备案之类的细节工作。

        技术上还需要考虑的是解析转发问题,请求通过域名dns解析到服务器之后,https 的解析无非两种做法:springboot部署或者nginx解析转发,

1、springboot与Nginx解析https选型

        先看看springboot部署大致需要做什么:

1、证书文件放置在应用程序的classpath下,配置SSL证书:
   server.ssl.key-store=classpath:**
   server.ssl.key-store-password=**
   server.ssl.key-store-type=**
   server.ssl.key-alias=**

2. 配置HTTPS连接:
   server.port=443
   server.ssl.enabled=true

   这里的`443`是HTTPS连接的端口号,`true`表示启用HTTPS连接。

3. 配置HTTP重定向:
   @Configuration
   public class WebConfig implements WebMvcConfigurer {
   
       @Override
       public void addViewControllers(ViewControllerRegistry registry) {
           registry.addRedirectViewController("/", "/index.html");
       }
   
       @Bean
       public TomcatServletWebServerFactory servletContainer() {
           TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
               @Override
               protected void postProcessContext(Context context) {
                   SecurityConstraint securityConstraint = new SecurityConstraint();
                   securityConstraint.setUserConstraint("CONFIDENTIAL");
                   SecurityCollection collection = new SecurityCollection();
                   collection.addPattern("/*");
                   securityConstraint.addCollection(collection);
                   context.addConstraint(securityConstraint);
               }
           };
           tomcat.addAdditionalTomcatConnectors(httpConnector());
           return tomcat;
       }
   
       @Bean
       public Connector httpConnector() {
           Connector connector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
           connector.setScheme("http");
           connector.setPort(80);
           connector.setSecure(false);
           connector.setRedirectPort(443);
           return connector;
       }
   }

        nginx需要做什么呢

1、配置SSL证书:将SSL证书配置到Nginx服务器上。将证书文件(包括公钥和私钥)上传到服务器上的指定目录,例如`/etc/nginx/ssl`。

2. 配置Nginx虚拟主机:打开Nginx配置文件(通常是`nginx.conf`或`/etc/nginx/nginx.conf`),找到您要配置SSL的虚拟主机部分。在该部分中,添加以下配置:
   server {
       listen 443 ssl;
       server_name **;
   
       ssl_certificate /etc/nginx/ssl/**.crt;
       ssl_certificate_key /etc/nginx/ssl/**.key;
   
       location / {
           # 配置您的应用程序代理
           proxy_pass http://**;
           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-Proto $scheme;
       }
   }


3. 配置HTTP重定向:为了将HTTP请求重定向到HTTPS,您可以在Nginx配置文件中添加以下配置:
   server {
       listen 80;
       server_name your_domain.com;
   
       location / {
           return 301 https://$host$request_uri;
       }
   }

        看起来都有一些工作量,不过Nginx是现在做代理和负载均衡的主流方式,扩展性也高,所以作者还是选择nginx进行解析,后续可以进行各种技术方案的实践。

2、Nginx部署方案

        既然选定了Nginx,那还要考虑一下部署方案,正常是单独一个服务器部署网关,然后解析转发到其他服务器,很明显,作者没钱。那就只能在同一个服务器上部署了。

        在同一个腾讯云服务器上部署又要考虑一下了,到底是直接部署服务器,还是建一个docker容器再把nginx部署进去。

        linux做起来挺简单的,大致这么搞一下

1. 安装Nginx:
   sudo yum install nginx

2. 启动Nginx:
   sudo systemctl start nginx

3. 配置Nginx:默认情况下,Nginx的配置文件位于`/etc/nginx/nginx.conf`。按照之前的说法再改改配置。

        docker还要考虑文件在服务器和容器里面的映射关系,毕竟容器里面的文件会随着容器的停止而销毁。不考虑的话也很简单。

1. 获取Nginx镜像:
   docker pull nginx

2. 创建并运行Nginx容器:
   docker run -d -p 80:80 --name my-nginx nginx

        考虑到隔离性和扩展性,不影响其他容器的内存使用,作者选择在容器里面部署。

三、域名

        域名申请哪家的都可以,但是作者之前都用的腾讯云,同一家肯定提供很多便利,很多调试兼容可以省掉。所以作者还是选择腾讯云。

1、注册

        在域名注册购买_域名注册选购 - 腾讯云 ,搜索自己想要的域名就可以下单购买了,很多10块一年的买了玩也无所谓。什么都能搜,有的可能被别人占了。

微信小程序 request failed,docker,云服务器,微信小程序,docker,容器,运维,微信小程序,nginx

2、ssl证书

        这个是当时有点疑惑的,作者习惯先调查搜集信息再实地察看,最后动手实践。但是网上搜集到的信息一般是说ssl有免费的也有收费的,dns解析也是,让人有点摸不着头脑。

        直接搜一下,其实是有收费也有免费的。

微信小程序 request failed,docker,云服务器,微信小程序,docker,容器,运维,微信小程序,nginx

微信小程序 request failed,docker,云服务器,微信小程序,docker,容器,运维,微信小程序,nginx

        对于SSL证书,有些提供商提供免费的SSL证书,例如Let's Encrypt,这些证书可以用于在网站上启用HTTPS协议,从而提供更安全的通信。但是,这些免费证书可能存在一些限制,例如有效期较短、不支持所有浏览器等。收费的SSL证书通常由专业的CA(证书颁发机构)提供,它们提供更广泛的浏览器兼容性、更长的有效期和更高的安全性等特性。

        而对于DNS服务,也有一些提供商提供免费的DNS服务,例如Cloudflare、Google等,有基本的DNS解析功能。但是,这些免费服务可能存在一些限制,例如不支持高级功能、不提供人工支持等。收费的DNS服务通常由专业的DNS提供商提供,提供更广泛的功能、更高的性能和更好的支持等特性。

        腾讯云申请域名之后自带dns解析,这个不用管。

        但是ssl证书还是要申请的。登录 - 腾讯云,ECC性能好、资源消耗少,但是很多老环境不支持,RSA有广泛的兼容性和经过验证的安全性,所以作者选择ECC,会单独在云环境搞这些的基本上没什么体量,安全相关不是最主要的,毕竟不是百万流量黑客都懒得逆向解析你的网站。反而消耗资源是小户比较关注的。

微信小程序 request failed,docker,云服务器,微信小程序,docker,容器,运维,微信小程序,nginx

        申请完成之后要下载,选择格式,适配各种部署方式

微信小程序 request failed,docker,云服务器,微信小程序,docker,容器,运维,微信小程序,nginx

         nginx下载之后有四个文件:

1. 证书文件(Certificate File):通常以 `.crt` 或 `.pem` 扩展名结尾。这个文件包含了公钥证书,用于验证服务器的身份。证书文件是由证书颁发机构(CA)签发的,其中包含了服务器的公钥、域名信息以及CA的数字签名。

2. 私钥文件(Private Key File):通常以 `.key` 或 `.pem` 扩展名结尾。这个文件包含了服务器的私钥,用于对传输的数据进行加密和解密。私钥文件必须保密,不应该被泄露给其他人。

3. 中间证书文件(Intermediate Certificate File):通常以 `.crt` 或 `.pem` 扩展名结尾。这个文件包含了证书链中的中间证书,用于构建完整的证书链。证书链是由根证书颁发机构(Root CA)签发的中间证书和服务器证书的序列。

4. 根证书文件(Root Certificate File):通常以 `.crt` 或 `.pem` 扩展名结尾。这个文件包含了根证书颁发机构的根证书。根证书用于验证中间证书的可信性,构成了证书链的最顶层。

微信小程序 request failed,docker,云服务器,微信小程序,docker,容器,运维,微信小程序,nginx

四、Nginx部署

1、创建nginx容器

创建个镜像,只是用于生成环境需要的文件

docker run --name nginx -p 80:80 -d nginx

2、docker cp把容器的文件拉到服务器本地目录下面

        **是指服务器的文件目录,比如创建文件夹 /etc/nginx/ssl之后就可以cp到这里

docker cp nginx:/etc/nginx/nginx.conf  **
docker cp nginx:/etc/nginx/conf.d  **
docker cp nginx:/usr/share/nginx/html **

3、用完就删

docker rm -f nginx

4、证书上传nginx目录

        这个没什么好说的,传到/etc/nginx/ssl下面去

5、改nginx配置

        这里是重点,端口映射、ssl证书位置、域名转向的目标位置,都是在这里配置     


user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/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  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;

    server {
    	listen 80;
    	#填写绑定证书的域名
    	server_name www.**.cloud;
    	#把http的域名请求转成https,相当于用户访问http也可以自动跳转到https,避免出现网页提示不安全
    	return 301 https://$host$request_uri; 
    }

    server {
        listen  443 ssl;
    	server_name  www.**.cloud; 
    	#证书文件名称
        ssl_certificate_key /etc/nginx/ssl/**.cloud.key;
        #私钥文件名称 .crt和.pem都可以用
        ssl_certificate /etc/nginx/ssl/**.cloud_bundle.pem; 
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;

        root         /usr/local/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        #首页
        location / {
           proxy_pass http://**;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       }
    }
}

6、启动

docker run -d \
-p 80:80 \
-p 443:443 \
--name nginx \
--restart=always \
--network-alias nginx \
-v **:/etc/nginx/nginx.conf \
-v **:/etc/nginx/conf.d \
-v **:/var/log/nginx \
-v **:/usr/share/nginx/html \
-v **:/etc/nginx/cert \
nginx

五、域名备案

        部署完了作者还想直接跑起来的,于是在测试环境调试了一下,通的,但是一到体验版就不行了。必须在小程序页面配置合法域名,但是配置又会提醒备案。

        这里还有个注意点,如果使用了一些第三方或者腾讯自身的组件api,也要把域名配进去,比如作者使用了腾讯地图的api,需要配置https://apis.map.qq.com

微信小程序 request failed,docker,云服务器,微信小程序,docker,容器,运维,微信小程序,nginx

        备案有几个点比较麻烦:

        1、视频验身,有两个,一个要拿着承诺书拍,一个要在注册地拍,注册地我选的是户口所在地,选工作地方应该也没关系

        2、 要把解析暂时停掉云解析 DNS 暂停或启用解析记录-操作指南-文档中心-腾讯云

         等到备案结束就可以开始使用了吗?天真

        还要进行公安备案ICP 备案 公安备案流程-备案后续流程-文档中心-腾讯云,不过30天之内就可以。

        然后在自己的微信小程序设置合法域名

微信小程序 request failed,docker,云服务器,微信小程序,docker,容器,运维,微信小程序,nginx

微信小程序 request failed,docker,云服务器,微信小程序,docker,容器,运维,微信小程序,nginx

六、总结

        现在各种复杂的环境、工具,但是原理都是相同的,看起来简单的域名、备案、解析转发涉及到的经验和技术问题也不少。最重要的就是思考分析,不然很多同学遇到问题就会头疼不知道下面该做什么该看什么。

        云技术、前后端、微信小程序有兴趣都可以交流。文章来源地址https://www.toymoban.com/news/detail-770630.html

到了这里,关于微信小程序(一)域名备案及HTTPS访问的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序-request fail

            接上篇云服务器-Docker容器-系统搭建部署-CSDN博客,一方面是提高实践架构技术,一方面给家里人做点生活小工具。         在搭建好服务器和前后端程序之后,经过测试,作者给家里人做的生活系微信小程序就差不多可以用了。         先搞了一个体验版本

    2024年02月07日
    浏览(32)
  • 微信小程序request:fail错误问题汇总

    一、小程序未配置域名导致的错误 经常有朋友在小程序发布之后,着急忙慌地来问:小程序发布了,但是打开之后一片空白,提示“request  fail”,是什么问题? 稳住不要慌,一般这个问题都是因为没有进行服务器域名配置导致的。服务器域名是 wx.request 请求去拉取数据的

    2024年02月09日
    浏览(28)
  • nginx域名配置——微信小程序访问后台地址的域名配置

    前后端分离版的项目,微信小程序发布后,向后台请求数据时访问后台地址失败,后台地址需要https以及域名,不能直接使用ip地址,因此需要做java后台地址的域名映射。 1、前置准备:域名申请和备案,以及安全证书(此处不进行赘述,网上有很多例子) 2、nginx配置( 注意

    2024年02月10日
    浏览(30)
  • 微信小程序报错request:fail -2:net::ERR_FAILED(生成中间证书)

    小程序本地测试调用https接口正常,真机调试发现报错 request:fail-2:net:ERR_FAILED 很有可能是ssl证书问题。 进入网站:https://www.myssl.cn/tools/check-server-cert.html 输入网站后读取证书结果如下 缺少中间证书 中间证书是CA(证书颁发机构)签发数字证书时使用的一种证书。它是在根CA证

    2024年02月04日
    浏览(33)
  • 微信小程序(二)--- 数据绑定,事件绑定,全局配置window,tabBar,网络数据请求,request合法域名,GET,POST

    目录 一、WXML模板语法 1、数据绑定 (1)Mustache语法 2、事件绑定  (1)常用事件  (2)属性列表  (3)target和currentTarget的区别  (4)bindtap语法格式  (5)在事件处理函数中为data中的数据赋值 (6)事件传参 (7)bindinput的语法格式 (8)实现文本框(input)和data之间的数

    2024年02月04日
    浏览(38)
  • 【微信小程序】---- 解决 request:fail url not in domain list

    1. 报错图片 2. 报错场景 在线上正式环境,大数据埋点的接口请求时报错!!! 3. 报错分析 未配置域名:在微信公众平台登录小程序后台配置 request 的域名; 配置域名工具未刷新:在工具右上角=》详情=》项目配置=》刷新,直到刷新出配置的域名; 体验版或真机的缓存:直

    2024年04月10日
    浏览(24)
  • 解决微信小程序报错:request 合法域名校验出错 如若已在管理后台更新域名配置,请刷新项目配置后重新编译项目,操作路径:“详情-域名信息”的方法

    本文将围绕微信小程序报错“request 合法域名校验出错”展开讨论,分析报错产生的原因,并提供相应的解决方法。该错误通常发生在微信小程序进行网络请求时,涉及到小程序后台配置与前端请求域名的匹配问题。 在使用微信小程序进行网络请求时,可能会遇到“request 合

    2024年04月26日
    浏览(53)
  • 微信小程序真机预览报错“errno“:600001,“errMsg“:“request:fail -202

    本地模拟测试无问题,上真机测试就报错“errno“:600001,“errMsg“:“request:fail -202 官方回答 通过 https://myssl.com/ 检测证书状态,该网站有缓存,如果有更换过证书记得手动点刷新报告 如果是证书链不完整,参照指引 https://blog.myssl.com/faq-miss-ca-certificate/ 解决即可 第二点觉得有

    2024年02月11日
    浏览(39)
  • 解决微信小程序报错request:fail url not in domain list

    问题:微信开发者工具能正常发送请求,在真机调试的时候发送请求报错:request:fail url not in domain list ? 1. 检查微信后台域名信息是否配置了request合法域名。 2.检查微信本地设置,将不校验合法域名勾选上。 配置完成后,需要在微信开发工具刷新查看是否配置成功,并且重

    2024年02月15日
    浏览(50)
  • 微信小程序网络请求报错:request:fail url not in domain list

    报错信息:request:fail url not in domain list 据提示:小程序上传后需要进行合法域名校验出错,然后查看相应文档,微信小程序官方要求每个微信小程序需要事先设置一个通讯域名,小程序只可以跟指定的域名与进行网络通信,所以我们需要在 小程序后台-设置-开发设置-服务器域

    2024年02月03日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包