Now the small issue here is I want websockets to communicate with node, while I want my other http request to be handled by apache. A first solution is to have node listen on another port, with client code looking like this:
<script src="http://www.test.tld:9000/socket.io/socket.io.js"></script> <script> var socket = io.connect('http://www.test.tld:9000'); ... </script>
I have two obvious problems here. For one, some network setups only allow ports 80 and 443 to go through. And then it's just painfully ugly! A more graceful way would be to differenciate the requests based on subdomains rather than ports, and for that I need a reverse-proxy.
Apache2 already possesses a reverse proxy mod, but it doesn't handle websockets (and doing this with apache2 would somehow defeat the point of using node.js). I played a little with nginx, which is very light and fast, but having to patch the source code to use tcp_proxy to handle websockets made me unconfortable regarding the update process in the future. I finally chose HAProxy, which handles websockets out-of-the-box.
For the reverse proxy to work we first need to modify the ports node and apache listen to. So I changed the apache conf to have it listen locally to port 9010, and kept node on port 9000. HAProxy will now handle the initial requests on port 80 and dispatch them to node and apache. I want the requests sent to the domain "io.test.tld" to be forwarded to node, and the rest to be forwarded to apache. Here's a sample HAProxy configuration that does just that:
global daemon maxconn 4096 user haproxy group haproxy defaults log global #this frontend interface receives the incoming http requests frontend http-in mode http #process all requests made on port 80 bind *:80 #set a large timeout for websockets timeout client 86400000 #default behavior sends the requests to apache default_backend www_backend #it all happens here: a simple check on the host string #when "io.test.tld" is matched, an acl I call arbitrarily # "websocket" triggers acl websocket hdr_end(host) -i io.test.tld #redirect to my node backend if the websocket acl triggered use_backend node_backend if websocket #apache backend, transfer to port 9010 backend www_backend mode http timeout server 86400000 timeout connect 5000 server www_test localhost:9010 #node backend, transfer to port 9000 backend node_backend mode http timeout server 86400000 timeout connect 5000 server io_test localhost:9000
It's fairly straightforward and it just works. Of course the best way to handle this case is to have 2 different IP addresses, but as far as subdomains discrimination is concerned, I'm very satisfied with this solution so far.
I tried writing my own web server with bouncy.js but it's horribly slow. hidemyass
ReplyDeleteLaurent,
ReplyDeleteIt would be nice if this can work with Nginx; I found Apache's mod reverse proxy is just too heavy.
muhammad, I guess you are trying to use the above codes to connect to hidemyass's proxy service? I don't think it will work. Also, hidemyass is not very anonymous. It has logging issues.
This is a nice article here with some useful tips for those who are not used-to comment that frequently. Thanks for this helpful information I agree with all points you have given to us. I will follow all of them.
ReplyDeletebest rpa training in bangalore
rpa training in bangalore
rpa course in bangalore
RPA training in bangalore
rpa training in chennai
rpa online training
Hmm, it seems like your site ate my first comment (it was extremely long) so I guess I’ll just sum it up what I had written and say, I’m thoroughly enjoying your blog. I as well as an aspiring blog writer, but I’m still new to the whole thing. Do you have any recommendations for newbie blog writers? I’d appreciate it.
ReplyDeleteAWS Course Interview Questions and Answers 2019 | AWS Interviews Questions and Answers for Devops
AWS Tutorial 2019
AWS Interview questions and answers |AWS Interview Question and Answers 2019
AWS Tutorial for Beginners 2019 | AWS Tutorial with AWS Training Videos
Excellant post!!!. The strategy you have posted on this technology helped me to get into the next level and had lot of information in it.
ReplyDeleteExcellant post!!!. The strategy you have posted on this technology helped me to get into the next level and had lot of information in it.
ReplyDeleteWhoa! I’m enjoying the template/theme of this website. It’s simple, yet effective. A lot of times it’s very hard to get that “perfect balance” between superb usability and visual appeal. I must say you’ve done a very good job with this.
AWS Training in Bangalore | Best AWS Amazon Web Services…
Amazon Web Services Training in Pune India
AWS Online Training in India | AWS Training | AWS online training
AWS Training in Bangalore | Aws training in Bangalore with placements
This is a nice article here with some useful tips. I like your blog.
ReplyDeletePython Training in Chennai
Python Training in Bangalore
Python Training in Hyderabad
Python Training in Coimbatore
Python Training
python online training
python flask training
python flask online training
Iamlinkfeeder
ReplyDeleteIamlinkfeeder
Iamlinkfeeder
Iamlinkfeeder
Iamlinkfeeder
Iamlinkfeeder
Iamlinkfeeder
Iamlinkfeeder
Iamlinkfeeder
Iamlinkfeeder
Iamlinkfeeder
ReplyDeleteIamlinkfeeder
Iamlinkfeeder
Iamlinkfeeder
Iamlinkfeeder
Iamlinkfeeder
Iamlinkfeeder
Iamlinkfeeder
Iamlinkfeeder
Iamlinkfeeder
Very Informative article with detailed explanation. Thanks for sharing your work . keep up the good work Angular training in Chennai
ReplyDeleteInformative article. Essay typer Hamilton
ReplyDeleteen son çıkan perde modelleri
ReplyDeletesms onay
Mobil Ödeme Bozdurma
HTTPS://NFTNASİLALİNİR.COM
ankara evden eve nakliyat
TRAFİK SİGORTASI
dedektör
web sitesi kurma
aşk kitapları
özel ambulans
ReplyDeleteminecraft premium
en son çıkan perde modelleri
uc satın al
en son çıkan perde modelleri
lisans satın al
nft nasıl alınır
yurtdışı kargo