1. https://๋๋ฉ์ธ์ฃผ์ ์น๋ฉด http://ip์ฃผ์๋ก ์ด๋๋๋ ๋ฌธ์ ๋๋ฌธ์ ๊ณ์ ์ค๋ฅ๋จ
--> mixed content ์ค๋ฅ, https ์์ http๋ก ์์ฒญ์ ๋ณด๋ด๋ฉด ๋ฐ์ํ๋ ์ค๋ฅ์ธ๋ฐ ๊ตฌ๋งคํ ๋๋ฉ์ธ๊ณผ ssl ์ธ์ฆ์ ์ ์ฉ๊น์ง ๋ค ํด์คฌ๊ณ ํ๋ก์ ์ค์ ๊น์ง ํ๋๋ฐ ๋ ์ด์ ๋ญ ์์ ํด์ผ ๋ ์ง ๊ฐ๋ ์ ์ด
๋ฐฑ์๋์์๋ ์๋ชป๋ ๋ถ๋ถ์ด ์์๊ณ ํ๋ก ํธ์์ ๋ญ ๊ณ ์ณค๋ ์ง ๊ฒฐ๊ตญ์ ํด๊ฒฐ์ด ๋จ
--> https://๋๋ฉ์ธ์ฃผ์/api ๋ก ์์ฒญ๋ณด๋ด๋ฉด ๋ฐฑ์๋ ์๋ฒ๋ก ์ ๋์ด๊ฐ
2. ๊ทธ๋ฌ๋๋๋ง ์ด์ cors์๋ฌ ๋ฐ์
--> spring security ์ฝ๋์์๋ cors ์ค์ ๋ถ๋ช ๋ค ํด์คฌ๋๋ฐ ์ค๋ฅ๋จ..
--> ๊ฒ์ํด๋ณด๋ nginx ์์๋ ์ค์ ์ ํด์ค์ผ ๋์
--> n์๊ฐ๋์ ์ฝ์งํ๋ฉด์ confํ์ผ ์์ ํ๊ณ ์ฌ์คํํ๊ณ ๋ฌดํ๋ฐ๋ณต ํ๋๋ฐ๋ ์ค๋ฅ ํด๊ฒฐ์ด ์ ๋จ .. ํ.. ๋ญ์ง?
--> ์ด์ ๋ ํ๋ก์ ์ค์ ์ด nginx๊ฐ ์๋๋ผ vercel์ ํตํด์ ๋๊ณ ์์์ ใ ใ ใ ใ
๋ถ๋ช ๊ฐ๋น์์์ dns ์ค์ ์ผ๋ก ์ฐ๋ฆฌ ip์ฃผ์๋ฅผ ์ค์ ํด๋จ๊ณ ๊ทธ์ ๋ง๊ฒ nginx ์ค์ ๋ ํ๋๋ฐ ์ดํ์ ํ๋ก ํธ ๊ฐ๋ฐ์๋ถ์ด dns ์ค์ ์ vercel ์ฃผ์๋ก ๋ฐ๊ฟ๋์ผ์ จ๋ ๊ฒ ...
์ด์ฉ์ง nginx.conf ํ์ผ ์๋ฌด๋ฆฌ ์์ ํด๋ ๋ฐ๋๋ ๊ฒ ์๋๋ผ ...
์ Remote Address ์ฃผ์์ ์๋ ip์ฃผ์๋ ๋ญ๊ฐ ์ถ์๊ณ vercel ์ฃผ์์ธ๊ฐ ์ถ์ด์
nslookup ์ ํด์คฌ๋๋ ์ญ์ ๋ฒ์ ์ฃผ์์๊ตฐ
๋ฐ์ ์๋ฒ๊ฐ vercel ๋ก ๋จ๊ณ Remote Address๋ vercel ip์ฃผ์๋ก ๋จ๋ ๊ฒ์ ํ์ธ ,,
cors ์ค์ ์ ๋จน๋ ๊ฒ์ ๋ํด ์์ฌ๊ฐ๋ ๋ถ๋ถ
๊ทธ๋์ ๊ฐ๋น์์์ dns ์ค์ ์ ๋ค์ ์๋ฒ ip์ฃผ์๋ก ๋ฐ๊ฟ๋์
๊ทธ๋ฌ๊ณ ๋ฐฑ ์๋ฒ๋ก api ์์ฒญ ํ๋๋ ๊ทธ๋๋ cors์๋ฌ ๋ฐ์ (ํ ์ ๋ฐ ...)
3. ๋ฐ์ํ cors ์๋ฌ
Access to XMLHttpRequest at 'https://๋๋ฉ์ธ์ฃผ์/api/main/list' from origin 'https://ํ๋ก ํธ์ฃผ์' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
-->์๋ฌด๋ฆฌ nginx์์ cors ์ค์ ์ ์์ ํ๊ณ ๋ ์์ ํด๋ ๊ณ์ cors์๋ฌ .... ๋์ ํฌ๋ง์ ์ ๋ฐ๊ฒฌ ํ ๊ฒ cors ์๋ฌ๋ ๋จ์ง๋ง ๋ฐฑ์๋ ์๋ฒ ์๋ต response๋ 200 ok ๊ฐ ๋ด๋ค,, ํฌ๋ง์ ์ฐพ์์ด (๊ทธ ์ ์๋ 308์๋ฌ์ธ๊ฐ ์ด์ํ ์๋ฌ๋ธ)
๊ณ์ conf ํ์ผ ์์ ํ๊ณ ์ฌ์คํํ๊ณ ๋ฌดํ ๋ฐ๋ณต ํ๋ค๊ฐ ํด๊ฒฐํ ๋ฐฉ๋ฒ์
map $http_origin $allowed_origin {
default "";
"http://localhost:5173/" $http_origin;
"https://๋๋ฉ์ธ1/" $http_origin;
"https://๋๋ฉ์ธ2/" $http_origin;
}
add_header 'Access-Control-Allow-Origin' $allowed_origin always;
์ด๋ฐ ์์ผ๋ก ์ฌ๋ฌ ๋๋ฉ์ธ์ ๋ํด cross origin ์ค์ ์ ํด์ฃผ๊ณ ์์๋๋ฐ ์ด๊ฒ ๋ญ๊ฐ ์ ๋๋ก ์ ์ฉ์ด ์ ๋๋ ๋๋์ด์์
add_header 'Access-Control-Allow-Origin' 'https://๋ฐฐํฌ๋ ํ๋ก ํธ vercel์ฃผ์/' always;
๊ฑ ์ด๋ ๊ฒ ๋ ๋ค ๋ฐ์๋ฒ๋ฆผ
(์ฌ๋ฌ ๋๋ฉ์ธ ํ์ฉํ๋ ๊ฑด ๋ ์ฐพ์๋ณด๋ฉด์ ๊ณ์ ์์ ํด๋ณด๊ณ ํ ์คํธ ํด๋ด์ผํ ๋ฏ)
๊ทธ๋ฌ๋๋ ์๊น๋ ๋ค๋ฅธ cors ์๋ฌ ๋ฐ์
4. ๋ฐ์ํ cors ์๋ฌ
Access to XMLHttpRequest at 'https://์์ฒญํ ๋ฐฑ์๋ api ์ฃผ์' from origin 'https://vercel ํ๋ก ํธ ์ฃผ์' has been blocked by CORS policy: The 'Access-Control-Allow-Origin' header has a value 'https://
vercel ํ๋ก ํธ ์ฃผ์/' that is not equal to the supplied origin.
gptํํ ๋์ ์์ฒญํจ
์ด ์ค๋ฅ๋
Access-Control-Allow-Origin
ํค๋์ ์ค์ ๋ ๊ฐ์ด ์ค์ ์์ฒญ์ Origin ํค๋์ ์ผ์นํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ํฉ๋๋ค. ๊ตฌ์ฒด์ ์ผ๋ก๋
https://vercel ํ๋ก ํธ ์ฃผ์/
(์ฌ๋์ ํฌํจ)์
https://vercel ํ๋ก ํธ ์ฃผ์
(์ฌ๋์ ์์) ๊ฐ์ ๋ถ์ผ์น๊ฐ ๋ฌธ์ ๋ฅผ ์ผ์ผํค๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค.
์๊ณ ๋ดค๋๋ ํ์ฉํ ๋๋ฉ์ธ ์ ์ผ๋ฉด์ ๋ค์ /(์ฌ๋์) ๋ฅผ ํ๋ ๋ ๋ถ์ธ ๋ฌธ์ ,,,
add_header 'Access-Control-Allow-Origin' 'https://๋ฐฐํฌ๋ ํ๋ก ํธ vercel์ฃผ์/' always;
์ด๊ฑฐ์์
add_header 'Access-Control-Allow-Origin' 'https://๋ฐฐํฌ๋ ํ๋ก ํธ vercel์ฃผ์' always;
์ด๊ฑธ๋ก ์์ ํด์ค
๊ทธ๋ฌ๋๋.... ๋ ๋ค๋ฅธ cors ์๋ฌ ๋ฐ์ ใ ใ ใ ํ ์ ๋ฐ์
5. ๋ฐ์ํ cors ์๋ฌ
auth:1 Access to XMLHttpRequest at 'https://์์ฒญํ ๋ฐฑ์๋ฒ api ์ฃผ์' from origin 'https://vercel ํ๋ก ํธ ์ฃผ์' has been blocked by CORS policy: The value of the 'Access-Control-Allow-Credentials' header in the response is 'true, true' which must be 'true' when the request's credentials mode is 'include'. The credentials mode of requests initiated by the XMLHttpRequest is controlled by the withCredentials attribute.
gptํํ ๋์ ์์ฒญํจ
์ด ์ค๋ฅ๋ Access-Control-Allow-Credentials ํค๋์ ๊ฐ์ด ์๋ชป ์ค์ ๋์๊ธฐ ๋๋ฌธ์ ๋ฐ์ํฉ๋๋ค. Access-Control-Allow-Credentials ํค๋์ ๊ฐ์ ๋ฐ๋์ 'true'์ฌ์ผ ํ๋ฉฐ, ๋ค๋ฅธ ๊ฐ์ด ํฌํจ๋์ด์๋ ์ ๋ฉ๋๋ค.
Access-Control-Allow-Credentials ํค๋๊ฐ ์๋ชป๋ ๊ฐ์ ๊ฐ์ง๊ณ ์๋ ์ด์ ๋ Nginx ์ค์ ์ด๋ ๋ฐฑ์๋ ์๋ฒ ์ค์ ์์ ์ค๋ณต์ผ๋ก ์ด ํค๋๋ฅผ ์ถ๊ฐํ๊ณ ์๊ธฐ ๋๋ฌธ์ผ ์ ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด Nginx ์ค์ ์ ๊ฒํ ํ๊ณ ์์ ํด์ผ ํฉ๋๋ค.
์ค์ ๋ก ์๋ต๊ฐ์ ๋ณด๋ Access-Control-Allow-Credentials : true ์ฌ๊ธฐ๊ฐ ๋๋ฒ ์ฐํ๊ณ ์์์
๋ญ๊ฐ ์์ฌ๊ฐ๋ ๋ถ๋ถ์ด
๋ฐฑ์๋ ์ฝ๋ ์์ฒด์์ Spring Security๋ฅผ ํตํด Access-Control-Allow-Credentials ์ค์ ์ ํด์ฃผ๋๋ฐ nginx์์ ํ๋ฒ ๋ ์ค์ ํ๋ ค๊ณ ํด์ ์ค๋ณต ์ ์ฉ์ด ๋๋ ๊ฑด๊ฐ ์ถ์์
// CORS ์ค์ ๋ฉ์๋
private CorsConfigurationSource corsConfigurationSource(){
return request -> {
CorsConfiguration config = new CorsConfiguration();
//config.setAllowedMethods(List.of(SwaggerPatterns));
config.setAllowedOrigins(allowedOriginPaths);
config.setAllowedMethods(List.of(allowedMethods));
config.setAllowedHeaders(List.of(HttpHeaders.AUTHORIZATION, HttpHeaders.CONTENT_TYPE, HttpHeaders.SET_COOKIE, HttpHeaders.ACCEPT, HttpHeaders.ACCEPT_LANGUAGE, HttpHeaders.CONTENT_LANGUAGE));
config.setAllowCredentials(true);
config.setMaxAge(3600L);
return config;
};
}
<security ์์ cors ์ค์ ํด์ฃผ๋ ๋ถ๋ถ>
๊ทธ๋์ ์ผ๋จ nginx์ ์ ์ฉ๋์ด ์๋ Access-Control-Allow-Credentials ๋ถ๋ถ์ ์ฃผ์์ฒ๋ฆฌ ํ์
# add_header 'Access-Control-Allow-Credentials' 'true' always;
conf ํ์ผ์ #ํ๋๋ง ๋ถ์ฌ์ฃผ๋ฉด ์ฃผ์์ด ๋ฉ๋๋น
๊ทธ๋ฌ๊ณ ์ฌ์คํ ํ๋๋ ์ฑ๊ณต !!!
์ด์ cors์๋ฌ ์ ๋ฌ๋ค ใ ใ ใ ใ
์ ์ด์ ์ฌ๋ฌ ๋๋ฉ์ธ์ ๋ํด cross origin ์ ์ฉ๋ง ์ํค๋ฉด ๋ผ ....
๋์ถฉ 80ํ๋ก๋ ๋๋ ๊ฑฐ ๊ฐ๋ค... ใ ใ ใ
<์ฐธ๊ณ ํ ๋ธ๋ก๊ทธ>
Nginx CORS + https ์ค์ ๋ฌธ์ ํด๊ฒฐํ๊ธฐ
Nginx ๊ธฐ์กด ์ค์ ํ์ผ์ ์๋์ ๊ฐ๋ค.
medium.com
(์ง์ง ๊ตฌ๊ธ์ ์์น๋๋ cors ๊ด๋ จ ์๋ฌ ๊ธ๋ค์ ๋ด๊ฐ ๋ค ๋๋ฌ๋ณธ๋ฏ ใ ...)