๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ธฐํƒ€

Apache2 Websocket ์„ค์ •

by ๋™๊ธฐ 2022. 12. 18.
๋ฐ˜์‘ํ˜•

๐Ÿ“Œ
Apache2 Websocket(์›น์†Œ์ผ“) ํ†ต์‹ ์„ ์œ„ํ•œ ์„ค์ •

Ubuntu 18.04
Apache 2.4.18
  • thumbnail

๋ฐฐ๊ฒฝ : ์‚ฌ๋‚ด Streamlit Framework ๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•œ ์‚ฌ์ดํŠธ๊ฐ€ Websocket(์›น์†Œ์ผ“) ํ†ต์‹ ์„ ํ•˜๊ณ  ์žˆ์–ด Apache2 ์— Websocket ํ†ต์‹ ์„ ์œ„ํ•œ ์„ค์ •์„ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์‚ฌ๋‚ด ์•„ํŒŒ์น˜2 ์„œ๋ฒ„์— WebSocket ์„ค์ •์ด ๋˜์ง€ ์•Š์•„ WebSocket Connection ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ


1. ์›น์†Œ์ผ“ ๋ชจ๋“ˆ ํ™œ์„ฑํ™”

Apache2 ๋ชจ๋“ˆ ํ™œ์„ฑํ™” ๋ช…๋ น์–ด์ธ a2enmod ๋ฅผ ํ†ตํ•ด ์›น์†Œ์ผ“ ํ„ฐ๋„ ๋ชจ๋“ˆ์„ ํ™œ์„ฑํ™” ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

sudo a2enmod proxy_wstunnel

2. ์•„ํŒŒ์น˜2 ์›น์„œ๋ฒ„ ์‚ฌ์ดํŠธ ์„ค์ •ํŒŒ์ผ ์ˆ˜์ •

apache2 site-enabled์˜ conf ํŒŒ์ผ์„ ์ˆ˜์ • ํ•˜์˜€์Šต๋‹ˆ๋‹ค

conf ํŒŒ์ผ ์—ด๊ธฐ

sudo vi /etc/apache2/site-enabled/[filename].conf

conf ํŒŒ์ผ ์ตœ์ƒ๋‹จ์— ๋ชจ๋“ˆ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ

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 ๋‚ด์šฉ ์ž‘์„ฑ

<VirtualHost *:80>
        ProxyPreserveHost On
        ProxyRequests Off
        ProxyVia On
        RewriteEngine On
        KeepAlive On

        ServerAdmin [youradmin]@[yourserver].kr
        ServerName [yourdomain]

        # ์›น์†Œ์ผ“ ์„ค์ •
        RewriteCond %{HTTP:Connection} Upgrade [NC]
        RewriteCond %{HTTP:Upgrade} websocket [NC]
        RewriteRule /(.*) ws://[yourIP:port]/$1 [P,L]
        
        ProxyPass /meta-generator http://[yourIP:port]/meta-generator
        ProxyPassReverse /meta-generator http://[yourIP:port]/meta-generator

        ProxyPass / http://[yourIP:port]
        ProxyPassReverse / http://[yourIP:port]

        Header set Access-Control-Allow-Origin "*"
</VirtualHost>

์ €์žฅ ํ›„ ๋‹ซ๊ธฐ

:wq

  • [file-name].conf ๋Š” ๊ธฐ๋ณธ ํ†ต์‹ ์„ ์œ„ํ•œ ์„ค์ •ํŒŒ์ผ ์ด๊ณ , secure ํ†ต์‹ ์— ํ•„์š”ํ•œ ํŒŒ์ผ์ธ [file-name]-le-ssl.conf๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ํŒŒ์ผ๋„ ๋™์ผํ•˜๊ฒŒ ์ˆ˜์ • ํ•˜์˜€์Šต๋‹ˆ๋‹ค
    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
    .
    .
    .
    <IfModule mod_ssl.c>
    <VirtualHost *:443>
    		ServerAdmin [youradmin]@[yourserver].kr
    		ServerName [yourdomain]
        
    		RewriteEngine on
        ProxyPreserveHost On
        ProxyRequests Off
    		
    		#์›น์†Œ์ผ“ ์„ค์ •
        RewriteCond %{HTTP:Connection} Upgrade [NC]
        RewriteCond %{HTTP:Upgrade} websocket [NC]
        RewriteRule /(.*) ws://[yourIP:port]/$1 [P,L]
    
        ProxyPass /meta-generator http://[yourIP:port]/meta-generator
        ProxyPassReverse /meta-generator http:/[yourIP:port]/meta-generator
    
        ProxyPass / http://[yourIP:port]
        ProxyPassReverse / http://[yourIP:port]
        KeepAlive On
        Header set Access-Control-Allow-Origin "*"
    
    		Include /etc/letsencrypt/options-ssl-apache.conf
    		SSLCertificateFile /etc/letsencrypt/live/actions-0003/fullchain.pem
    		SSLCertificateKeyFile /etc/letsencrypt/live/actions-0003/privkey.pem
    </VirtualHost>
    </IfModule>

Apache2(์•„ํŒŒ์น˜) ์›น์„œ๋ฒ„ ์žฌ์‹คํ–‰

sudo systemctl restart apache2.service

3. ์ ์šฉ ํ™•์ธ


์ฐธ๊ณ 

https://httpd.apache.org/docs/2.4/mod/mod_proxy_wstunnel.html

https://binarycube.tistory.com/2

https://stackoverflow.com/questions/38838567/proxy-websocket-wss-to-ws-apache

https://www.youtube.com/watch?v=yXPCg5eupGM

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€