iframe으로 특정서버의 화면을 띄워야하는 일이 생겼다.
현재 운영되고 있는 서버에 추가적으로 batch Application을 올리고 iframe으로 호출하는 방식을 사용하기로 했다.
서버구성
문제1. batch 내부의 cookie 사용이 안되어 url에 jsessionId가 붙어감
예시로 /batch;jsessionid=~~~~~~~ 형태로 잘못된 url이 생성되었다. 그로인데 Controller를 잘못찾아가는 문제가 발생
원인을 찾아보니 로컬에서 테스트 할 때 브라우저의 url을 localhost:8080~~~ 를 사용하였고 iframe의 주소는
<iframe src="127.0.0.1:8099"..... 형식으로 사용하였기 때문에 발생
둘 다 같은 localhost로 변경하여 사용 하니 문제를 해결하였다.
다만 이로인해 운영에서 iframe으로 <iframe src="IP:PORT" ..... 구조를 사용 할수 없을 듯하였다.
운영에서는 <iframe src="도메인/batch" 형태로 사용하기로 한다.
문제2. nginx에 도메인/batch로 들어오면 2번 서버의 8099포트로 보내야한다.
배치서버는 1대지만 iframe 껍데기를 호출하는 서버는 2대 이다. 그렇다면 도메인/batch를 접속하게 된다면 LB를 통해
1번 서버 2번 서버 어느곳으로 갈지 알 수 없다.
그렇기 때문에 nginx에서 2번서버의 8099 포트로 이동 할수 있도록 proxy를 구성해야한다.
이를 위해 nginx의 default.conf를 수정
1번 서버, 2번서버 모두 location /batch/를 추가하여 어떤 서버로 요청이 오더라도 2번서버의 8099를 바라볼 수 있도록 구성
......
upstream backend{
hash #remote_addr;
server 1번서버아이피:8080;
server 2번서버아이피:8080;
keepalive 1024;
}
server {
listen 443 lls;
....
기타 nginx 설정들, ssl 포함
....
location /batch/ {
proxy_pass http://2번서버 IP:8099;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location / {
proxy_pass http://backend;
}
문제3. https에서 http의 iframe을 사용 할 수 없음
브라우저에서 iframe으로 데이터를 불러올 때 데이터가 보이지 않아 console 을 확인해보니
에러로그가 발생
was loaded over an insecure connection. this file should be served over https
찾아보니 https 도메인을 사용하며 http를 iframe으로 사용할 수 없어서 발생하는 에러로그
아마 배치 application에
return "redirect:/" 와 같이 302 redirect를 발생시키며 생기는 문제로 보임.
nginx의 batch location에 강제로 http를 https로 변환해주도록 설정 추가
location /batch/ {
...
proxy_redirect http:// https://
...
}
'웹 정리 > TIL' 카테고리의 다른 글
nginx의 proxy_read_timeout 설정(api timeout) (2) | 2024.11.08 |
---|---|
Arthas JVM stack 툴(profiler) (2) | 2024.10.08 |
ssh session 종료 후에도 프로그램 실행(nohup) (0) | 2024.08.27 |
트리 구조 오브젝트 만들기(js) (0) | 2024.07.11 |
Mysql Event(주기적으로 쿼리 실행하기) (0) | 2024.06.20 |