Production Drupal Sites on IIS (or windows in general) - Experiences?

We encourage users to post events happening in the community to the community events group on https://www.drupal.org.
mtndan's picture

Hi folks,

Does anyone know of popular Drupal sites "in the wild" running on IIS, or even Apache/Windows?

I'm building an internal application at work and am forced to run on Windows Server VMs. From the experimentation and research I've done, Drupal runs fine on IIS but I have no experience or idea what will happen when we start to get hundreds of concurrent authenticated users. I'm more comfortable scaling Apache, but I haven't done it on Windows.

Any experiences or stories would be appreciated. Thanks!

Comments

This looks

criznach's picture

This looks relevant...

http://blog.stuartherbert.com/php/2008/12/17/making-iis-practical-in-pro...

Be sure to consider the database as well. If you'll be having hundreds of concurrent authenticated users the database load will be a factor too.

While I don't run any live sites on Windows, I do most of my development on Windows XP Pro with Apache 2.2, PHP 5.2.x, and MySQL 5.1. Even though I don't have lots of concurrent users, I still have occasional performance problems that I don't see on LAMP. I've applied many of the same optimization techniques that I've used on the LAMP platform, but I'm still not happy with performance under Windows. Granted, I haven't spent quite as much time optimizing my dev machine, but I've developed a sense that these applications just aren't as well tuned for the Windows OS.

I'd like to hear from others though!

Chris.

mysql on windows

mtndan's picture

Mysql on Windows runs swimmingly and is no problem at all. It's the IIS or Apache with PHP that I am most curious about.

--
Dan Katz
Solutions Architect, Acquia

IIS site

kbahey's picture

At 2bits.com, we avoid IIS like the plague. Even Apache on Windows is not pleasant. I have seen Windows admins struggle with Apache (from ApacheFriends, WAMP, ...etc.). It is a pain to deal with, and a pity when a company insists on Windows as the operating system, but ce la vie.

Microsoft helped get PHP as a FastCGI to work under Windows. APC is reported to work too. If you can get Apache to run as an MPM threaded Worker, then it should help with scaling, provided there are no road blocks in Windows itself.

If it helps, this is a site that runs Drupal on IIS: http://www.iis-aid.com/

You can contact the site owner and ask what challenges he faced.

Drupal performance tuning, development, customization and consulting: 2bits.com, Inc..
Personal blog: Baheyeldin.com.

Drupal performance tuning, development, customization and consulting: 2bits.com, Inc..
Personal blog: Baheyeldin.com.

Thanks Khalid. Yup at my day

mtndan's picture

Thanks Khalid. Yup at my day job it's a windows environment. We've done some Linux-based sites but all smallish and me (not a sysadmin) doing the support. This is a much bigger project and needs to be "in the fold" with the rest of our infrastructure.

It's funny I have been looking at http://www.iis-aid.com a lot and plan on using their php installer. I didn't know they ran Drupal. Cool!

Thanks again for your input.

--
Dan Katz
Solutions Architect, Acquia

W(IIS+A)MP

kforge's picture

To test like-for-like, I've set up IIS6 + Apache running on the same box, with different ports. Apache serves up documents to anonymous users 5 times faster (not a scientific result!). Avoid scheduling your cron (or any modules that perform sql writes) at the same time as your database backup - Apache will choke.

IIS on Win2003 / IIS7 on Vista

fgm@drupal.org's picture

This spring we had a customer who mandated a Windows 2003 server for a corporate intranet. No way to get a Linux. We were allowed to use Apache instead of IIS, though, because they had not yet migrated to Windows Server 2008, and IIS7 - which is far better than IIS6 - was therefore not available.

We used the Zend Server production bundle, in its Apache version, and had no significant issues with the actual Drupal hosting part on that setup (disclaimer: OSInet is a Zend partner). This includes an APC equivalent for opcode caching, and a page cache, along with the various monitoring tools like slow script/slow query reporting. There are only a few hundred users for that system anyway, so it may not be very significant.

