OSX, Failed to listen on 0.0.0.0:80 (reason: Permission denied)

4

I'm on OSX Mavericks. I installed PHP 5.5 from http://php-osx.liip.ch/. When I go to localhost in a browser I get a page that says, "It Works!" which is not a page I created so I am not sure where it is located. Is this from the PHP install or just Apache?

When I open my IDE (PHPStorm) and run the website, it works if I use a port like 8080. If I set the port to 80, it fails and the IDE says:

/usr/local/php5/bin/php -S 0.0.0.0:80 -t /mywebsitepath/ 

Failed to listen on 0.0.0.0:80 (reason: Permission denied)

When I searched for that specific error, all I found was help for NGINX, but I am using Apache. What do I need to change to be able to run my code locally on port 80?

I want to do this so I can use localhost instead of localhost:8080.

Justin

Posted 2014-01-29T20:04:34.017

Reputation: 205

3

Since you get a page from http://localhost, then means some software on your computer is already using port 80. Two programs can't use the same port at the same time.

– Ben Voigt – 2014-01-29T20:13:24.790

How can I see what is currently using it? I'm guessing it's something that happens at start-up. – Justin – 2014-01-29T20:15:22.350

For that, see Who is listening on a given TCP port on Mac OS X?

– Ben Voigt – 2014-01-29T20:27:06.030

When I do sudo lsof -i TCP:80 | grep LISTEN I get no results. – Justin – 2014-01-29T20:38:55.390

you didn't turn off port number->name lookup, so it might be outputting TCP:http (I don't know about Mac lsof, but netstat on other OSes would). Check the output of just sudo lsof -i TCP to see what format it is in. – Ben Voigt – 2014-01-29T20:46:10.767

Oh yea totally forgot, you could setuid on the php binary (or wrap it in a shell script). Its insecure, but as a dev environment it might just do – Yarek T – 2014-01-29T21:04:15.407

And IIRC OSX has launchd, its a bit like inetd, the internet super server. Its a binary that listens on all ports and spawns a corresponding process whenever a specific port is hit by a request – Yarek T – 2014-01-29T21:07:30.790

Answers

14

Ports below 1024 are privileged, and cannot be bound to by anyone other than root. Since you can't run your IDE as root, I would set up an Nginx proxy going from port 80 to port 8080, should be easy to do, there are many tutorials =D

Yarek T

Posted 2014-01-29T20:04:34.017

Reputation: 319

Or an Apache proxy, if you are more familiar with that. Nginx rocks though. Oh and since you have OSX's Apache running on port 80, you'll have to stop it (or use it as a proxy) – Yarek T – 2014-01-29T20:15:44.593

He could probably run his IDE as root.. ''sudo open /Applications/PHPStorm'' - though I'm not sure if that IDE uses Workspaces in a way that he can point it at the project.. For dev/testing, running on a port above 1024 would seem like a bit less effort than an nginx reverse proxy, though they are fairly easy to establish. – James T Snell – 2014-01-29T20:16:54.600

If OSX's Apache is running on port 80 and I cannot use it from my IDE, is there any point in it running? Would it make sense to turn it off? Is that possible? – Justin – 2014-01-29T20:21:38.273

@Justin Unless you have something that is specifically required to be port 80 even in development, I would just use port 8080. It creates the least amount of headaches/work and security holes. – Darth Android – 2014-01-29T22:41:25.673

Thanks. While I was able to get Apache stopped so localhost address was freed up (no more "It works!" page), I still could not run my IDE on port 80 for the reason you describe in your answer. I'll just deal with the ugly URL for dev. – Justin – 2014-01-30T18:32:07.713