How to add Cross-Origin-Opener-Policy on Nginx
Last updated · Reviewed by a CISSP-certified security practitioner
To add Cross-Origin-Opener-Policy on Nginx, set the header in nginx.conf (server block) with the value same-origin. Isolates your window from pop-ups and openers on other sites. Run nginx -t, then systemctl reload nginx. Then confirm it with curl -I or a free FixSecurityHeaders scan.
What does Cross-Origin-Opener-Policy do?
COOP puts your page in its own browsing context group so cross-origin windows can't get a handle to it.
Risk if missing: Cross-window attacks (XS-Leaks, tabnabbing) and Spectre-style side channels.
What is the Nginx configuration?
Add this to nginx.conf (server block):
# Inside your server { } block
add_header Cross-Origin-Opener-Policy "same-origin" always;How do I add it step by step?
- Open nginx.conf (server block).
- Paste the Cross-Origin-Opener-Policy configuration shown below.
- Run nginx -t, then systemctl reload nginx.
- Run curl -I https://yourdomain.com and look for the cross-origin-opener-policy line.
- Scan your site on FixSecurityHeaders to confirm the grade improved.
How do I verify it worked?
curl -sI https://yourdomain.com | grep -i "cross-origin-opener-policy"
# expected:
# cross-origin-opener-policy: same-originCheck your site now
Free scan, instant grade, exact fixes for your stack.
What are the common mistakes?
- OAuth or payment pop-ups that talk back via window.opener may need same-origin-allow-popups.
- 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
| Header | Cross-Origin-Opener-Policy |
|---|---|
| Recommended value | same-origin |
| Stack | Nginx |
| Where | nginx.conf (server block) |
| Compliance | OWASP ASVS V14.4 |
FAQ
What value should I use for Cross-Origin-Opener-Policy?
A safe default is same-origin. OAuth or payment pop-ups that talk back via window.opener may need same-origin-allow-popups.
Why isn't Cross-Origin-Opener-Policy 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 Cross-Origin-Opener-Policy 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 Cross-Origin-Opener-Policy?
OWASP ASVS V14.4.
Related guides
- Cross-Origin-Opener-Policy explained
- Cross-Origin-Opener-Policy on Apache
- Cross-Origin-Opener-Policy on IIS
- Cross-Origin-Opener-Policy on Cloudflare
- Cross-Origin-Opener-Policy on Vercel
- Strict-Transport-Security on Nginx
- Content-Security-Policy on Nginx
- X-Content-Type-Options on Nginx
- X-Frame-Options on Nginx