Go supports built-in server. But there is a limitation that you can host only one site at once with one port.
Though you can host multiple sites with the domain name using gorilla mux then all site will come with one app that will be very hard to maintain and update.
Another option is you can host your site with different ports and then use the reverse proxy to map to map the domain name to the port
Explanation
Scenario
I have two sites running on my vultr vps. All of them are website that means request will be come in with domain name and going to be arrived on the port 80. If I assing one program [ site ] to listen to the port 80 others will not be able to listen on port 80.Condition
Requirement is that requests should be listend on port 80 and handled by the app to which it relates.
After struggling for 3 days i got this 😂 silly solution.
Source Code ( solution I got )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| func main() {
// New functionality written in Go
http.HandleFunc("/new", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "New function")
})
// gospot.mchampaneri.in ===> localhost:8085
u1, _ := url.Parse("http://localhost:8085/")
http.Handle("gospot.mchampaneri.in/", httputil.NewSingleHostReverseProxy(u1))
// www.mchampaneri.in ===> localhost:8081
u2, _ := url.Parse("http://localhost:8081/")
http.Handle("www.mchampaneri.in/", httputil.NewSingleHostReverseProxy(u2))
// Start the server
http.ListenAndServe(":80", nil)
}
|
Compiled binary of this code is proxy server for us
Explanation Of Code
We are using http package and httputil package to make this done.I assign my every sites port in serise of 80xx
- gospot.mchampaneri.in is listening on 8085
- temp.mchampaneri.in is listening on 8081
Now Created another golang app which works as http mux .
[ Which's Source Code I am Showing. Ya It Just 17+ 😁(imports + package main) lines for me]
Explanation of the core code
u1, _ := url.Parse("http://localhost:8085/")
In this line we are parsing the url of our end point[my app of gospot.mchampaneri.in is running on local 8085 port]
http.Handle("gospot.mchampaneri.in/", httputil.NewSingleHostReverseProxy(u1))
It matches the request with the .Handle( input-url ) and if matches it forwards the request to the url which we parsed before.Explaination of Work
After seeing code if still you are confused how it works, let me explaing the flow.- You search for gospot.mchampaner.in in you browser
- DNS server will forward request to my vultu vps on port 80
- Our Proxy is running on port 80 it will receive request
- Proxy will match the request with the http.Handle("gospot.mchampaneri.in/") and so request will be handled by httputil.NewSignelHostReverseProxy(u1) [ which is actully the reverse proxy]
So inshort this proxy will map incomming request domain to the port on your vps which is inteded to handle it.
Hope you will find it usefull and easy to understand.
For this post your comments are welcomed so i can make it better.
Hey Manish,
ReplyDeletei want to monitor the request and response of few API in my project using exactly such proxy server, please help..lets get connect via email : bahalkapil@gmail.com
Sure.
DeleteI’m going to read this. I’ll be sure to come back. thanks for sharing. and also This article gives the light in which we can observe the reality. this is very nice one and gives indepth information. thanks for this nice article... dr-wall
ReplyDeleteWe can also assure ourselves that we can make safe transactions and manage our financial accounts online. We can also keep our Internet service provider or ISP from tracking our web history and recording our tracks. related site
ReplyDeleteIn the huge web hosting industry, there are many type of hosting that are available for someone who is looking to build a website. Knowing how many types of hosting that is available to them would certainly help them in making their choice. Instead of overloading your mind with all the various types of hosting out there, you should start with the basics. In fact, there are two basic type of hosting that you can use. It is either a paid hosting or a free hosting service. It is not a must for you to spend in order to have a website. There are free options out there that you can use but you need to know the details about this type of hosting service before you decide. https://hostinglelo.in/
ReplyDeleteA VPN that can be used no matter what country you are in, all websites and social APPs in the world can be accessed at high speed without any problems. For details, click : Try PandaVPN anonymously
ReplyDelete