最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Node koa服務(wù)器實(shí)現(xiàn)獲取客戶(hù)端ip

 更新時(shí)間:2025年02月13日 16:25:21   作者:GP9_小怪獸  
這篇文章主要為大家詳細(xì)介紹了Node koa服務(wù)器實(shí)現(xiàn)獲取客戶(hù)端ip的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解下

1. 確保請(qǐng)求不是來(lái)自本地

如果你在本地測(cè)試,瀏覽器直接訪(fǎng)問(wèn) localhost 或 127.0.0.1,服務(wù)端自然只能看到本地 IP。要測(cè)試真實(shí) IP,可以:

  • 另一臺(tái)設(shè)備(如手機(jī)或其他電腦)訪(fǎng)問(wèn)你的服務(wù)。
  • 部署到公網(wǎng)服務(wù)器,通過(guò)公網(wǎng) IP 或域名訪(fǎng)問(wèn)。

2. 正確處理反向代理

如果服務(wù)部署在 Nginx 等反向代理后,需確保代理正確傳遞客戶(hù)端的 IP 地址。以下是常見(jiàn)問(wèn)題的解決方案:

(1) 在 Koa 中啟用代理信任Koa 默認(rèn)不信任代理的 X-Forwarded-For 頭,需手動(dòng)啟用:

const Koa = require('koa');
const app = new Koa();

// 啟用代理信任(如果部署在反向代理后)
app.proxy = true; // 關(guān)鍵!告訴 Koa 信任反向代理的頭部

// 其他中間件和路由...

(2) 從請(qǐng)求頭中提取真實(shí) IP修改路由代碼,優(yōu)先從 X-Forwarded-For 中提取 IP,并處理可能的多個(gè) IP(如多層代理):

router.get('/get-ip', (ctx) => {
  // 從 X-Forwarded-For 中提取客戶(hù)端 IP(處理多個(gè)代理的情況)
  const forwardedIps = ctx.request.get('X-Forwarded-For') || '';
  const clientIP = forwardedIps.split(',')[0]?.trim() || ctx.ip;

  ctx.body = {
    ip: clientIP
  };
});

(3) 檢查其他可能頭部有些代理服務(wù)器(如 Nginx)會(huì)用 X-Real-IP 傳遞真實(shí) IP,可以補(bǔ)充檢查:

const clientIP = ctx.get('X-Real-IP') || forwardedIps.split(',')[0]?.trim() || ctx.ip;

3. 驗(yàn)證反向代理配置

如果使用 Nginx,確保配置中包含傳遞 IP 的頭部:

location / {
  proxy_pass http://localhost:3000;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header Host $http_host;
}

完整代碼示例

const Koa = require('koa');
const Router = require('@koa/router');

const app = new Koa();
const router = new Router();

// 啟用代理信任(關(guān)鍵?。?
app.proxy = true;

router.get('/get-ip', (ctx) => {
  // 嘗試從 X-Forwarded-For 中提取第一個(gè) IP(適用于反向代理)
  const forwardedIps = ctx.get('X-Forwarded-For') || '';
  const clientIP = forwardedIps.split(',')[0]?.trim() || 
                   ctx.get('X-Real-IP') || 
                   ctx.ip;

  ctx.body = {
    ip: clientIP
  };
});

app.use(router.routes());
app.use(router.allowedMethods());

app.listen(3000, () => {
  console.log('Server is running on http://localhost:3000');
});

測(cè)試方法

  • 本地測(cè)試:用 curl 或 Postman 從其他設(shè)備訪(fǎng)問(wèn)你的服務(wù)。
  • 公網(wǎng)測(cè)試:部署到服務(wù)器后,通過(guò)瀏覽器或工具訪(fǎng)問(wèn),觀察返回的 IP 是否與你的公網(wǎng) IP 一致。

如果問(wèn)題仍未解決,請(qǐng)檢查

  • 是否啟用了 app.proxy = true?
  • 反向代理配置是否正確?
  • 是否有防火墻或 CDN 干擾?

