微信小程式使用微信雲託管新增自定義域名並轉發到pexels.com

一方_self發表於2024-05-09

背景:我要在小程式上顯示pexels.com上的圖片,然後我得先把pexels.com的域名新增到小程式的request合法域名中,但是pexels.com是國外的,在國內沒有備案所以新增不了。解決方案就是:用一個已經備案好的域名進行轉發,轉發的伺服器我選擇的是微信雲託管,備案好的域名還需要ssl,沒有的話本文會講到如何申請一個免費的ssl證書。

因為pexels.com開放了API可以拿到圖片,所以得先請求https://api.pexels.com拿到圖片列表,圖片的域名是images.pexels.com,兩個域名都不能透過小程式後臺的校驗:

微信小程式使用微信雲託管新增自定義域名並轉發到pexels.com

所以得需要有一個已備案的域名來進行轉發,這樣就能繞過限制了。

需要準備的物料:

1、一個在國內已經備案好的域名

2、github賬號

大致流程如下:

開通微信雲託管服務

基於微信雲託管模板部署部署一個expressjs服務

修改服務的路由轉發

1、先開通微信雲託管:
進入控制檯:
https://cloud.weixin.qq.com/cloudrun/console

點選新建服務,輸入服務名稱點選確定:

微信小程式使用微信雲託管新增自定義域名並轉發到pexels.com

大家可以先fork一下我的程式碼倉庫:
https://github.com/2424004764/pexels-proxy-expressjs,我把轉發的程式碼都寫好了

之後在選擇方式的時候選擇繫結github倉庫:

微信小程式使用微信雲託管新增自定義域名並轉發到pexels.com

如果不方便使用github倉庫,也可以將倉庫程式碼包下載下來以手動上傳程式碼包的形式部署:

微信小程式使用微信雲託管新增自定義域名並轉發到pexels.com

如果是github的話,提交程式碼以後會重新自動部署,會方便很多,而手動上傳程式碼包的話還得重新上傳再手動點選部署,比較麻煩一點。

選擇好後點選發布按鈕就開始部署了:

微信小程式使用微信雲託管新增自定義域名並轉發到pexels.com

等待部署完成,一般這個步驟幾分鐘左右,部署好是這樣的:

微信小程式使用微信雲託管新增自定義域名並轉發到pexels.com

我們可以點選雲端除錯測試下服務是否可用:

微信小程式使用微信雲託管新增自定義域名並轉發到pexels.com

如果輸出了當前時間,則表明服務是好的。

expressjs服務的index.js程式碼如下:

const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');

const app = express();

try {
  // 建立一個代理中介軟體,將以 /photos 開頭的請求代理到目標地址
  const photosProxy = createProxyMiddleware({
    target: "http://images.pexels.com/photos",
    changeOrigin: true, // 設定更改請求頭中的 Origin
    pathRewrite: {
      // 將 /photos 開頭的請求重寫為目標地址的不同路徑,保留 /photos
      '^/photos': '' // 保留 /photos 部分,只替換後面的部分
    },
  });

  // 使用代理中介軟體來處理以 /photos 開頭的請求
  app.use('/photos', photosProxy);

  const photosApiProxy = createProxyMiddleware({
    target: "https://api.pexels.com",
    changeOrigin: true,
    pathRewrite: {
      '^/pexels-api': ''
    }
  });

  // 當請求pexels-api時也轉發
  app.use('/pexels-api', photosApiProxy);

  // 根目錄路由處理函式,輸出當前時間
  app.get('/', (req, res) => {
    const currentTime = new Date().toLocaleString();  // 獲取當前時間
    res.send(`Current time is: ${currentTime}`);       // 返回當前時間到客戶端
  });

  app.listen(80, () => {
    console.log("啟動成功");
  });
} catch (error) {
  console.error('Failed to start application:', error);
  process.exit(1); // 退出應用並返回非零狀態碼
}

  

這樣在一個域名下完成了兩個域名的轉發,只要透過字尾區分即可,我們先設定好自定義域名再說這麼訪問。

我們來到自定義域名頁面,點選繫結域名:

微信小程式使用微信雲託管新增自定義域名並轉發到pexels.com

假設aaaa.com是你已經備案好的域名,pexels-proxy是二級域名,如果你的域名有https證書的話,可以先把https證書上傳,如果沒有我在本文會講到如果10分鐘申請一個免費https證書。

申請免費證書,我們開啟並註冊一個賬號:
https://www.sslchaoshi.com/

我們選擇體驗版證書:

微信小程式使用微信雲託管新增自定義域名並轉發到pexels.com

選擇第一個,點選檢視詳情:

微信小程式使用微信雲託管新增自定義域名並轉發到pexels.com

點選購買:

微信小程式使用微信雲託管新增自定義域名並轉發到pexels.com

選擇餘額支付:

微信小程式使用微信雲託管新增自定義域名並轉發到pexels.com

因為我這裡已經購買過了,所以不能再購買了:

微信小程式使用微信雲託管新增自定義域名並轉發到pexels.com

購買後來到個人中心,這裡應該就能看到訂單了:

微信小程式使用微信雲託管新增自定義域名並轉發到pexels.com

我記得好像是有驗證的,有一個選項是選擇dns,然後需要驗證域名的cname記錄,按操作完成後等幾分鐘就能下證了:

微信小程式使用微信雲託管新增自定義域名並轉發到pexels.com

我們點選證書打包下載,開啟解壓後的目錄的ALL目錄:

微信小程式使用微信雲託管新增自定義域名並轉發到pexels.com

我們再回到微信雲託管的自定義域名頁面:

微信小程式使用微信雲託管新增自定義域名並轉發到pexels.com

依次上傳證書和私鑰,然後點選確定,之後就會得到一個cname的記錄值:

微信小程式使用微信雲託管新增自定義域名並轉發到pexels.com

可在這裡檢車ssl證書狀態(微信官方推薦):

https://myssl.com/ssl.html

微信小程式使用微信雲託管新增自定義域名並轉發到pexels.com

再去域名註冊商處解析一個cname記錄即可

微信小程式使用微信雲託管新增自定義域名並轉發到pexels.com

訪問方式:

1、如果是請求api:則最終請求url為
https://pexels-proxy.aaaa.com/pexels-api/v1/curated。這樣就能繞過pexels.com未備案的限制了

2、如果是請求的圖片:

我們請求api的時候返回的列表格式為:

微信小程式使用微信雲託管新增自定義域名並轉發到pexels.com

我們只需要將圖片的域名改成我們的子域名即可:

let list = []

res.photos.forEach((item, index) => {

    list.push({

        title: item.alt,

        image: item.src.medium.replace("images.pexels.com", "pexels-proxy.aaaa.com"),

    })

})

  

這裡返回的src.original是原圖,medium是小圖,作為列表只用,如果點選,則顯示原圖,這樣圖片就不會失真了。

效果:

微信小程式使用微信雲託管新增自定義域名並轉發到pexels.com

這篇文章就到這裡啦!如果你對文章內容有疑問或想要深入討論,歡迎在評論區留言,我會盡力回答。同時,如果你覺得這篇文章對你有幫助,不妨點個贊並分享給其他同學,讓更多人受益。

想要了解更多相關知識,可以檢視我以往的文章,其中有許多精彩內容。記得關注我,獲取及時更新,我們可以一起學習、討論技術,共同進步。

感謝你的閱讀與支援,期待在未來的文章中與你再次相遇!

相關文章