Installing apache2 on Cygwin "> Installing apache2 on Cygwin "> Installing apache2 on Cygwin " />
Rafe Hart

Thoughts on security, privacy, and building software.

Setting up Apache on Cygwin

27 July 2014

Installing apache2 on Cygwin

Theoretically this should be easy, but depending on the type of webpages you’d like to run, you may require a little help from the Cygwin Ports project, as php, django, etc are not packaged by the cygwin project.

The first step is to run the cygwin setup program and install apache2, which is located under the web programs group.

Once that is done, you need to start with the setup of the daemon. If you’ve already installed sshd, then during that process you should have created the cyg_server account that these daemons run under. If you haven’t created it, you can do so by running ‘cygserver-config’, though you will be offered the option to set it up when you configure apache anyway.

# You can configure apache2 with the following command:

# And then start it with:
cygrunsrv --start httpd2

The configuration is stored in /etc/apache2/httpd.conf, and apache2 expects your webpages to be stored in /srv/www/htdocs.

That didn’t work, I get: ‘Win32 error 1062’ instead

Okay, this can be from a whole bunch of reasons, from 3rd parties packaging another version of cygwin1.dll in your path to incorrect privilege separation. The fix for me was as follows:

# First remove the service you just installed so it doesn't conflict with anything
cygrunsrv --remove httpd2

Next, close cygwin and start it up again with administrator rights:

Cygwin with Admin Rights

# Make sure cygserver is set up as a service, with the correct rights

# Which produces:
# Do you want to install cygserver as service?
# (Say "no" if it's already installed as service) (yes/no) yes

# Now install apache2 manually
cygrunsrv -I httpd2 -d "CYGWIN httpd2" -p /usr/sbin/httpd2 -a "-DNO_DETACH" -y cygserver -e "CYGWIN=server" -s TERM -o

# And try running it again...
cygrunsrv --start httpd2

Once the server starts, you should be able to go to http://localhost in a browser, and see the default page saying ‘It works!’