티스토리 뷰

Atlassian의 Confluence를 세팅하는데 에디터 부분에서 자꾸 에러가 났다. 개발자 콘솔로 뜯어본 결과 통신형태에서 http 프로토콜 뿐만 아니라 websocket도 병행적으로 요청이 일어났으며 데이터 동기화를 유지하도록 하는 것이 목적인듯 보였다. Confluence는 기본적으로 8090번 포트를 사용하는데 http뿐만 아니라 websocket의 경우도 Apache의 Reverse Proxy기능을 이용하여 80에서 8090으로 포워딩이 필요했다.


결론부터 말하자면 proxy_wstunnel 뿐만 아니라 rewirte 모듈도 필요한 케이스였다. (ProxyPass로는 별 짓을 다 해봤는데 못찾은건지 몰라라도 안됐음) Web Socket 요청이 들어갈 때 Http Request Header에 Connection: Upgrade 라는 헤더가 들어가게 되는데 해당 경우가 websocket일 경우에 직접적으로 Redirect 시켜주는 부분이 필요했다. 그리고 그 이외의 경우에는 단순하게 ProxyPass를 통해서 했던거와 마찬가지로 http 프로토콜을 이용하여 포워딩 시켜주면 되는 형태였다.



LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
LoadModule rewrite_module modules/mod_rewrite.so

<Virtualhost *:80>
	ProxyPreserveHost On
	ProxyRequests Off
	
	ServerAdmin admin@mydomain.com
	ServerName confluence.mydomain.com
	
	RewriteEngine On
	RewriteCond %{HTTP:Upgrade} =websocket [NC]
	RewriteRule /(.*\/websocket) ws://localhost:8090/$1 [P,L]
	RewriteCond %{HTTP:Upgrade} !=websocket [NC]
	RewriteRule /(.*) http://localhost:8090/$1 [P,L]

#	ProxyPass / http://localhost:8090/
	ProxyPassReverse / http://localhost:8090/

	KeepAlive On
	ErrorLog ${APACHE_LOG_DIR}/confluence-error.log
	CustomLog ${APACHE_LOG_DIR}/confluence-access.log combined

</VirtualHost>


몇 가지 세부적인 세팅에 대해 각자 다르겠지만 큰 골자는 이와 같다. 예전에 한창 PHP 개발을 시작했을 때 .htaccess 파일로 index.php나 정적 파일 경로를 은닉시키려고 Rewrite 모듈을 공부했는데 너무 오랜만에 하니 잘 모르겠기도 하다. 오늘 반나절가량 이거로 삽질하면서 다시 한 번 Apache Rewrite 모듈에 대해 공부해야할 필요성을 느꼈다.


참고로 proxy_wstunnel의 경우는 Apache 2.4 이상 버전에서 지원하는 모듈이다.


참고 : http://stackoverflow.com/questions/27526281/websockets-and-apache-proxy-how-to-configure-mod-proxy-wstunnel

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함