到此這篇關(guān)于Node koa服務(wù)器實(shí)現(xiàn)獲取客戶(hù)端ip的文章就介紹到這了,更多相關(guān)Node獲取客戶(hù)端ip內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • node實(shí)現(xiàn)簡(jiǎn)單的增刪改查接口實(shí)例代碼

    node實(shí)現(xiàn)簡(jiǎn)單的增刪改查接口實(shí)例代碼

    在本篇文章里小編給大家整理的是關(guān)于node實(shí)現(xiàn)簡(jiǎn)單的增刪改查接口的相關(guān)實(shí)例內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2019-08-08
  • node.js中的console.log方法使用說(shuō)明

    node.js中的console.log方法使用說(shuō)明

    這篇文章主要介紹了node.js中的console.log方法使用說(shuō)明,本文介紹了console.log的方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • node.js中g(shù)et和post接口教程

    node.js中g(shù)et和post接口教程

    這篇文章主要介紹了node.js中g(shù)et和post接口學(xué)習(xí),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • Node.JS使用Sequelize操作MySQL的示例代碼

    Node.JS使用Sequelize操作MySQL的示例代碼

    Node.JS提供了操作數(shù)據(jù)庫(kù)的基礎(chǔ)接口,本篇文章主要介紹了Node.JS使用Sequelize操作MySQL的示例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-10-10
  • 手把手教你通過(guò)nodejs快速搭建一個(gè)服務(wù)器

    手把手教你通過(guò)nodejs快速搭建一個(gè)服務(wù)器

    這篇文章主要給大家介紹了關(guān)于如何通過(guò)nodejs快速搭建一個(gè)服務(wù)器的相關(guān)資料,在node.js中創(chuàng)建一個(gè)服務(wù)器非常簡(jiǎn)單,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • Mac node刪除以及重新安裝案例詳解

    Mac node刪除以及重新安裝案例詳解

    這篇文章主要介紹了Mac node刪除以及重新安裝案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • Node.js安裝詳細(xì)步驟教程(Windows版)詳解

    Node.js安裝詳細(xì)步驟教程(Windows版)詳解

    這篇文章主要介紹了Node.js安裝詳細(xì)步驟教程(Windows版),本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 關(guān)于nodejs和npm版本不匹配的解決方法

    關(guān)于nodejs和npm版本不匹配的解決方法

    在運(yùn)行npm命令時(shí)總會(huì)出現(xiàn)如下報(bào)錯(cuò),npm?dose?not?support?Node.js v12.18.0,發(fā)現(xiàn)是node版本和npm版本不匹配造成的,所以本文給大家介紹了關(guān)于nodejs和npm版本不匹配的解決方法,需要的朋友可以參考下
    2023-11-11
  • 詳解nodejs 文本操作模塊-fs模塊(五)

    詳解nodejs 文本操作模塊-fs模塊(五)

    本篇文章主要介紹了nodejs 文本操作模塊-fs模塊(五),這里再說(shuō)最后一個(gè)我看來(lái)很重要的方法,監(jiān)聽(tīng)文件或者目錄的的方法watchFile。有興趣的可以了解一下。
    2016-12-12
  • 詳解基于Node.js的HTTP/2 Server實(shí)踐

    詳解基于Node.js的HTTP/2 Server實(shí)踐

    HTTP/2目前已經(jīng)逐漸的在各大網(wǎng)站上開(kāi)始使用,這篇文章主要介紹了詳解基于Node.js的HTTP/2 Server實(shí)踐,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05

最新評(píng)論

从江县| 大埔县| 习水县| 牙克石市| 庆云县| 栾川县| 刚察县| 比如县| 扎囊县| 揭西县| 临颍县| 长汀县| 石家庄市| 常州市| 新晃| 安宁市| 边坝县| 洛阳市| 沾化县| 长子县| 沐川县| 青阳县| 玛沁县| 清水县| 宁海县| 青海省| 苍南县| 永善县| 昔阳县| 玛曲县| 绍兴县| 咸阳市| 平遥县| 浠水县| 巴塘县| 二连浩特市| 和龙市| 桓台县| 罗甸县| 滦南县| 连云港市|