The biggest annoyance, in terms of time lost turned out not to be with the AMP part, but with missing the various utilities one takes for granted on a *nix box, like crontab, wget or curl, and ssh. None of these are available "standard" on windows, which meant having to install them wget from one of its numerous win32 ports, changing crontab configuration to windows scheduled tasks, converting bash scripts to windows shell (cygwin was forbidden for whatever IS reason), and most annoying, use a graphical access control system with file transfer helper instad of being able to just login to the server with ssh and sftp.

Beyond this, I've been using IIS7 with on Vista for development, and once one gets past the graphical config screen and its lack of documentation, it performs actually rather better than WAMPserver out of the box. But this is also true of about just any other solution, including a plain Apache install from Apache.org, or the Zend Server community edition (no-cost version). I suspect it would deploy rather nicely on Windows Server 2008.

Thanks for the information.

mtndan's picture

Thanks for the information. We are stuck with Server 2003 and IIS6 for now.

--
Dan Katz
Solutions Architect, Acquia

One thing I forgot to

fgm@drupal.org's picture

One thing I forgot to mention is that you can use Zend Server on top of IIS: the suite works for both web servers: either the bundled (or a custom) Apache, or the standard IIS6/7 on the host.

output caching

chicagomom's picture

Interesting thread. What about output caching?

What kinds of tools are you using to measure performance?

chicagomom on Twitter and d.o.

"Page caching" at they call

fgm@drupal.org's picture

"Page caching" at they call it is a bundled output caching mechanism. Not sure it is present in the Community Edition, though.

I used to work on a product

mmilano's picture

I used to work on a product which was only supported on Windows. This was corporate security risk management software with a PHP/SOAP front end.

We used FastCGI with IIS. It worked relatively well (considering we had to run it on IIS).

Mike Milano

w2k3

steve.colson's picture

We've got two clients specifically using w2k3 boxes for their webheads. One uses IIS and is a multi-site install, and one is an apache-based single site. Both run fine. The biggest problem with them both is maintenance--lack of ssh+svn is a huge pain for us.

For IIS on w2k3, you will need isapi redirect (either the free or paid version) to handle the .htaccess rules for clean urls. I do recommend the paid version as it reads the native .htaccess file and will support multiple rule files whereas the free version makes you enter all rules for all sites in a single file. I think 2k7 fixed the clean urls problem, but I'm not 100% sure.

One other huge pain is that IIS didn't want to hand off handling of certain file extensions even if the file didn't exist. We normally do 301's from the old file (foo.asp) to the new path (/content/foo, or /foo, or whatever) and we basically had to change the IIS 404 handler to a new asp script that stripped the extension off and did the 301 to drupal from there.

Between all sites on the IIS multi-site, they get ~500k page views a month.

Apache hasn't been too problematic overall, though they get a whole lot less page views than the other, so it's hard to compare.

I confirm you no longer need

fgm@drupal.org's picture

I confirm you no longer need ISAPI Rewrite on IIS7: there's a bundled replacement (except it works better, without the hidden http double request). Only limitation is that it doesn't read .htaccess, so you have to write your web.config yourself.

Great information,

mtndan's picture

Great information, thanks!

Can you go into any more detail on your IIS multisite config? Are you using fastcgi php?

--
Dan Katz
Solutions Architect, Acquia

Walk-through

steve.colson's picture

It's really not that different from how you would set up an apache multi-site instance. You tell IIS to point whatever domains to the same webroot or just have a default website as a catch-all. Long-term, we need to get our client over to a fastcgi instance, but instead php is in as ISAPI right now due to stability issues at the time.

I've attached our walk-through for setting up PHP with our client. It was written a year ago (wow... right on the nose) so some things may be a bit out of date. I'm sure we've made other changes to the stack since then but this should be a good start.

Fantastic, thanks! I'm

mtndan's picture

Fantastic, thanks!

I'm having great results so far with fastcgi on iis6 using the PHP installer from http://www.iis-aid.com. Just edit the php.ini to enable mysqli, gd2 and mbstring, up the memory limit and you're good to go. Seems to play nice with http://www.isapirewrite.com as well.

