์๋
ํ์ธ์!
Eric์
๋๋ค!
์ค๋ ์์๋ณผ ๋ด์ฉ์
์ผ๋ง์ ์ ํ์ฌ์์ CORS๋ฅผ ์ธํ
ํ๋ ค๋๋ฐ,
Server์์ ์ธํ
ํ๊ธฐ ์ด๋ ค์ด ์ํฉ์ด์์ด์,
NGINX์ CORS๋ฅผ ์ธํ
ํด์ CORS ์ธํ
์ ํด๋ณด๊ณ ์ ์๋ํ๋ ๋ฐฉ๋ฒ์
๋๋ค!
์ด๋ฒ๊ธฐํ์ NGINX ๊ฐ ๋ฌด์์ธ์ง ์์๋ณด๊ณ ์ ์ ๊ฐ์ด NGINX ์ ๋ํด์ ์์๋ณด์์ฃ !
NGINX ์ค์น ๋ฐ CORS ์ค์ ๋ฐฉ๋ฒ
์๊ฐ
์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋ CORS(Cross-Origin Resource Sharing)๋ ์ค์ํ ์์์ ๋๋ค. CORS๋ ์น ๋ธ๋ผ์ฐ์ ์์ ๋ค๋ฅธ ์ถ์ฒ์ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ ๋ ๋ฐ์ํ๋ ๋ณด์ ๊ธฐ๋ฅ์ผ๋ก, ์ด๋ฅผ ์ ์ ํ ์ค์ ํ์ง ์์ผ๋ฉด API ์์ฒญ์ด ์ฐจ๋จ๋ ์ ์์ต๋๋ค. ์ด ๊ธ์์๋ Ubuntu ํ๊ฒฝ์์ NGINX๋ฅผ ์ค์นํ๊ณ CORS ์ค์ ์ ํ๋ ๋ฐฉ๋ฒ์ ๋จ๊ณ๋ณ๋ก ์ค๋ช ํ๊ฒ ์ต๋๋ค.
1. NGINX ์ค์น
๋จผ์ NGINX๋ฅผ ์ค์นํฉ๋๋ค. ์๋์ ๋ช ๋ น์ด๋ฅผ ํตํด NGINX๋ฅผ ์ค์นํ ์ ์์ต๋๋ค.
sudo apt update
sudo apt install nginx -y
์ค์น๊ฐ ์๋ฃ๋๋ฉด NGINX๊ฐ ์๋์ผ๋ก ์์๋ฉ๋๋ค. ์ํ๋ฅผ ํ์ธํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
sudo systemctl status nginx
NGINX๊ฐ ์ ์์ ์ผ๋ก ์คํ ์ค์ด๋ผ๋ฉด, ์น ๋ธ๋ผ์ฐ์ ์์ ์๋ฒ์ IP ์ฃผ์๋ฅผ ์ ๋ ฅํ์ฌ NGINX ํ์ ํ์ด์ง๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
2. NGINX ์ค์ ํ์ผ ์์น
NGINX ์ค์ ํ์ผ์ ์ผ๋ฐ์ ์ผ๋ก /etc/nginx/nginx.conf
์ ์์ต๋๋ค. ๊ฐ๋ณ ์๋ฒ ๋ธ๋ก ์ค์ ์ /etc/nginx/sites-available/
๋๋ ํ ๋ฆฌ์ ์์ต๋๋ค. ์ฌ๊ธฐ์์ ์ค์ ํ์ผ์ ์์ฑํ๊ณ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ํตํด ํ์ฑํํ ์ ์์ต๋๋ค.
3. CORS ์ค์
์ด์ NGINX๋ฅผ ํตํด CORS๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๊ฒ ์ต๋๋ค. CORS ์ค์ ์ NGINX์ http
, server
, ๋๋ location
๋ธ๋ก์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์๋ /etc/nginx/sites-available/default
ํ์ผ์ ์์ ํ์ฌ ๊ธฐ๋ณธ ์ค์ ์ ์ถ๊ฐํ๊ฒ ์ต๋๋ค.
์ค์ ํ์ผ ์ด๊ธฐ
sudo nano /etc/nginx/sites-available/default
์ค์ ์ถ๊ฐ
๋ค์์ CORS ์ค์ ์์ ์
๋๋ค. ์ด ์ค์ ์ server
๋ธ๋ก ์์ ์ถ๊ฐํฉ๋๋ค.
server {
listen 80;
server_name example.com;
location / {
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
add_header 'Access-Control-Max-Age' 86400;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
proxy_pass http://your_backend_server;
}
}
์ค์ ์ค๋ช
if ($request_method = 'OPTIONS')
: ํ๋ฆฌํ๋ผ์ดํธ(preflight) ์์ฒญ์ ์ฒ๋ฆฌํฉ๋๋ค.add_header 'Access-Control-Allow-Origin' '*'
: ๋ชจ๋ ๋๋ฉ์ธ์์์ ์์ฒญ์ ํ์ฉํฉ๋๋ค. ํน์ ๋๋ฉ์ธ๋ง ํ์ฉํ๋ ค๋ฉด '*' ๋์ ํด๋น ๋๋ฉ์ธ์ ์ ๋ ฅํฉ๋๋ค.add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'
: ํ์ฉํ HTTP ๋ฉ์๋๋ฅผ ์ง์ ํฉ๋๋ค.add_header 'Access-Control-Allow-Headers' ...
: ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ ์ ์ฌ์ฉํ ์ ์๋ ํค๋๋ฅผ ์ง์ ํฉ๋๋ค.add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range'
: ์๋ต ์ ๋ ธ์ถํ ํค๋๋ฅผ ์ง์ ํฉ๋๋ค.add_header 'Access-Control-Max-Age' 86400
: ํ๋ฆฌํ๋ผ์ดํธ ์์ฒญ์ ์บ์ ์ ํจ๊ธฐ๊ฐ์ ์ง์ ํฉ๋๋ค.proxy_pass http://your_backend_server
: ์์ฒญ์ ๋ฐฑ์๋ ์๋ฒ๋ก ํ๋ก์ํฉ๋๋ค.
4. NGINX ์ค์ ์ ์ฉ
NGINX ์ค์ ํ์ผ์ ์์ ํ ํ์๋ NGINX๋ฅผ ์ฌ์์ํ๊ฑฐ๋ ์ค์ ์ ๋ค์ ๋ก๋ํด์ผ ํฉ๋๋ค.
sudo nginx -t # ์ค์ ํ์ผ ๋ฌธ๋ฒ ๊ฒ์ฌ
sudo systemctl restart nginx # NGINX ์ฌ์์
๋๋
sudo nginx -s reload # ์ค์ ๋ค์ ๋ก๋
๊ฒฐ๋ก
์ด ๊ธ์์๋ Ubuntu ํ๊ฒฝ์์ NGINX๋ฅผ ์ค์นํ๊ณ CORS ์ค์ ์ ํ๋ ๋ฐฉ๋ฒ์ ๋จ๊ณ๋ณ๋ก ์์๋ณด์์ต๋๋ค.
CORS ์ค์ ์ ํตํด ๋ค์ํ ๋๋ฉ์ธ์ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
ํ๋ก์ ํธ์ ์๊ตฌ์ฌํญ์ ๋ง๊ฒ ์ค์ ์ ์กฐ์ ํ์ฌ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
NGINX์ ์ ์ฐํ ์ค์ ์ ํ์ฉํ์ฌ ๋ณด์๊ณผ ๊ธฐ๋ฅ์ ๋ชจ๋ ๋ง์กฑํ๋ ์น ์๋น์ค๋ฅผ ๊ตฌ์ถํด๋ณด์ธ์.
์ค๋ ์์๋ณผ ๋ด์ฉ์ ์ฌ๊ธฐ๊น์ง!
๋ค์์ ๋ ์ข์ ๊ธ๋ก ์ฐพ์๋ต์ฃ !
'๐ป ๊ฐ๋ฐ๊ณต๋ถ > Web' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Eric's Web] API๋ฅผ ํตํด์ Jira Webhook ๋ฑ๋กํ๊ธฐ. ( OAuth2.0 Token์ป๊ธฐ ํฌํจ) (38) | 2023.08.26 |
---|---|
[Eric's CS] ์นํ (WebHook) ? ๐ฃ (0) | 2023.04.06 |