Although ngrok is clearly the leader at the moment, I've used Localtunnel.me in the past. There was a HN discussion about it (including some even more niche alternatives) here: https://news.ycombinator.com/item?id=7585056
It also has an incredibly useful debug console for HTTP(S) which allows you to inspect requests as they come in, its absolutely priceless when working on webhooks.
It logs the headers and request body along with the response for every single route. This means if the server sending you a webhook changes routes, or sends some extra content or does something unexpected, you have immediate visibility into it and can replay the request with a single click.
Well, according to the README it allows to forward one http(s) port to multiple different local servers depending on requested host name. Yes, this is also possible using multiple ssh -R in combination with nginx or similar, but I guess the point of the project is to make the process easier.
There is a nice service called weaved.com which allows you to ssh to a machine (in my case raspberry Pi) without public IP address. I think it also supports HTTP.
I am using DuckDNS with port forwarding to run a demo from machine at my home http://beta.raspchat.com/ I used to use ngrok but it goes apeshit if somebody uploads a huge file as it took too much memory and crashed the ngrok process frequently. Only reliable option is ssh -nNT -R and tunnel to a really cheap VPS.
Looks like most of the features can be covered by nginx+iptables, so it will be great if authors will state what can't be done at all or in some specific case.
If I understand the examples on Ngroks and Frps sites correctly there's nothing on there that really can't be done with Nginx. But especially with Ngrok I think the main benefit is convenience, since you don't need to configure port forwarding on your router or add DynDNS afaik.
The examples given there [1] seem to be only for LAN.
Any experts here please explain how to use it to expose a local site to the Internet from a NAT'ed machine running behind a proxy that requires username:password auth to connect to Internet and there is a firewall that prevents SSH traffic from/to the Internet?
Accept my apologies if this comes as a complete noob question and please give me a clarification if I have missed something obvious over there.