--
Dan Katz
Solutions Architect, Acquia

we run predominently on W2k3/IIS

grafixfarm's picture

When I first joined the company in 2005, there was no way I could get a Linux/Apache setup not even Windows/Apache. So I have been stuck with w2k3/iis since then. We are an ISP as well as the custodians of the .sb ccTLD, we provide web hosting and our customers who have requested Drupal/Joomla have always had to bear with me tinkering with w2k3/iis to make it work. For me I have worked and struggled with this system for all these years. I see a light at the end of the tunnel with more support for IIS from Drupal and other open source solutions as well as the company finally agreeing to set up a Linux/Apache environment. I will set that up and deploy it soon. I live in the Solomon Islands by the way.

recent success with FastCGI on IIS 6.0, PHP 5.2.11

mobonobomo's picture

This is a great discussion, and got me on the path to actually being able to have a multi-site setup on IIS 6.0. Thanks for all the informative comments - I probably would've spent an extra day getting it working if I hadn't come across this thread. Cheers!

I have posted my notes on what worked for me here, with links to the resources that I used (mostly on iis.net).

A couple of thoughts worth mentioning here: advisable to upgrade to PHP 5.2.11 (and the non-thread safe version) as it plays nicely with FastCGI; I did not have success initially with the FastCGI 1.5 RC beta and opted for FastCGI 1.0; and make sure to change your php.ini file as directed in the tutorial on iis.net - php.ini also includes instructions in its comments.

Hope this is helpful, I'm happy to answer any questions to the best of my ability. I'm glad I made some notes or I would've forgot what I did!

IIS & Drupal with the right components

vidichannel's picture

I realize my mix of open source Drupal and MS may not be the most popular, but we have had great success with it lately. Cannot speak for multi-site but we have quite a few separate installations running Windows 2008/2008R2, PHP 5.2.12 and IIS 7.5 (not Apache). It wasn't always that way, but the default Microsoft add-in components provided by IIS (easily added with the Web Platform Installer) handle performance quite well. Also, IMHO the new GUI for IIS is way better than the old IIS v6 and makes simple management a lot easier for new site admins without NIX degrees and a compulsion for typing commands. Microsoft is trying to cater to both with both Powershell (for typers) and the GUI.

URL Rewriter 2.0 (even imports .htaccess rewrite files if required)
FastCGI
WinCache 1.1 (now final with opcode and user cache, seems faster than APC)
Page Compression (built-into site options)

+ Boost Module

This mix overall offers impressive results.

Now if I could just get the bug fixed for the reversed status report error message on directory security- it shows the "sites/default" folder is not write-protected when it is, unless you make the folder writable.

Boost rules

mikeytown2's picture

Mind sharing them?
http://drupal.org/node/615474

PHP settings for Drupal on IIS

jcmartinez's picture

Any PHP setting specific to IIS that could improve the performance of Drupal?

I understand that running PHP as a FastCGI is more stable than running as ISAPI on IIS. Any experience on this?

PHP On IIS

marco71's picture

Hi All,

I think the most important difference between apache and IIS is in mod rewrites and also the way global PHP and local(per_dir) settings are handled. It seems that Clean URLs will not work on IIS.

Currently have some trouble on 7.5 IIS with a register globals setting which seems to be switched on some how and can't be configured per directory. Or at least I don't manage. PHP version 5.2.17. Deprecated "register_globals".

Am on shared webhosting which is why he(provider) can not just update to 5.3 since all other shared hosted site will also get 5.3. and they don't manage do do this per "shared webhost". Which is absolutely no problem on Apache.

Plesk also doesn't seem to be a helping factor in all this since that needs a certain PHP version and upgrading will terinate support contracts on the Plesk licenses running on that server..... Grrrr IIS I have never had any problems like this on any of the Apache installs I did.

I know it can be done

marco71's picture

