Remix 中这样获取 ip 地址

一、Remix 请求对象与 express request 不一样

Remix 遵循 Web 标准的 request和 response,而 Express 没有遵循。

Remix request 对象中并没有包含 ip 地址,但是社区中已经有了 ip 地址的获取方法。但是值得注意的是 remix 服务的 ip 地址是随 headers 一起。

本地开发的时候,headers 上是没有携带 ip 的 header,所以我们不能获取。

二、remix-utils

2.1)安装 remix- utils

sh 复制代码
pnpm add remix-utils

2.2)使用

ts 复制代码
import { getClientIPAddress } from 'remix-utils/get-client-ip-address'

三、以 nginx 为例

3.1)拥有一台服务器

最好有一台测试服务器,用于简单的测试。

3.2)nginx 相关命令

sh 复制代码
yum install nginx # 安装
sudo systemctl restart nginx # 重启

vim /etc/nginx/nginx.conf # 进入配置文件

3.3)打开服务器防火墙端口 5173,用于跑测试服务。

使用云服务器在后台配置以下即可。

3.4)写一个 nginx 简单的配置

sh 复制代码
server {
    listen 5173; # 监听的端口

    location / {
        proxy_pass http://127.0.0.1:5174; # 转发到本地的 5173 端口
        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;
    }
}

我们监听 5173 端口,代理到本地的 5174 端口,这意味着我们的 remix 服务要启动到 5174 端口。

sh 复制代码
# 使用脚手架创建一个 remix 应用
npx create-remix@latest

接下来在 root.tsx 中添加 loader 看 ip 能够正常

ts 复制代码
import { getClientIPAddress } from "remix-utils/get-client-ip-address";

export async function loader({ request }: LoaderArgs) {
        let ipAddress = getClientIPAddress(request.headers);
        console.log("ipAddress", ipAddress)
        return null
}

指定端口启动:

sh 复制代码
pnpm run build # 在服务端构建
PORT=5174 pnpm run start --host # 指定端口和 host 显示 

四、访问

经过实际云服务检测,通过 nginx 是能够拿到 ip 地址的。所以在开发环境返回的 null 也是正常。

五、小结

在开发的时候,remix 框架可能会带来一些疑惑,我们可以在配合云服务器,迅速的测试我们的示例。希望能够帮助到读者朋友。

相关推荐
掘金酱2 分钟前
📱 TRAE SOLO 移动端上线征文——“我的第一次移动端AI办公” 评测 | 获奖名单公示
前端·人工智能·trae
随风行酱8 分钟前
前端工程师的副业之路:周末跑滴滴的真实体验
前端·javascript·ai编程
北城笑笑12 分钟前
Vibe Coding 主流 AI 编程工具:Claude Code 与 Codex 全面解析( Claude and Codex )
前端·ai·ai编程·fpga
Tenaryo15 分钟前
从 178ms 到 1ms:当 Store-to-Load Forwarding 卡住你的 for 循环
后端·面试
Darling噜啦啦15 分钟前
JS 数据结构实战:从栈队列到链表,一文吃透数组底层原理与线性数据结构
前端·javascript·数据结构
卷无止境17 分钟前
PM4Py 入门教程:用 Python 做流程挖掘
后端
Asize25 分钟前
重生之我在 Vibe Coding 时代当程序员:第十五课,正则表达式和 HTTP 请求:规则不是背出来的,是拆出来的
前端·javascript·后端
Mintopia27 分钟前
从意图到评估:理解用户操作产品的完整行动链路
前端
惜缘破军28 分钟前
基于 Spring Boot 3 和 Spring Cloud 2023 的微服务基础框架 hdfk7-boot
spring boot·后端·微服务
竹林81829 分钟前
从报错到跑通:我用 @solana/web3.js 在 React 中实现 Solana 钱包连接的全过程
前端