cors μλ¬ ν΄κ²°κΈ°
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 κ΄λ ¨ μλ¬ κΈλ€μ λ΄κ° λ€ λλ¬λ³Έλ― γ ...)