Hi I didn't mean to blame IIS. I know it can be done. There seems to be a lot less documentation about how to configure this. And I do think that Apache on linux or even Apache on Windows is a better solution for a Drupal installation. I am MCSE but not a big IIS fan sorry.

But I will send my provider this node to look at. He is open to suggestions and willing to support so I don't think he really is a bad provider. He is even Belgian. So can't be bad :-) He has the Drupal install pack right in the plesk desk.

Kind regards

Bad Provider?

Akaoni's picture

Sounds like the problem's your hosting provider.

Clean URLs on IIS:
http://drupal.org/node/3854

No install I've seen of PHP in IIS sets register_globals to "On" by default.
I'd say your provider set this (or copy-pasted it) explicitly.

IIS 7.5 can support a different PHP install per-directory.
When your provider says it can't be done they mean they don't know how or are unwilling to.


Be careful not to blame the technology when it's the implementation that's at fault. ;)

johnbarclay's picture

This is a very painful one to debug.

Symptoms:
- failed php page executes and leaves some .php files locked. I use windows unlocker to see the locked files (http://download.cnet.com/Unlocker/3000-2248_4-10493998.html) but there are several other options available for seeing locked files.
- trying to delete directory or files shown fails. Unknown Owner and permissions on files are corrupt and can't be overridden even by admins. Files can't be deleted. Folders can't be deleted. After IIS is restarted, folders are deleteable.
- wincache extension 1.1 enabled on IIS
- false assumptions and wild goose chases about windows server corruption, file caching, drush on windows issues, etc.

References:
- http://forums.iis.net/p/1183427/2003774.aspx
- http://ruslany.net/2011/04/wincache-and-wordpress-plugin-upgrade-problem/

Solution:
- disable wincache 1.1 extension or upgrade to current dev versions.
- restart all websites with and worker processes where old wincache was in use.

has any one experienced the access denied error

hela2012's picture

I have drupal 7.12 on IIS 7.5 win server 2008 , php5.3.8

my site has 4 roles, admin, 3 other roles, and anonymous.

the site seems to function fine for some time and every some interval i cannot log in to the site, i am getting access denied error (in my case takes me back to the log in page(i set the access denied error page to be the log in page,))

the weird thing is I can see the that a session is opened for the acct i am using to log in, but when ever i try to click on any thing it takes me back to the log in page(access denied page.)

restarting iis makes the issue go away for another interval and the access denied issue comes back a gain. :(

please help, it is driving me crazy

IIS and Drupal

alexpilotti's picture

Hi,

in order to help you troubleshooting this issue:

Just restarting the web site's application domain is enough to bring temporarily things back to normality?
Can you please enable the PHP error log and tel me if you find any errors?

Best,

Alessandro Pilotti
MVP ASP.Net / IIS

leandrops70's picture

Hello,

I have a Drupal 7 site on a (godaddy) shared server.

It's based on IIS 7 and it means (as far as I know) IIS ignores setting.php and we have to use web.config

My goal: I need to get the (real) IP address of the client machine.

The functions I tested (including ip_address()) are returning me the value of "REMOTE_ADDR" when in my scenario the real IP address of the user is in the the X-Forwarded-For header

The solution in case of using setting.php is this:

// Tell Drupal that we are behind a reverse proxy server $conf['reverse_proxy'] = TRUE; // List of trusted IPs (IP numbers of our reverse proxies) $conf['reverse_proxy_addresses'] = array( '127.0.0.1', );

Then my question is: How can we make these changes/settings using IIS/web.config file?

I tried to create a rule (web.config) to rewrite the value of REMOTE_ADDR with the X-Forwarded-Fo but It doesn't work for me. REMOTE_ADDR is not taking the real IP (X-Forwarded-Fo) of the user. Maybe I need to add something to override this value, before "run" this rule?

I really appreciate any help with this.

Regards,

Leo.

IIS ignores the .htaccess

wolffereast's picture

IIS ignores the .htaccess file in favor of the web.config file. The site still uses settings.php. Unfortunately I cant help you with your web.config setup, but hopefully this points you in a more fruitful direction.