Wanted to put this post out there in hopes of helping the unfortunate soul who may be trying to get this working as well.
Disclaimer: this solution has only been tested with the latest version of Nginx and OWA 2007. Your mileage may vary.
First off I would like to reference a very good example of getting Nginx set up with talking to OWA via a reverse proxy here: http://planetit.ws/linux/debian/configuring-nginx-based-reverse-proxy-for-owa.html
This example works perfectly for most mobile devices (Android, WebOS, etc). However, iPhones and iPads do NOT cooperate and simply fail their requests to the back-end.
After much searching apparently the problem is iOS devices do not work well (or at all) with GZip compression. To turn this off simply add the following to your nginx.conf and it will disable it upstream (the empty string disables):
proxy_set_header Accept-Encoding “”;
Once you restart Nginx with this added your iOS devices should work with ActiveSync with no issues.
Nicely done – was driving me nuts.
Looks like i’m running into exact same issue you did. Could you please tell me a little more about the config on the exchange side. I think that’s the problem in my case? I can send you my config you’d like. Anything you can do to help would be amazing. Thanks in advance. Please point me in the right direction.
I really can’t speak to the OWA setup portion of this as it was set up by our OWA admin. However the key points on Nginx for reverse proxying is the turning off the GZip compression. From my tests it appears the iOS devices have a hard time with GZip. Also, the site I linked to has a great Nginx config example.
If you have additional issues past that I would need to know what specific errors it is throwing.
Good luck 🙂
This is an amazing post and it helped me get everything working. I do have one annoyance which I hope someone can help me with. I am consistently seeing these messages in the error log for nginx.
upstream timed out (110: Connection timed out) while reading response header from upstream
I’ve modified the proxy_read_timeout variable but no cigar.
Thanks for any help on this.