diff --git a/packages/next/server/next-server.ts b/packages/next/server/next-server.ts index d4189e0c17c7..87125e599f83 100644 --- a/packages/next/server/next-server.ts +++ b/packages/next/server/next-server.ts @@ -407,7 +407,7 @@ export default class NextNodeServer extends BaseServer { } const imagesConfig = this.nextConfig.images - if (imagesConfig.loader !== 'default') { + if (imagesConfig.loader !== 'default' || imagesConfig.unoptimized) { await this.render404(req, res) return { finished: true } } diff --git a/test/integration/image-optimizer/test/index.test.ts b/test/integration/image-optimizer/test/index.test.ts index cc31e3e7433b..a238ea0f06d8 100644 --- a/test/integration/image-optimizer/test/index.test.ts +++ b/test/integration/image-optimizer/test/index.test.ts @@ -558,6 +558,36 @@ describe('Image Optimizer', () => { }) }) + describe('images.unoptimized in next.config.js', () => { + let app + let appPort + + beforeAll(async () => { + nextConfig.replace( + '{ /* replaceme */ }', + JSON.stringify({ + images: { + unoptimized: true, + }, + }) + ) + await cleanImagesDir({ imagesDir }) + appPort = await findPort() + app = await launchApp(appDir, appPort) + }) + afterAll(async () => { + await killApp(app) + nextConfig.restore() + }) + it('should 404 when unoptimized', async () => { + const size = 384 // defaults defined in server/config.ts + const query = { w: size, q: 75, url: '/test.jpg' } + const opts = { headers: { accept: 'image/webp' } } + const res = await fetchViaHTTP(appPort, '/_next/image', query, opts) + expect(res.status).toBe(404) + }) + }) + describe('External rewrite support with for serving static content in images', () => { let app let appPort