19

I would like to run a XAMPP server, and a Nodejs server on the port 80.

If the server get a HTTP request, then XAMPP will handle it, if the server get a Websocket request, then Nodejs

How is it possible? If a port is already in use, then I can't start the other server program.

3 Answers 3

45

You would need to use a reverse proxy to do this, e.g. Apache 2.4. with mod_proxy_wstunnel.

Use it as a frontend and then tunnel the connections to the appropriate backend.

22

Only a single process can listen on a particular port for the same IP address and protocol, because otherwise operating system wouldn't know which process to send the received packet to.

To achieve what you want you will have to use a reverse proxy which will listen on port 80 and forward traffic to correct destination. There are multiple ways to do this. For example you can set up your web server (Apache) to forward WebSocket requests or you may configure Node.js to forward HTTP traffic. Research available options and choose the one that fits your needs best.

3

As well as the reverse proxy option others have already mentioned, you could have multiple IP addresses assigned to the machine. This may cost for IPv4 (or simply not be available depending where your server is hosted) but should not if you are in a position to use IPv6 (i.e. if the people connecting to one or both or your services are going to be IPv6 capable). This way both services can listen on port 80 on different addresses.

As you only mention port 80 I assume that you are not using HTTPS. If you are then if using the reverse proxy option you need to either need to have a multi-name SSL certificate or configure SNI and live with the fact that some old clients (IE on XP, old Android versions) won't be able to connect without errors. The multiple address option circumvent this issue at the expense of needing the extra address(es) assigned.

1
  • Just a small point: if you're already using NAT to translate the IP, you can do the port redirection there as well. E.g. if you're running an Internet-accessible Apache server & want to use XAMPP for testing, run Apache on a non-standard port and have the router NAT external port 80 requests to the non-standard port of the internal IP. This would allow running XAMPP on port 80.
    – Calrion
    Aug 31, 2014 at 6:41

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.