nginx header module

2020-01-20
add_header 'Access-Control-Allow-Origin' '{ DOMAIN }';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, HEAD';
add_header 'Access-Control-Allow-Headers' 'Origin,Content-Type,authorization,accept';

API μž‘μ—…ν•  λ•ŒλŠ” 별닀λ₯Έ μ΄μŠˆκ°€ μ—†μ§€λ§Œ, ν”„λ‘ νŠΈμ—”λ“œ νŒŒνŠΈμ™€ μž‘μ—… ν•  λ•ŒλŠ” CORS μ΄μŠˆμ— λŒ€ν•΄μ„œ 생각을 해봐야 ν•œλ‹€. 일반적으둜 nginx λ₯Ό μ‚¬μš©ν•œλ‹€κ³  ν•  λ•Œ, μœ„μ™€ 같이 적어 μ£Όλ©΄ 해결이 λ˜κ² μ§€λ§Œ **사싀 μœ„μ˜ μ½”λ“œμ—λŠ” 보강해야 ν•  뢀뢄이 μžˆλ‹€. **

401 은 보톡 Authorization κ΄€λ ¨λœ μ΄μŠˆκ°€ μžˆμ„ λ•Œ λ°œμƒν•˜κ²Œ λ˜λŠ”λ°, μœ„μ™€ 같이 CORS λ₯Ό μ μš©ν•˜λ©΄ 401 status code λ₯Ό λ‚΄λ € μ£ΌλŠ” reponse μ—λŠ” CORS 적용이 λ˜μ§€ μ•ŠλŠ”λ‹€.

μ΄μœ λŠ” add_header λΆ€λΆ„ λ•Œλ¬ΈμΈλ°, 이 뢀뢄은 사싀 nginx의 ngx_http_headers_module 을 ν†΅ν•΄μ„œ μ‚¬μš©ν•  수 μžˆλ‹€. 그런데 add_header 의 μ‚¬μš©λ²•μ„ 보면 이렇닀.

    Syntax: add_header name value [always];
    Default:    β€”
    Context:    http, server, location, if in location

κ·ΈλŸ¬λ‹ˆκΉŒ μœ„μ˜ CORS μ—μ„œ Access-Control-Allow-Origin 은 name 이고 value λŠ” μš°λ¦¬κ°€ μ§€μ •ν•˜λŠ” μ–΄λ–€ 도메인이 λ˜λŠ” 것인데, always λŠ” 뭘까?

401 에 μ œλŒ€λ‘œ μ μš©λ˜μ§€ μ•Šμ•˜λ˜ μ΄μœ λŠ” 기본적으둜 add_header λŠ” μ•„λž˜μ˜ http μƒνƒœμ½”λ“œμ— λŒ€ν•΄μ„œλ§Œ μ μš©λœλ‹€.

    200, 201 (1.3.10), 204, 206, 301, 302, 303, 304, 307 (1.1.16, 1.0.13), or 308 (1.13.0)

κ·Έλ ‡κΈ° λ•Œλ¬Έμ— λͺ¨λ“  status code 에 λŒ€ν•΄μ„œ μ μš©ν•˜κ³  μ‹ΆμœΌλ©΄ always λ₯Ό 뒀에 λΆ™μ—¬μ£Όλ©΄ λœλ‹€. always λŠ” μƒνƒœμ½”λ“œμ™€ 상관없이 λͺ¨λ“  status code 에 λŒ€ν•΄μ„œ header λ₯Ό μ μš©μ‹œν‚¨λ‹€.

ngx_http_headers_module 은 add_header 외에도 expires, add_trailer λ₯Ό μ§€μ •ν•  수 있게 ν•΄μ€€λ‹€.

References:
- http://nginx.org/en/docs/http/ngx_http_headers_module.html#add_header** **

#nginx  #cors  #header  #add_header