Skip to content
FixSecurityHeadersScan a site

How to add X-Frame-Options on Nginx

Last updated · Reviewed by a CISSP-certified security practitioner

To add X-Frame-Options on Nginx, set the header in nginx.conf (server block) with the value DENY. Prevents your site being embedded in iframes (clickjacking). Run nginx -t, then systemctl reload nginx. Then confirm it with curl -I or a free FixSecurityHeaders scan.

What does X-Frame-Options do?

X-Frame-Options (or the modern CSP frame-ancestors) tells browsers whether other sites may put your pages inside an iframe.

Risk if missing: Attackers can overlay your page invisibly and trick users into clicking buttons (clickjacking) — e.g. changing settings or confirming payments.

What is the Nginx configuration?

Add this to nginx.conf (server block):

nginx.conf (server block)
# Inside your server { } block
add_header X-Frame-Options "DENY" always;

How do I add it step by step?

  1. Open nginx.conf (server block).
  2. Paste the X-Frame-Options configuration shown below.
  3. Run nginx -t, then systemctl reload nginx.
  4. Run curl -I https://yourdomain.com and look for the x-frame-options line.
  5. Scan your site on FixSecurityHeaders to confirm the grade improved.

How do I verify it worked?

terminal
curl -sI https://yourdomain.com | grep -i "x-frame-options"
# expected:
# x-frame-options: DENY

Check your site now

Free scan, instant grade, exact fixes for your stack.

What are the common mistakes?

  • Use SAMEORIGIN if your own site frames its pages.
  • ALLOW-FROM is obsolete; use CSP frame-ancestors for allow-lists.
  • If CSP frame-ancestors is present, modern browsers ignore X-Frame-Options.
  • Always add the always flag so headers are sent on error responses too.
  • add_header in a location block replaces all add_header directives inherited from server — repeat them or use an include file.

Quick reference

HeaderX-Frame-Options
Recommended valueDENY
StackNginx
Wherenginx.conf (server block)
ComplianceOWASP ASVS V14.4.7, NIST 800-171 3.13.1, CMMC SC.L2-3.13.1

FAQ

What value should I use for X-Frame-Options?

A safe default is DENY. Use SAMEORIGIN if your own site frames its pages.

Why isn't X-Frame-Options showing up on Nginx?

Always add the always flag so headers are sent on error responses too. Also clear any CDN or page cache, and check you edited the config that actually serves your domain.

Does X-Frame-Options affect SEO or performance?

No measurable performance cost — it's a few bytes per response. It doesn't affect rankings directly, but a misconfigured policy can break page resources, so test before enforcing.

Which compliance frameworks reference X-Frame-Options?

OWASP ASVS V14.4.7, NIST 800-171 3.13.1, CMMC SC.L2-3.13.1.

Related guides