Usage
Learn how to use headers and middleware both globally and per route.
Nuxt Security by default registers a set of global Nuxt routeRules
that will make your application more secure by default. Both headers and middleware can be easily configured and even disabled when needed.
โน Read more about security headers here.
Global configuration
To override default behavior for Nuxt Security globally, follow this pattern:
export default defineNuxtConfig({ security: { headers: { // certain header xXSSProtection: '1', }, // certain middleware rateLimiter: { // options } }})
Per route configuration
To enable per-route configuration, use the routeRules
like following:
export default defineNuxtConfig({ routeRules: { '/custom-route': { headers: { 'Foo': 'Bar' /* DO NOT DEFINE SECURITY HEADERS HERE 'Cross-Origin-Embedder-Policy': 'require-corp' */ } security: { // INSTEAD USE THE CUSTOM NUXT-SECURITY PROPERTY headers: { // certain header crossOriginEmbedderPolicy: 'require-corp' }, // certain middleware rateLimiter: { // options } } } }})
When using
Instead, make sure to use the
If your application defines conflicting headers at both levels, the
routeRules
, do not use the standard headers
property to define Nuxt Security options.
Instead, make sure to use the
security
property. This is a custom NuxtSecurity addition that does not exists in core Nuxt.
If your application defines conflicting headers at both levels, the
security
property will take precedence.For more information on routeRules
please see the Nuxt documentation
Nested route configuration
Nuxt Security will recursively resolve nested routes using your routeRules
definitions:
export default defineNuxtConfig({ // Global security: { headers: { crossOriginEmbedderPolicy: 'require-corp' // By default, COEP is 'require-corp' } } // Per route routeRules: { '/some-prefix/**': { security: { headers: { crossOriginEmbedderPolicy: false // COEP disabled on all routes beginning with /some-prefix/ } } }, '/some-prefix/some-route': { security: { headers: { crossOriginEmbedderPolicy: 'credentialless' // COEP is 'credentialless' on /some-prefix/some-route } } } }})
Inline route configuration
You can also use route roules in pages like following:
<template> <div>Hello from page</div></template><script setup lang="ts">defineRouteRules({ security: { headers: { xXSSProtection: '1' }, rateLimiter: { tokensPerInterval: 3, interval: 60000, }, }})</script>
To enable this macro, add the following configuration to your
nuxt.config.ts
file:experimental: { inlineRouteRules: true},
Disabling functionality
To disable certain middleware or headers, follow this pattern:
export default defineNuxtConfig({ // global security: { headers: { // certain header contentSecurityPolicy: false }, // certain middleware rateLimiter: false }, // per route routeRules: { '/custom-route': { security: { rateLimiter: false } } }})