Nextjs Image 图片组件如何设置透明代理

13 天前
 daddyLi
<Image
                        alt="营业执照"
                        className="min-w-32 rounded-md object-cover" // aspect-square
                        height="4"
                        src={customer.businessLicense}
                        width="32"
                      />

因为部署环境需要通过一台代理服务器请求公网 cdn ,请问如何配置 nextjs 使得能够通过代理服务器获取图片资源,请有经验的 xd 帮忙解答下,感谢!

317 次点击
所在节点   Next.js
1 条回复
yxSamsara
2 天前
1. 使用 Next.js 的 next.config.js 配置代理
借助 next.config.js 和 images 配置,您可以将图片加载代理服务器的 URL 。

配置示例:
javascript
复制代码
/** @type {import('next').NextConfig} */
const nextConfig = {
images: {
domains: ['your-cdn-domain.com'], // 公网 CDN 域名
loader: 'custom',
path: '', // 使用自定义加载器时,需要将 path 设置为空
},
async rewrites() {
return [
{
source: '/_proxy/cdn/:path*', // 代理路径
destination: 'http://proxy-server-domain.com/:path*', // 代理服务器地址
},
];
},
};

module.exports = nextConfig;
domains: 添加您的公网 CDN 域名到允许的图片加载域名列表中。
rewrites: 将 /cdn 的请求重写到代理服务器地址。
2. 自定义图片加载器
您可以通过 Next.js 的 自定义图片加载器 配置如何加载图片。

自定义加载器示例:
在组件中使用自定义加载器:

javascript
复制代码
import Image from 'next/image';

const myLoader = ({ src, width, quality }) => {
return `http://proxy-server-domain.com/${src}?w=${width}&q=${quality || 75}`;
};

export default function Example() {
return (
<Image
loader={myLoader}
src="your-cdn-path/image.jpg" // CDN 图片路径
alt="Example Image"
width={500}
height={500}
/>
);
}
3. 通过环境变量配置代理路径
为了更灵活,可以在 .env.local 中定义代理服务器的路径,例如:

env
复制代码
NEXT_PUBLIC_PROXY_SERVER=http://proxy-server-domain.com
然后在 next.config.js 或加载器中使用:

javascript
复制代码
const proxyServer = process.env.NEXT_PUBLIC_PROXY_SERVER;

const myLoader = ({ src, width, quality }) => {
return `${proxyServer}/${src}?w=${width}&q=${quality || 75}`;
};

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1087810

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX