欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

2. 正確處理反向代理

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

(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 中提取客戶端 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');
});

測試方法

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

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

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

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

相關(guān)文章

最新評(píng)論