상황
로컬(Docker)에 올린 기존 시스템에서 다른 API(다른 도메인)로 Request 시 withCredential을 true로 설정해줘야 함
이후, 요청은 성공을 했지만 Cookie(세션 정보)가 전달이 안되는 현상이 발생했음.
로컬에 올린 시스템은 HTTP고 요청을 받는 API는 HTTPS이기 때문에 발생
-> 규정 변경으로 HTTP, HTTPS 간 통신은 쿠키를 전송할 수 없음 (원래는 HTTPS -> HTTP만 안됬음)
따라서, 로컬의 Apache에 인증서를 설치해줘야 했음.
소개
이번 포스팅에서 사용하는 방법은 자가 서명된 인증서를 발급해서 사용하기 때문에 도메인으로 등록하지 않아도 상관없고, 로컬(개발) 환경이어도 상관없습니다.
<참고> 컨테이너를 생성할 때도 포트를 HTTP, HTTPS 두 개 열어주는 것이 유용합니다.
-> 저는 컨테이너 내부의 80포트를 4080으로, 컨테이너 내부의 443포트를 4081로 열었습니다.
docker run --name booking_local -d -p 4080:80 -p 4081:443 -v /users/booking:/www booking:legacy
해결 방법
0(준비). Docker desktop을 이용해서 컨테이너에 CLI로 접속
1. openSSL을 이용해서 인증서를 만듬.
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/booking.key -out /etc/ssl/certs/booking.crt
2. 설정 값 입력
→ State, Locality name 등은 대충 입력해도 되는데, Common Name은 도메인 이름 또는 ip를 입력해주셔야 합니다.
(저는 hosts파일을 통해 로컬(127.0.0.1)을 booking.lavel.com이라는 도메인 네임으로 사용하고 있습니다.)
Country Name (2 letter code) [XX]:KR
State or Province Name (full name) []:Example
Locality Name (eg, city) [Default City]:Example
Organization Name (eg, company) [Default Company Ltd]:Example
Organizational Unit Name (eg, section) []:Example
Common Name (eg, your name or your server's hostname) []:booking.lavel.com
Email Address []:webmaster@example.com
3. apache config 설정
vi /etc/apache2/sites-enabled/booking.conf
기존의 conf파일은 아래와 같습니다.
<VirtualHost *:80>
DocumentRoot /www
AllowEncodedSlashes On
RewriteEngine on
RewriteCond %{REQUEST_URI} ^(/health)$
RewriteRule ^/(.*)$ /index.php/$1 [L]
RewriteCond %{REQUEST_URI} ^(/booking/static/)(.*)$
RewriteRule ^/booking/(.*)$ /$1 [L]
RewriteCond %{REQUEST_URI} ^(/booking/assets/)(.*)$
RewriteRule ^/booking/(.*)$ /$1 [L]
RewriteCond %{REQUEST_URI} ^/([^/]*)(/booking/){1}.*$
RewriteRule ^/([^/]*)/(.*)$ /index.php/$2 [L]
SetEnv CI_ENV dev
</VirtualHost>
(같은 파일) 원래 있던 80번 포트 내용 그대로 443번 포트도 똑같이 열어주고, 아까 만들었던 SSL인증서를 적용합니다..!
+ ssl을 생성할 때 입력했던 domain을 ServerName으로 설정해야 합니다.
<VirtualHost *:443>
DocumentRoot /www
AllowEncodedSlashes On
RewriteEngine on
RewriteCond %{REQUEST_URI} ^(/health)$
RewriteRule ^/(.*)$ /index.php/$1 [L]
RewriteCond %{REQUEST_URI} ^(/booking/static/)(.*)$
RewriteRule ^/booking/(.*)$ /$1 [L]
RewriteCond %{REQUEST_URI} ^(/booking/assets/)(.*)$
RewriteRule ^/booking/(.*)$ /$1 [L]
RewriteCond %{REQUEST_URI} ^/([^/]*)(/booking/){1}.*$
RewriteRule ^/([^/]*)/(.*)$ /index.php/$2 [L]
SetEnv CI_ENV dev
ServerName booking.lavel.com
SSLEngine on
SSLCertificateFile /etc/ssl/certs/booking.crt
SSLCertificateKeyFile /etc/ssl/private/booking.key
</VirtualHost>
4. 아파치 재시작
apachectl graceful
이제 https(저의 경우: https://booking.lavel.com:4081/)로 접속하면 HTTPS 인증서가 적용되어 있고, HTTPS를 사용하는 다른 API에게 쿠키를 전송할 수 있습니다 !
감사합니다.
'Operation > Network' 카테고리의 다른 글
API - CSV(엑셀 파일) 내보내기 성능 개선 및 부하 테스트 (0) | 2022.04.16 |
---|---|
HTTP - 청크 인코딩(Transfer-encoding: chunked) [Size가 큰 테이블, 이미지 등 내려주기] (0) | 2022.03.28 |
메일 서비스 작동 원리 (with 구글, 네이버 등) (0) | 2022.03.05 |
DNS (Domain Name System) 동작 원리, 과정 (0) | 2021.09.15 |
L4 / L7 로드밸런서 차이 (Load balancer) (0) | 2021.08.28 |