I have a Windows 2003 server and I run IIS on it. I want to run php on the server so I can host a drupal site. I wish to host the site using apache so that I can have clean URLs. Is it possible to run IIS and Apache? Would there be any tips that you would recommend?
You can have IIS and Apache living on the same port - if they are on different IP addresses. There is some special configuration you need to do for IIS though, as it typically binds all ports to all IPs. Here is documentation for how to configure IIS to only listen on certain ports/IPs: http://support.microsoft.com/kb/813368/EN-US/
If you want to run them both, and have them both appear respond to requests on the same port, then you can use a thing called a Reverse Proxy.
Let's say you want everything to run through Apache, with the exception of a few url's you want to run through IIS.
You would set up Apache to listen on :80 (normal HTTP traffic) and set up IIS to listen on something else (say, :81).
Everything except, say, /myIISApp/ would run through Apache, and /myIISApp/ would run through IIS.
Then, you would set up your Reverse Proxy to catch any URL matching /myIISApp/ and forward it to :81/myIISApp/ (or whatever the URL for the IIS machine is).
Note that having your IIS as your :80 server and Apache as your :81 server can be more difficult to configure. See this SF post here for a basic how-to.
I do this currently. However, squillman is correct. You will need to have Apache listening on a different port than IIS. I use 80 for IIS, and 81 for Apache.
To make your URLs appear without ports, you can create a redirect in IIS. Use these instructions:
In IIS Manager, expand the local computer, right-click the Web site or directory you want to redirect, and click Properties.
Click the Home Directory, Virtual Directory, or Directory tab.
Under The content for this source should come from, click A redirection to a URL.
In the Redirect to box, type the URL of the destination directory or Web site. For example, to redirect all requests for files in the Catalog directory to the NewCatalog directory, type /NewCatalog.
You won't be able to have them both listen on the same ports, otherwise you should be fine to run them both.
EDIT (thanks, MattB):
That is, unless you have them running on separate IP addresses. Then you can bind them to the same port on each address.