<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Phusion Blog]]></title><description><![CDATA[Pushing the state of art in web apps, microservices and devops.]]></description><link>https://blog.phusion.nl/</link><generator>Ghost 0.11</generator><lastBuildDate>Sun, 21 May 2017 04:25:39 GMT</lastBuildDate><atom:link href="https://blog.phusion.nl/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Passenger 5.1.4: New Ubuntu, Fix for System Keychain Bug on macOS]]></title><description><![CDATA[<p>Version 5.1.4 of the <a href="https://www.phusionpassenger.com/">Passenger</a> application server for Ruby, Node.js, Meteor and Python has been released. Version 5.1.3 was skipped because of problems during the release process. Version 5.1.4 fixes an <a href="https://blog.phusion.nl/2017/03/09/service-announcement-solving-macos-keychain-issues-caused-by-passenger/">unfortunate side-effect</a> from using a private keychain as part of the <a href="https://www.phusionpassenger.com/library/indepth/security_update_check.html">security</a></p>]]></description><link>https://blog.phusion.nl/2017/05/10/passenger-5-1-4/</link><guid isPermaLink="false">120d81a0-e8af-4fd5-9149-471617cc0539</guid><category><![CDATA[Passenger]]></category><category><![CDATA[Passenger releases]]></category><dc:creator><![CDATA[Camden Narzt]]></dc:creator><pubDate>Wed, 10 May 2017 12:19:00 GMT</pubDate><media:content url="https://blog.phusion.nl/content/images/2017/04/passenger-space-1.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.phusion.nl/content/images/2017/04/passenger-space-1.png" alt="Passenger 5.1.4: New Ubuntu, Fix for System Keychain Bug on macOS"><p>Version 5.1.4 of the <a href="https://www.phusionpassenger.com/">Passenger</a> application server for Ruby, Node.js, Meteor and Python has been released. Version 5.1.3 was skipped because of problems during the release process. Version 5.1.4 fixes an <a href="https://blog.phusion.nl/2017/03/09/service-announcement-solving-macos-keychain-issues-caused-by-passenger/">unfortunate side-effect</a> from using a private keychain as part of the <a href="https://www.phusionpassenger.com/library/indepth/security_update_check.html">security update check</a> on macOS, as well as some other minor nuisances. This release adds Ubuntu 17.04 "Zesty" support, and is packaged with Nginx 1.10.3.</p>

<p>The 5.1.x series of Passenger brings a plethora of <a href="https://blog.phusion.nl/2017/01/10/passenger-5-1-1/">improvements</a> in uptime maximization, security and efficiency. Please be aware that you can enjoy <a href="https://www.phusionpassenger.com/enterprise">enterprise features</a> and sponsor the open source development directly by <a href="https://www.phusionpassenger.com/get_it_now">buying Phusion Passenger Enterprise</a>.</p>

<h2 id="fixforsystemkeychainbugonmacos">Fix for System keychain bug on macOS</h2>

<p>In 5.1.2 Passenger created a private keychain for use with the security update checker. Unfortunately the related APIs had undocumented side effects and caused issues with the system keychain which resulted in irregularities with wifi, Time-Machine, and other system services.</p>

<p>In Passenger 5.1.4 we reverted this change and no longer create a private keychain on macOS, and instead handle the certificate/key-pair separately to increase robustness. For more details on undoing the side effects caused by this problem, you can read <a href="https://blog.phusion.nl/2017/03/09/service-announcement-solving-macos-keychain-issues-caused-by-passenger/">here</a>.</p>

<p>In addition some unnecessary logging in the non-error case was suppressed.</p>

<h2 id="macossierrabuiltinapachesupport">macOS Sierra built-in Apache support</h2>

<p>This release adds support for compiling against the built-in Apache installation supplied with macOS 10.12 Sierra. Previous versions of Passenger failed to compile because macOS Sierra's Apache installation is incomplete and does not supply the <code>apr-config</code> tool. We now work around this by using hardcoded default values for macOS.</p>

<h2 id="ubuntu1704zestypackages">Ubuntu 17.04 Zesty packages</h2>

<p>We’ve added Passenger packages for the Ubuntu Zesty release. In accordance with our <a href="http://www.phusionpassenger.com/library/install/apt_repo/">support policy</a> (support all Ubuntu LTS releases that are still supported by Canonical, plus the latest Ubuntu release), this means that our packages for Ubuntu 16.10 “Yakkety” are now deprecated.</p>

<h2 id="nginx1103preferred">Nginx 1.10.3 preferred</h2>

<p>The preferred Nginx version is now 1.10.3, which contains <a href="http://nginx.org/en/CHANGES-1.10">several bugfixes</a>.</p>

<p>We are not moving to Nginx 1.12.0 in this release because multiple modules we include are not ready for the new Nginx version.</p>

<h2 id="variousother">Various other</h2>

<ul>
<li>[Standalone] Fixes <code>install-standalone-runtime</code> command after regression in 5.1.2.</li>
<li>Removes unnecessary logging of "No Error" from macOS Security Update Checker.</li>
<li>Don't output colorized text during dependency check when output isn't a TTY, unless forced. Closes <a href="https://github.com/phusion/passenger/issues/1902">GH-1902</a>.</li>
<li>[Enterprise] Fixes <code>send-cloud-usage</code> command when Passenger is installed from gem.</li>
<li>[Enterprise] Improves robustness of machine properties reporting for pay-as-you-go cloud-license holders.</li>
<li>[Enterprise] Adds support for reporting available RAM, and <code>CONTAINER_HOST_IDENTIFIER</code> envvar, to support RAM-based pricing model.</li>
<li>Added additional debug level logging for troubleshooting issues with bash scripts. Closes <a href="https://github.com/phusion/passenger/issues/1928">GH-1928</a>.</li>
<li>Fix missing openssl check in <code>passenger-install-apache2-module</code> dependency checker. Closes <a href="https://github.com/phusion/passenger/issues/1934">GH-1934</a>.</li>
</ul>

<h2 id="installing514">Installing 5.1.4</h2>

<p>Please see the <a href="https://www.phusionpassenger.com/library/install/">installation guide</a>.</p>

<h2 id="upgradingto514">Upgrading to 5.1.4</h2>

<p>We strongly advise staying up to date with the latest version.</p>

<p><strong>See also the upgrade notes below!</strong></p>

<table class="passenger-install-table">  
  <tr>
    <td><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=osx"><img src="https://blog.phusion.nl/wp-content/uploads/2013/10/apple-small.png" alt="Passenger 5.1.4: New Ubuntu, Fix for System Keychain Bug on macOS"><br><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=osx">OS X</a></a></td>
    <td><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=debian_ubuntu"><img src="https://blog.phusion.nl/wp-content/uploads/2013/10/debian-small.png" alt="Passenger 5.1.4: New Ubuntu, Fix for System Keychain Bug on macOS"><br><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=debian_ubuntu">Debian</a></a></td>
    <td><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=debian_ubuntu"><img src="https://blog.phusion.nl/wp-content/uploads/2013/10/ubuntu-small.png" alt="Passenger 5.1.4: New Ubuntu, Fix for System Keychain Bug on macOS"><br><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=debian_ubuntu">Ubuntu</a></a></td>
    <td><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=heroku"><img src="https://blog.phusion.nl/wp-content/uploads/2013/10/heroku-small.png" alt="Passenger 5.1.4: New Ubuntu, Fix for System Keychain Bug on macOS"></a><br><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=heroku">Heroku</a></td>
  </tr>
  <tr>
    <td><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=redhat_centos"><img src="https://blog.phusion.nl/content/images/2015/05/redhat-small.png" alt="Passenger 5.1.4: New Ubuntu, Fix for System Keychain Bug on macOS"><br><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=redhat_centos">Red Hat</a></a></td>
    <td><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=redhat_centos"><img src="https://blog.phusion.nl/content/images/2015/05/centos-small.png" alt="Passenger 5.1.4: New Ubuntu, Fix for System Keychain Bug on macOS"><br><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=redhat_centos">CentOS</a></a></td>
    <td><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=rubygems"><img src="https://blog.phusion.nl/wp-content/uploads/2013/10/rubygems-small.png" alt="Passenger 5.1.4: New Ubuntu, Fix for System Keychain Bug on macOS"></a><br><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=rubygems">Ruby gem</a></td>
    <td><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=source_tarball"><img src="https://blog.phusion.nl/wp-content/uploads/2013/10/tarball-small.png" alt="Passenger 5.1.4: New Ubuntu, Fix for System Keychain Bug on macOS"></a><br><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=source_tarball">Tarball</a></td>
  </tr>
  <tr>
    <td><a href="https://github.com/phusion/passenger-docker#upgrading_passenger"><img src="https://blog.phusion.nl/content/images/2015/03/docker-small.png" alt="Passenger 5.1.4: New Ubuntu, Fix for System Keychain Bug on macOS"></a><br><a href="https://github.com/phusion/passenger-docker#upgrading_passenger">Docker</a></td>
  </tr>
</table>

<p>If you are upgrading from 4.x, please read <a href="https://www.phusionpassenger.com/library/install/migrating/">the 5.0 upgrade notes</a> to learn about potential upgrade caveats.</p>

<h3 id="downloadissuewitholdgemversion">Download issue with old <code>gem</code> version</h3>

<p>Old versions of <code>gem</code> (below 2.2.0, released in 2013) may fail to download the Passenger Enterprise gem from our rubygem hosting software (<a href="https://github.com/geminabox/geminabox">Gem in a box</a>).</p>

<pre><code>ERROR: Could not find a valid gem 'passenger-enterprise-server' (= 5.1.4), here is why:  
 Unable to download data from https://..@www.phusionpassenger.com/enterprise_gems/
 - bad response Unauthorized 401 
</code></pre>

<p>If this happens, please upgrade to a newer version of gem:</p>

<pre><code>gem install rubygems-update; update_rubygems  
</code></pre>

<h3 id="specialnotesaboutcapistranopassenger">Special notes about capistrano-passenger</h3>

<p>If you are using Capistrano and <a href="https://github.com/capistrano/passenger">capistrano-passenger</a>, then it may fail with this error:</p>

<pre><code>SSHKit::Runner::ExecuteError: Exception while executing as user@99.99.99.99: undefined method `[]' for nil:NilClass

NoMethodError: undefined method `[]' for nil:NilClass

Tasks: TOP =&gt; passenger:restart
</code></pre>

<p>This is due to an incompatibility in capistrano-passenger with Passenger 5.0.22 and later. Please upgrade capistrano-passenger to 0.2.0 or later.</p>

<h2 id="final">Final</h2>

<p><img src="https://blog.phusion.nl/wp-content/uploads/2013/07/github-27d4e972e8e327134061bb88b4bd139e.png" alt="Passenger 5.1.4: New Ubuntu, Fix for System Keychain Bug on macOS" width="80" height="80" class="alignnone size-full wp-image-3823 float-right" style="margin-top: -1em; display: none"></p>

<p>Phusion Passenger's core is open source. Please <a href="https://github.com/phusion/passenger">fork or watch us on Github.</a> :)</p>

<p><img width="128" src="https://blog.phusion.nl/content/images/2016/12/logo.svg" alt="Passenger 5.1.4: New Ubuntu, Fix for System Keychain Bug on macOS"></p>

<p><strong><a href="https://www.phusionpassenger.com">Passenger</a></strong> ensures that your Ruby, Python, Node.js and Meteor apps, microservices, and APIs are served with outstanding reliability, performance and control. For additional features and premium support, check out the
<a href="https://www.phusionpassenger.com/enterprise">enterprise edition</a>.</p>

<iframe src="https://ghbtns.com/github-btn.html?user=phusion&amp;repo=passenger&type=watch&amp;size=large&amp;count=true" allowtransparency="true" frameborder="0" scrolling="0" width="170" height="30" style="display: inline"></iframe><iframe src="https://ghbtns.com/github-btn.html?user=phusion&amp;repo=passenger&amp;type=fork&amp;size=large&amp;count=true" allowtransparency="true" frameborder="0" scrolling="0" width="170" height="30" style="display: inline"></iframe><iframe src="https://ghbtns.com/github-btn.html?user=phusion&amp;type=follow&amp;size=large&amp;count=true" allowtransparency="true" frameborder="0" scrolling="0" width="190" height="30" style="display: inline"></iframe>]]></content:encoded></item><item><title><![CDATA[How Red Hat and New Relic market to developers]]></title><description><![CDATA[<p>Red Hat and New Relic are some of the most interesting companies out there. As Linux fans, we have been always amazed at the things that Red Hat has achieved. They are one of the largest contributors of many important open source projects, including the Linux kernel and <a href="https://kubernetes.io/">Kubernetes</a>. And</p>]]></description><link>https://blog.phusion.nl/2017/04/14/how-red-hat-and-new-relic-market-to-developers/</link><guid isPermaLink="false">21b98421-747d-4163-aee1-3789f03538cc</guid><category><![CDATA[Business]]></category><category><![CDATA[Marketing]]></category><category><![CDATA[Sales]]></category><dc:creator><![CDATA[Hongli Lai]]></dc:creator><pubDate>Fri, 14 Apr 2017 08:10:29 GMT</pubDate><content:encoded><![CDATA[<p>Red Hat and New Relic are some of the most interesting companies out there. As Linux fans, we have been always amazed at the things that Red Hat has achieved. They are one of the largest contributors of many important open source projects, including the Linux kernel and <a href="https://kubernetes.io/">Kubernetes</a>. And we all know how big Red Hat is.</p>

<p>New Relic is an application monitoring tool company that sped past all its competitors in its early days and achieved IPO. In 2015 the company had a <a href="http://newrelic.com/press-release/20150212">revenue of $29 million</a>, with a year-on-year revenue growth of 69%.</p>

<p>What do these tech giants have in common? Their marketing strategy. Apparently, a huge portion of their marketing is focused at developers and system administrators, as documented in a series of <a href="https://growthhackers.com/">Growth Hackers</a> interviews (<a href="https://growthhackers.com/growth-studies/red-hat-how-they-developed-a-big-idea-that-shook-up-a-huge-market">Red Hat interview</a>, <a href="https://growthhackers.com/growth-studies/new-relics-growth-playbook-from-startup-to-ipo">New Relic interview</a>).</p>

<figure class="figure-fullwidth">  
  <img src="https://blog.phusion.nl/content/images/2017/04/Grass.jpg" class="img-wide">
</figure>

<h2 id="grassroots">Grass-roots</h2>

<p>In the early days, Red Hat and New Relic both followed a grass-roots, bottom-up approach.</p>

<p>Instead of focusing on selling to IT leads, New Relic focused on developers and system administrators. Those people then became internal advocates for their product, because they loved their product.</p>

<p>Red Hat's early story, although it happened a decade earlier, was similar. They had trouble selling to IT leads because back then they were small and enterprises didn't trust open source. But their product was good and (compared to proprietary Unix systems) inexpensive, so system administrators loved them and installed Red Hat anyway. This gave them leverage, because all of a sudden CTOs would discover that their organization was running thousands of Red Hat installations.</p>

<h2 id="eventsandcommunity">Events and community</h2>

<p>New Relic organized, and still organizes, a lot of developer events such as hackathons and meetups. They sponsor a ton of conferences. All this generates brand awareness and a sense of community in their direct users.</p>

<p>Red Hat doesn't seem to organize hackathons and meetups as much, but they still generate a lot of brand awareness by being directly involved in the development of nearly every important open source project.</p>

<p>Even though both of them have "graduated" from their early days, and have strong sales teams nowadays that also target executive-level people, they still stay true to their grass-roots origins.</p>

<h2 id="freemium">Freemium</h2>

<p>Both Red Hat and New Relic believe that the freemium model is important when selling a developer- or sysadmin-oriented product. Developers being able to tinker with a free tier is what allows them to become internal advocates, who will later help Red Hat and New Relic to convince higher-ups to buy their products. New Relic has had a free plan since forever, while Red Hat has a free tier through Fedora and CentOS. Their philosophy is: let people <em>use</em> the product first; if they love it then selling will naturally take care of itself.</p>

<p>I understand this. Developers (myself included) tend to have an aversion against sales and marketing tactics. We want to test things ourselves, we want to know for sure that something will solve our problems. Payment walls and "contact sales" forms pose a significant barrier.</p>

<p>As developers are <a href="http://a16z.com/2016/04/13/selling-to-developers-open-source-business-models/">getting more and more influence over the buying process</a> (and, increasingly, <em>are</em> the buyers), I believe that having a free tier becomes increasingly important going forward.</p>

<h2 id="closingremarks">Closing remarks</h2>

<p>Both Red Hat and New Relic are believers in a bottom-up approach to marketing and sales. Stay close to developers, understand them, and let them tinker before trying to close the deal.</p>

<p>Red Hat's CEO has one more tip: sell a vision rather than a product. Advocate a mission larger than your product; one that makes people's lives better.</p>]]></content:encoded></item><item><title><![CDATA[Sometimes it's the simple things in life]]></title><description><![CDATA[<p>I recently set up a system that needed <a href="https://www.phusionpassenger.com">Passenger</a>'s ability to <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_load_shell_envvars">pass on environment variables from the user's shell to their app</a>. To my surprise I found that the variables were not set when my app ran.</p>

<p>At first I suspected that something was wrong with my setup, as</p>]]></description><link>https://blog.phusion.nl/2017/04/13/sometimes-its-the-simple-things-in-life/</link><guid isPermaLink="false">92e17270-472a-4639-9913-6d8cc88ac45b</guid><category><![CDATA[Passenger]]></category><category><![CDATA[Passenger articles]]></category><dc:creator><![CDATA[Camden Narzt]]></dc:creator><pubDate>Thu, 13 Apr 2017 12:08:50 GMT</pubDate><content:encoded><![CDATA[<p>I recently set up a system that needed <a href="https://www.phusionpassenger.com">Passenger</a>'s ability to <a href="https://www.phusionpassenger.com/library/config/nginx/reference/#passenger_load_shell_envvars">pass on environment variables from the user's shell to their app</a>. To my surprise I found that the variables were not set when my app ran.</p>

<p>At first I suspected that something was wrong with my setup, as I use a rather unorthodox shell setup. So I set about checking every step of the startup process; from which shell I use, to my startup scripts. Everything <em>looked</em> fine, so I assumed the problem must be with Passenger itself.</p>

<p>Little did I know that this would lead me down a long path towards a micro-enlightenment, as well as a Passenger improvement.</p>

<figure>  
  <img src="https://blog.phusion.nl/content/images/2017/04/shell.jpg">
</figure>

<h2 id="debuggingon">Debugging on</h2>

<p>While debugging I added logging which tells me which shell Passenger thinks I use and if that shell matches any of the supported shells for loading envvars. I also added a flag to the arguments that are passed to the shell, namely the <code>-x</code> flag. And after compiling and running my setup again, I was presented with a complete trace of what my shell was actually doing on startup.</p>

<p>It turned out that I had a block at the top of my script that conditionally exited the script if bash had been invoked non-interactively; which of course it had been, since Passenger doesn't need the interactive capabilities of the shell. But my eyes simply skipped over it when reviewing my script because it's so normal to be there that I didn't think about what it really means.</p>

<p>This went from a frustrating exercise in guessing what was wrong to being able to see, immediately what was wrong. All because of one extra flag.</p>

<figure>  
  <img src="https://blog.phusion.nl/content/images/2017/04/flag-x-2.jpg">
</figure>

<h2 id="passengerjustgotabitbetter">Passenger just got a bit better</h2>

<p>So what does this mean for Passenger users? Just that it will be much easier to track down issues with environment variables in the next release, version 5.1.3. All you'll have to do is set your log level to 7 and you'll get a nice dump of the setup your shell goes through on startup. If you are interested, the relevant commit in Passenger is <a href="https://github.com/phusion/passenger/commit/51f0876eaff4455d8a4016609f5dd8827b592697">51f0876</a>.</p>]]></content:encoded></item><item><title><![CDATA[Passenger is NGINX Plus Certified!]]></title><description><![CDATA[<p>We are happy to announce that we have partnered with NGINX, Inc. and Passenger is officially certified under the NGINX Plus Certified Module Program.</p>

<p>In 2016, NGINX Inc. <a href="https://www.nginx.com/blog/dynamic-modules-nginx-1-9-11/">introduced</a> dynamic modules, which make life easier by not requiring a full recompilation of Nginx when adding extra functionality through modules. Dynamic</p>]]></description><link>https://blog.phusion.nl/2017/04/11/passenger-is-nginx-plus-certified/</link><guid isPermaLink="false">e257cbf4-54e9-4f3d-b927-37616f92ef67</guid><dc:creator><![CDATA[Tara Lingard ]]></dc:creator><pubDate>Tue, 11 Apr 2017 13:06:00 GMT</pubDate><media:content url="https://blog.phusion.nl/content/images/2017/04/newbanner2-1.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.phusion.nl/content/images/2017/04/newbanner2-1.png" alt="Passenger is NGINX Plus Certified!"><p>We are happy to announce that we have partnered with NGINX, Inc. and Passenger is officially certified under the NGINX Plus Certified Module Program.</p>

<p>In 2016, NGINX Inc. <a href="https://www.nginx.com/blog/dynamic-modules-nginx-1-9-11/">introduced</a> dynamic modules, which make life easier by not requiring a full recompilation of Nginx when adding extra functionality through modules. Dynamic module support also offers the freedom to choose which modules not to load.</p>

<p>Passenger's Nginx integration has supported dynamic modules since <a href="https://www.phusionpassenger.com/library/install/nginx/install_as_nginx_module.html#dynamic-module">version 5.0.28</a>. We're proud to say that Passenger is one of the first modules that passed a series of regression tests that ensure it works correctly with NGINX Plus, loads as expected, and plays nicely with all core NGINX Plus functionality. Passenger is designed and built against a rigorous set of architectural standards, and has world-class support options available.</p>

<p><img src="https://blog.phusion.nl/content/images/2017/04/nginxlovesphupa2.png" alt="Passenger is NGINX Plus Certified!"></p>

<p>In short, Passenger is now an NGINX Plus Certified Module! You can read more about the program on the <a href="https://www.nginx.com/blog/certified-modules-released/">NGINX Blog</a>.</p>

<p><img width="128" src="https://blog.phusion.nl/content/images/2016/12/logo.svg" alt="Passenger is NGINX Plus Certified!"></p>

<p><strong><a href="https://www.phusionpassenger.com">Passenger</a></strong> ensures that your Ruby, Python, Node.js and Meteor apps, microservices, and APIs are served with outstanding reliability, performance and control. For additional features and premium support, check out the
<a href="https://www.phusionpassenger.com/enterprise">enterprise edition</a>.</p>

<iframe src="https://ghbtns.com/github-btn.html?user=phusion&amp;repo=passenger&type=watch&amp;size=large&amp;count=true" allowtransparency="true" frameborder="0" scrolling="0" width="170" height="30" style="display: inline"></iframe><iframe src="https://ghbtns.com/github-btn.html?user=phusion&amp;repo=passenger&amp;type=fork&amp;size=large&amp;count=true" allowtransparency="true" frameborder="0" scrolling="0" width="170" height="30" style="display: inline"></iframe><iframe src="https://ghbtns.com/github-btn.html?user=phusion&amp;type=follow&amp;size=large&amp;count=true" allowtransparency="true" frameborder="0" scrolling="0" width="190" height="30" style="display: inline"></iframe>]]></content:encoded></item><item><title><![CDATA[A new face for Passenger]]></title><description><![CDATA[<h2 id="theestablishedlogo">The Established Logo</h2>

<p>Since 2012, Passenger has been sporting a lush, blue airplane seat as its logo (made by the awesome folks at <a href="http://softfacade.com">Softfacade</a>). With this chair we wanted to emphasise Passenger's ease of use and basically say; Take a seat and we'll do the rest. Although the product is</p>]]></description><link>https://blog.phusion.nl/2017/03/28/a-new-face-for-passenger/</link><guid isPermaLink="false">e918d543-7e52-4733-a8fa-423de3b00cb1</guid><dc:creator><![CDATA[Nick Visser]]></dc:creator><pubDate>Tue, 28 Mar 2017 09:57:29 GMT</pubDate><content:encoded><![CDATA[<h2 id="theestablishedlogo">The Established Logo</h2>

<p>Since 2012, Passenger has been sporting a lush, blue airplane seat as its logo (made by the awesome folks at <a href="http://softfacade.com">Softfacade</a>). With this chair we wanted to emphasise Passenger's ease of use and basically say; Take a seat and we'll do the rest. Although the product is still easy to use, it has evolved in such a way that there's a lot more aspects to highlight in the branding. Needless to say, this once familiar and comfortable chair is starting to feel a bit worn out.</p>

<p><img src="https://blog.phusion.nl/content/images/2016/11/687474703a2f2f626c6f672e70687573696f6e2e6e6c2f77702d636f6e74656e742f75706c6f6164732f323031322f30372f50617373656e6765725f63686169725f323536783235362e6a7067.jpg" alt=""></p>

<h2 id="tryingsomethingdifferent">Trying Something Different</h2>

<p>Timing couldn't have been more perfect. Nick, the newest member of the Phusion team and our full-time designer started rebranding the entire Passenger product from the ground up. Beginning with the logo. </p>

<p><img src="https://blog.phusion.nl/content/images/2016/11/screen_shot_2015-11-27_at_15-21-15.png" alt=""></p>

<p>At first we tried a re-imagined version of the chair to see if it could work as something fresh and minimal. But it just never stopped being a boring static chair. We knew that if we kept the chair, we would never stand out.</p>

<h2 id="atriptothezoo">A trip to the zoo</h2>

<p>We noticed a lot of companies in our field use animals as their mark (For example docker's whale and Mysql's dolphin) and be likeable, memorable, and symbolic. We decided to try and find an animal that would fit us and went through an entire zoo of different animals that we thought would be a nice symbolic image for our product. While trying to keep in-line with the metaphor we looked to a Joey, a passenger in the pouch of the mother kangaroo. But in the end it never felt right.</p>

<p><img src="https://blog.phusion.nl/content/images/2016/11/Sketch-sheet1.png" alt=""></p>

<p>Along the way a few stray rocket doodles starter appearing in the sketches. Met with positive remarks, the team decided a space theme for Passenger would be a good direction. That direction was up. </p>

<p><img src="https://blog.phusion.nl/content/images/2016/11/rocket-sketches.png" alt=""></p>

<p>An outer space theme would also accurately envision our company’s goals; to conquer the universe. But we knew the rocket image is used extensively by other companies for many different products. Time to brainstorm again! </p>

<h2 id="findingthenewlogostayingsafeorgoingforsomethingunique">Finding the New Logo: Staying safe or going for something unique?</h2>

<p>The longer this process took, the more we gravitated towards the idea of just using something cool and unique. Being the total geeks that we are we started thinking about taking notes from anime and shows featuring mech robots. Shout out to Gurren Lagann, Gundam, and Evangelion. A mech also fits well into the 'passenger' metaphor because of their human passengers. Furthermore, mechs are fast, powerful, and flexible; Traits they share with Passenger. </p>

<p><img src="https://blog.phusion.nl/content/images/2016/11/gundamscopy.png" alt=""></p>

<p>Although the first sketches were kickass, they showed the areas that we needed to work on to turn this from an illustration into a logo. We made it simpler and more human. By rounding the features and making it less menacing we created what would become our final logo sketch.</p>

<p><img src="https://blog.phusion.nl/content/images/2016/11/gundams-2.png" alt="">
<img src="https://blog.phusion.nl/content/images/2016/11/Screen-Shot-2016-11-07-at-16-57-49.png" alt="">
<img src="https://blog.phusion.nl/content/images/2016/11/A4-copy.png" alt=""></p>

<p><img width="128" src="https://blog.phusion.nl/content/images/2016/12/logo.svg" alt="Passenger logo"></p>

<p><strong><a href="https://www.phusionpassenger.com">Passenger</a></strong> ensures that your Ruby, Python, Node.js and Meteor apps, microservices, and APIs are served with outstanding reliability, performance and control. For additional features and premium support, check out the
<a href="https://www.phusionpassenger.com/enterprise">enterprise edition</a>.</p>

<iframe src="https://ghbtns.com/github-btn.html?user=phusion&amp;repo=passenger&type=watch&amp;size=large&amp;count=true" allowtransparency="true" frameborder="0" scrolling="0" width="170" height="30" style="display: inline"></iframe><iframe src="https://ghbtns.com/github-btn.html?user=phusion&amp;repo=passenger&amp;type=fork&amp;size=large&amp;count=true" allowtransparency="true" frameborder="0" scrolling="0" width="170" height="30" style="display: inline"></iframe><iframe src="https://ghbtns.com/github-btn.html?user=phusion&amp;type=follow&amp;size=large&amp;count=true" allowtransparency="true" frameborder="0" scrolling="0" width="190" height="30" style="display: inline"></iframe>]]></content:encoded></item><item><title><![CDATA[Ninh Bui @ AMSxTech - March 31st]]></title><description><![CDATA[<p>You can build a business in many ways, but you can only fund it in two; take VC money or go fund it yourself. After accomplishing the goal of generating over $1,000,000 ARR without taking any VC investments, CEO of Phusion, Ninh Bui has a story to tell.</p>]]></description><link>https://blog.phusion.nl/2017/03/20/ninh-bui-at-amsxtech/</link><guid isPermaLink="false">d6a57bab-6f9a-4338-a099-962bab40c4da</guid><dc:creator><![CDATA[Tara Lingard ]]></dc:creator><pubDate>Mon, 20 Mar 2017 16:38:10 GMT</pubDate><content:encoded><![CDATA[<p>You can build a business in many ways, but you can only fund it in two; take VC money or go fund it yourself. After accomplishing the goal of generating over $1,000,000 ARR without taking any VC investments, CEO of Phusion, Ninh Bui has a story to tell. </p>

<p><a href="https://tickets.amsxtech.com/"><img src="https://blog.phusion.nl/content/images/2017/03/amsxtech-1.jpg" alt="AMSxTech 2017" class="img-fullwidth"></a></p>

<p>If you liked our article <a href="https://blog.phusion.nl/2016/10/04/bootstrapped-profitable-and-proud/">Bootstrapped, Profitable and Proud</a> join us at the <a href="http://amsxtech.com/">AMSxTech Conference</a> in Amsterdam on the 31st of March 2017. Use code <strong>AMSXPHUSION</strong> to let them know where you came from and get a 10% discount on the ticket price. </p>

<p>AMSxTech is a non-profit, grassroots community that focuses on building bridges between the tech professionals in Amsterdam. After creating a successful curated community they decided to pan out and organize a conference focused on connecting people, providing inspiring content and focus on what's happening in the great city of Amsterdam. Four key topics will be tackled by multiple speakers, providing different views, opinions and stories. </p>

<p>Check out more about the conference <a href="http://amsxtech.com/">here</a> and get your tickets using code <strong>AMSXPHUSION</strong> for 10% off. </p>]]></content:encoded></item><item><title><![CDATA[Service announcement: solving macOS KeyChain issues caused by Passenger]]></title><description><![CDATA[<p>One of the major features introduced in Passenger 5.1 was the <a href="https://www.phusionpassenger.com/library/indepth/security_update_check.html">security update checker</a>. This (optional) feature allows users to be notified in case there are any important Passenger-related security updates so that they can take timely action to keep their systems secure.</p>

<p>At the time of writing (Passenger</p>]]></description><link>https://blog.phusion.nl/2017/03/09/service-announcement-solving-macos-keychain-issues-caused-by-passenger/</link><guid isPermaLink="false">5be6b8ce-ef08-45a6-85af-1a661f0f5c1b</guid><category><![CDATA[Passenger]]></category><category><![CDATA[Passenger articles]]></category><category><![CDATA[Featured posts]]></category><dc:creator><![CDATA[Camden Narzt]]></dc:creator><pubDate>Thu, 09 Mar 2017 11:48:00 GMT</pubDate><content:encoded><![CDATA[<p>One of the major features introduced in Passenger 5.1 was the <a href="https://www.phusionpassenger.com/library/indepth/security_update_check.html">security update checker</a>. This (optional) feature allows users to be notified in case there are any important Passenger-related security updates so that they can take timely action to keep their systems secure.</p>

<p>At the time of writing (Passenger 5.1.2), this security checker has a macOS-specific issue that could prevent networked Time Machine backups from working, and could prevent Macs from auto-joining known wifi networks. We are working on a fix, but until then we would like to announce a workaround.</p>

<p>This issue <strong>only affects macOS users</strong>, so all other users can simply ignore this announcement.</p>

<figure>  
  <img src="https://blog.phusion.nl/content/images/2017/03/house.jpg">
  <figcaption>The KeyChain problem only affects macOS users</figcaption>
</figure>

<h2 id="problemdescription">Problem description</h2>

<p>In Passenger version 5.1.1 and on macOS only, loading Passenger into the system Apache would cause the security update checker to fail and print an error in the log. We attempted to address this issue in Passenger 5.1.2.</p>

<p>The approach we took to was to create a private keychain on Passenger startup, and set it as the default keychain. Then when Passenger shuts down it would revert this change. A more detailed technical description of our approach can be found <a href="https://gist.github.com/FooBarWidget/7513ae9333d2d1aaf4993ae3dac6b626">on this Gist document</a>.</p>

<p>However there was a difficult to detect side effect to this solution. Even when the change was reverted, the plist in which this preference was stored was not completely reset to its initial state. Though it should have been an equivalent and valid state, nevertheless the system would become unable to read the system keychain. This in turn prevented networked time machine backups from working and prevented affected Macs from auto-joining known wifi networks.</p>

<figure>  
  <img src="https://blog.phusion.nl/content/images/2017/03/atwork.jpg">
  <figcaption>We are on it! Use the workaround in the mean time</figcaption>
</figure>

<h2 id="workaroundandfuturesolution">Workaround and future solution</h2>

<p>We are working hard to address this and believe that we have a potential fix worked out, however this time we are performing much more testing and verification in order to try and ensure that there are no unintended side-effects to this patch.</p>

<p>In the meantime if you are affected by this bug here is a workaround to get your system working again:</p>

<pre><code>sudo apachectl stop
sudo defaults delete /Library/Preferences/com.apple.security.plist DLDBSearchList
sudo defaults delete /Library/Preferences/com.apple.security.plist DefaultKeychain
</code></pre>

<p>Then edit your Apache configuration to include <code>PassengerDisableSecurityUpdateCheck on</code>. Then you can restart Apache and not experience this issue.</p>]]></content:encoded></item><item><title><![CDATA[Passenger 5.1.2: minor fixes + Homebrew tap]]></title><description><![CDATA[<p>Version 5.1.2 of the <a href="https://www.phusionpassenger.com/">Passenger</a> application server for Ruby, Node.js, Meteor and Python has been released. It fixes a specific use case on macOS where the new Passenger <a href="https://www.phusionpassenger.com/library/indepth/security_update_check.html">security update check</a> would fail, as well as some other minor nuisances. We are also proud to announce the</p>]]></description><link>https://blog.phusion.nl/2017/01/24/passenger-5-1-2/</link><guid isPermaLink="false">4b0aee43-b760-462c-923f-415c1863add4</guid><category><![CDATA[Passenger]]></category><category><![CDATA[Passenger releases]]></category><dc:creator><![CDATA[Daniel Knoppel]]></dc:creator><pubDate>Tue, 24 Jan 2017 10:31:00 GMT</pubDate><media:content url="https://blog.phusion.nl/content/images/2017/01/passenger-space-1.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.phusion.nl/content/images/2017/01/passenger-space-1.png" alt="Passenger 5.1.2: minor fixes + Homebrew tap"><p>Version 5.1.2 of the <a href="https://www.phusionpassenger.com/">Passenger</a> application server for Ruby, Node.js, Meteor and Python has been released. It fixes a specific use case on macOS where the new Passenger <a href="https://www.phusionpassenger.com/library/indepth/security_update_check.html">security update check</a> would fail, as well as some other minor nuisances. We are also proud to announce the availability of our new <a href="https://www.phusionpassenger.com/library/install/standalone/install/enterprise/osx/">Homebrew tap</a>, which makes it even easier to install Passenger Enterprise on macOS.</p>

<p>The 5.1.x series of Passenger brings a plethora of <a href="https://blog.phusion.nl/2017/01/10/passenger-5-1-1/">improvements</a> in uptime maximization, security and efficiency. Please be aware that you can enjoy <a href="https://www.phusionpassenger.com/enterprise">enterprise features</a> and sponsor the open source development directly by <a href="https://www.phusionpassenger.com/get_it_now">buying Phusion Passenger Enterprise</a>.</p>

<h2 id="privatekeychainforapachemacos">Private keychain for Apache / macOS</h2>

<p>The system Apache web server on macOS runs as the <code>_www</code> user by default. Since this is a daemon user without a home directory, it lacks a user-specific keychain and defaults to the system keychain. Passenger's security update check relies on accessing the default keychain to prevent unnecessary popups, which fails in this case because the <code>_www</code> user (correctly) doesn't have sufficient permissions.</p>

<p>In Passenger 5.1.2 we avoid permission issues by creating a private keychain on macOS when the system keychain is defaulted to. This change does not affect regular login users.</p>

<h2 id="enterprisehomebrewtap">Enterprise Homebrew tap</h2>

<p>The new Passenger Enterprise Homebrew tap is <a href="https://www.phusionpassenger.com/library/install/standalone/install/enterprise/osx/">super easy</a> to use. Simply run:  </p>

<pre><code>brew tap phusion/passenger  
</code></pre>

<p>You can then install Passenger Enterprise with one of the commands below:  </p>

<pre><code>brew install passenger-enterprise  
# -OR-
brew install nginx-passenger-enterprise  
</code></pre>

<p>You will be asked for your download token when installing Passenger Enterprise for the first time using this tap. The token is cached for use in subsequent installs.</p>

<p>The tap makes it possible for us to provide a Homebrew formula for Passenger Enterprise, which requires authentication to fetch the source code. It also allows us to provide an Nginx formula that depends on Passenger Enterprise instead of Passenger Open Source.</p>

<p>As with all Passenger installation methods, installing Passenger Enterprise conflicts with Passenger Open Source, so you will need to <code>brew uninstall passenger nginx</code> before installing Passenger Enterprise this way.</p>

<h2 id="sslcertificatereplaced">SSL certificate replaced</h2>

<p>The certificate for <code>oss-binaries.phusionpassenger.com</code> has been replaced with a new one that is managed through <a href="https://letsencrypt.org">Let's Encrypt</a>. This is the primary domain where Passenger packages and binaries are hosted.</p>

<p>Older versions of Passenger (&lt; 5.0.22, &lt; 4.0.60) use a pinned version of the old certificate (in some cases) for downloading binaries, but they will gracefully switch to the Amazon S3 fallback domain instead.</p>

<h2 id="nonginxforbuiltinengine">No Nginx for builtin engine</h2>

<p>Passenger Standalone internally runs Nginx by default in order to provide a battle-hardened webserver front for applications. If there is already another server in front of Passenger that handles things like load balancing, slow client protection and static file caching, then it is possible to use the simpler and faster <a href="https://www.phusionpassenger.com/library/config/standalone/optimization/#switching-to-passenger-standalone-with-the-builtin-http-engine">builtin HTTP engine</a> of Passenger.</p>

<p>Though choosing the <code>builtin</code> engine disables the use of Nginx, Passenger would still try to download or compile Nginx (<a href="https://github.com/phusion/passenger/issues/1910">GH-1910</a>). This unnecessary dependency has been removed in 5.1.2.</p>

<h2 id="variousother">Various other</h2>

<ul>
<li>Fixes remaining false positives (logging) from the new Meteor cluster warning system. Closes <a href="https://github.com/phusion/passenger/issues/1905">GH-1905</a>.</li>
<li>Improve <code>passenger-memory-stats</code> to include JRuby processes that fail to rename as expected. Closes <a href="https://github.com/phusion/passenger/issues/1878">GH-1878</a>.</li>
<li>Improve curl check for <code>passenger-install-xxxx-module</code> scripts to catch (very old) curl versions that won't compile against 5.1+.</li>
<li>[Standalone] Fixes <code>--nginx-tarball</code> option of <code>passenger start</code> and <code>passenger-config install-standalone-runtime</code> (wasn't working). Also verifies that <code>--nginx-version</code> is explicitly specified as it should be.</li>
</ul>

<h2 id="installing512">Installing 5.1.2</h2>

<p>Please see the <a href="https://www.phusionpassenger.com/library/install/">installation guide</a>.</p>

<h2 id="upgradingto512">Upgrading to 5.1.2</h2>

<p>We strongly advise staying up to date with the latest version.</p>

<p><strong>See also the upgrade notes below!</strong></p>

<table class="passenger-install-table">  
  <tr>
    <td><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=osx"><img src="https://blog.phusion.nl/wp-content/uploads/2013/10/apple-small.png" alt="Passenger 5.1.2: minor fixes + Homebrew tap"><br><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=osx">OS X</a></a></td>
    <td><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=debian_ubuntu"><img src="https://blog.phusion.nl/wp-content/uploads/2013/10/debian-small.png" alt="Passenger 5.1.2: minor fixes + Homebrew tap"><br><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=debian_ubuntu">Debian</a></a></td>
    <td><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=debian_ubuntu"><img src="https://blog.phusion.nl/wp-content/uploads/2013/10/ubuntu-small.png" alt="Passenger 5.1.2: minor fixes + Homebrew tap"><br><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=debian_ubuntu">Ubuntu</a></a></td>
    <td><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=heroku"><img src="https://blog.phusion.nl/wp-content/uploads/2013/10/heroku-small.png" alt="Passenger 5.1.2: minor fixes + Homebrew tap"></a><br><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=heroku">Heroku</a></td>
  </tr>
  <tr>
    <td><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=redhat_centos"><img src="https://blog.phusion.nl/content/images/2015/05/redhat-small.png" alt="Passenger 5.1.2: minor fixes + Homebrew tap"><br><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=redhat_centos">Red Hat</a></a></td>
    <td><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=redhat_centos"><img src="https://blog.phusion.nl/content/images/2015/05/centos-small.png" alt="Passenger 5.1.2: minor fixes + Homebrew tap"><br><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=redhat_centos">CentOS</a></a></td>
    <td><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=rubygems"><img src="https://blog.phusion.nl/wp-content/uploads/2013/10/rubygems-small.png" alt="Passenger 5.1.2: minor fixes + Homebrew tap"></a><br><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=rubygems">Ruby gem</a></td>
    <td><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=source_tarball"><img src="https://blog.phusion.nl/wp-content/uploads/2013/10/tarball-small.png" alt="Passenger 5.1.2: minor fixes + Homebrew tap"></a><br><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=source_tarball">Tarball</a></td>
  </tr>
  <tr>
    <td><a href="https://github.com/phusion/passenger-docker#upgrading_passenger"><img src="https://blog.phusion.nl/content/images/2015/03/docker-small.png" alt="Passenger 5.1.2: minor fixes + Homebrew tap"></a><br><a href="https://github.com/phusion/passenger-docker#upgrading_passenger">Docker</a></td>
  </tr>
</table>

<p>If you are upgrading from 4.x, please read <a href="https://www.phusionpassenger.com/library/install/migrating/">the 5.0 upgrade notes</a> to learn about potential upgrade caveats.</p>

<h3 id="downloadissuewitholdgemversion">Download issue with old <code>gem</code> version</h3>

<p>Old versions of <code>gem</code> (below 2.2.0, released in 2013) may fail to download the Passenger Enterprise gem from our rubygem hosting software (<a href="https://github.com/geminabox/geminabox">Gem in a box</a>).</p>

<pre><code>ERROR: Could not find a valid gem 'passenger-enterprise-server' (= 5.1.2), here is why:  
 Unable to download data from https://..@www.phusionpassenger.com/enterprise_gems/
 - bad response Unauthorized 401 
</code></pre>

<p>If this happens, please upgrade to a newer version of gem:</p>

<pre><code>gem install rubygems-update; update_rubygems  
</code></pre>

<h3 id="specialnotesaboutcapistranopassenger">Special notes about capistrano-passenger</h3>

<p>If you are using Capistrano and <a href="https://github.com/capistrano/passenger">capistrano-passenger</a>, then it may fail with this error:</p>

<pre><code>SSHKit::Runner::ExecuteError: Exception while executing as user@99.99.99.99: undefined method `[]' for nil:NilClass

NoMethodError: undefined method `[]' for nil:NilClass

Tasks: TOP =&gt; passenger:restart
</code></pre>

<p>This is due to an incompatibility in capistrano-passenger with Passenger 5.0.22 and later. Please upgrade capistrano-passenger to 0.2.0 or later.</p>

<h2 id="final">Final</h2>

<p><img src="https://blog.phusion.nl/wp-content/uploads/2013/07/github-27d4e972e8e327134061bb88b4bd139e.png" alt="Passenger 5.1.2: minor fixes + Homebrew tap" width="80" height="80" class="alignnone size-full wp-image-3823 float-right" style="margin-top: -1em; display: none"></p>

<p>Phusion Passenger's core is open source. Please <a href="https://github.com/phusion/passenger">fork or watch us on Github.</a> :)</p>

<p><img width="128" src="https://blog.phusion.nl/content/images/2016/12/logo.svg" alt="Passenger 5.1.2: minor fixes + Homebrew tap"></p>

<p><strong><a href="https://www.phusionpassenger.com">Passenger</a></strong> ensures that your Ruby, Python, Node.js and Meteor apps, microservices, and APIs are served with outstanding reliability, performance and control. For additional features and premium support, check out the
<a href="https://www.phusionpassenger.com/enterprise">enterprise edition</a>.</p>

<iframe src="https://ghbtns.com/github-btn.html?user=phusion&amp;repo=passenger&type=watch&amp;size=large&amp;count=true" allowtransparency="true" frameborder="0" scrolling="0" width="170" height="30" style="display: inline"></iframe><iframe src="https://ghbtns.com/github-btn.html?user=phusion&amp;repo=passenger&amp;type=fork&amp;size=large&amp;count=true" allowtransparency="true" frameborder="0" scrolling="0" width="170" height="30" style="display: inline"></iframe><iframe src="https://ghbtns.com/github-btn.html?user=phusion&amp;type=follow&amp;size=large&amp;count=true" allowtransparency="true" frameborder="0" scrolling="0" width="190" height="30" style="display: inline"></iframe>]]></content:encoded></item><item><title><![CDATA[Passenger 5.1: a new milestone in robustness, security and efficiency]]></title><description><![CDATA[<p>It’s been a little over a year-and-a-half since we released the first version of <a href="https://www.phusionpassenger.com/">Passenger</a> 5, the application server for Ruby, Python, Node.js and Meteor. It brought a large amount of <a href="https://blog.phusion.nl/2015/03/04/whats-new-in-passenger-5-part-1-performance-and-http-json-api/">major improvements</a>. </p>

<p>Since then we have introduced many more major improvements. To celebrate this fact, we bumped</p>]]></description><link>https://blog.phusion.nl/2017/01/10/passenger-5-1-1/</link><guid isPermaLink="false">1d06fc55-417c-4965-97a4-cffc3971bb3f</guid><category><![CDATA[Passenger]]></category><category><![CDATA[Passenger releases]]></category><category><![CDATA[Featured posts]]></category><dc:creator><![CDATA[Daniel Knoppel]]></dc:creator><pubDate>Tue, 10 Jan 2017 15:26:00 GMT</pubDate><media:content url="https://blog.phusion.nl/content/images/2017/01/2blog-header.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.phusion.nl/content/images/2017/01/2blog-header.jpg" alt="Passenger 5.1: a new milestone in robustness, security and efficiency"><p>It’s been a little over a year-and-a-half since we released the first version of <a href="https://www.phusionpassenger.com/">Passenger</a> 5, the application server for Ruby, Python, Node.js and Meteor. It brought a large amount of <a href="https://blog.phusion.nl/2015/03/04/whats-new-in-passenger-5-part-1-performance-and-http-json-api/">major improvements</a>. </p>

<p>Since then we have introduced many more major improvements. To celebrate this fact, we bumped the minor version number and are happy to announce version 5.1.1! It is the culmination of all the work that has gone into Passenger, with bugfixes, many big and small improvements, and is fully compatible with the 5.0.x line (no breaking changes).</p>

<p>The same period has also seen <a href="https://blog.phusion.nl/2015/03/12/passenger-5-0-4/">the</a> <a href="https://blog.phusion.nl/2016/06/20/camden-narzt-joins-phusion-as-its-first-north-american-based-software-engineer/">growth</a> of the Passenger team, as well as a significant expansion of the Passenger documentation with the <a href="https://blog.phusion.nl/2015/07/21/introducing-the-passenger-library-project/">introduction</a> of the <a href="https://www.phusionpassenger.com/library">Passenger Library</a>.</p>

<style>  
table.featuretable { border: 1px solid #f0f0f0; }  
table.featuretable td { line-height: 22px; font-size: 1.5rem;  }  
ul.rowul { margin: 0px; padding-left: 20px; }  
ul.rowul li { margin: 0px; padding: 0px }

.callout-header {
  text-align: center;
  margin: 3em 0 2em 0;
  color: #333;
}

.callout-header h3 {
  margin: 0.5em 0;
}

.callout-header .undertitle {
  margin: 0 2em;
  color: #555;
  font-style: italic;
}
</style>

<p><img src="https://blog.phusion.nl/content/images/2017/01/introdrawing.png" alt="Passenger 5.1: a new milestone in robustness, security and efficiency"></p>

<p>In this blog post we’re looking back at the improvements we’ve introduced in Passenger since 5.0.1. The regular description of changes since 5.0.30 can be found <a href="https://blog.phusion.nl/2017/01/10/passenger-5-1-1/#changesfrom5030to511">at the end</a>, and includes two notable security fixes.</p>

<p>In an upcoming blog post we will look to the future and describe some of the exciting ideas we have in store for this year, so stay tuned!</p>

<h2 id="aplethoraofimprovements">A plethora of improvements</h2>

<p>There are too many improvements to Passenger since version 5.0 to go into them all in-depth, so we've gathered and categorized them by how they help you to manage and run your application harder, better, faster, stronger.</p>

<div class="callout-header">  
<img src="https://blog.phusion.nl/content/images/2017/01/keep-the-service-going-1.png" alt="Passenger 5.1: a new milestone in robustness, security and efficiency">  
<h3>Minimizing and preventing down time</h3>  
<div class="undertitle">Passenger has a lot of features for minimizing and preventing downtime in apps, such as rolling restarts and deployment error resistance.</div>  
</div>

<p>After 5.0.1 we’ve further improved the robustness in challenging situations like running out of memory or crashing application code. Rolling restarts were changed to maintain an even more resource-friendly load profile.</p>

<table class="featuretable">

<tr><td><i>Improvements after 5.0.1</i></td></tr>

<tr><td><b>Protection from response body processing crashes</b><br>  
Prevent the connection from stalling if the Ruby handler crashes while processing a Rack response body.</td></tr>

<tr><td><b>Resource friendly rolling restart</b> (<mark>Enterprise</mark>)<br>  
Passenger Enterprise avoids system overload from processes that use a lot of resources during shutdown by waiting for total process exit before rolling restarting the next process.</td></tr>

<tr><td><b>Robust log file reopening</b><br>  
Passenger processes now avoid failure to open the log file by re-inheriting from the Watchdog when <code>passenger-config reopen-logs</code> is called.</td></tr>

<tr><td><b>Robustness when out-of-memory</b><br>  
Improved out-of-memory detection in various subroutines.</td></tr>

<tr><td><b>Clock time-stepping robustness</b><br>  
Improved Passenger Core robustness against significant system wallclock changes while Passenger is running, by switching to a monotonic clock.</td></tr>

</table>

<div class="callout-header">  
<img src="https://blog.phusion.nl/content/images/2017/01/keep-the-bad-guys-out-1.png" alt="Passenger 5.1: a new milestone in robustness, security and efficiency">  
<h3>Secure defaults and defense in depth</h3>  
<div class="undertitle">Passenger does the heavy lifting to provide a secure platform from which you can serve your app with confidence.</div>  
</div>

<p>In this category one of the most notable improvements after 5.0.1 is the new <a href="https://www.phusionpassenger.com/library/indepth/security_update_check.html">Passenger security update check</a>. This (optional) feature allows users to be notified in case there are any important Passenger-related security updates so that they can take timely action to keep their systems secure.</p>

<p>Security is high on our priority list and we constantly watch for potential vulnerabilities. For example, when Rails 5 was released, we did a number of tests that revealed a <a href="https://blog.phusion.nl/2016/12/21/actioncable-under-stress-protecting-your-application-against-slow-clients-using-passenger/">DoS vulnerability</a>. Although Passenger’s design already protects users from this type of issue, we are happy the issue has been fixed in Rails.</p>

<table class="featuretable">

<tr><td><i>Improvements after 5.0.1</i></td></tr>

<tr><td><b>Passenger security update check</b><br>  
<a href="https://blog.phusion.nl/2017/01/10/passenger-5-1-1/”https://www.phusionpassenger.com/library/indepth/security_update_check.html”">Daily Passenger security update check</a> to log a warning if there is a newer Passenger version with important security fixes.</td></tr>

<tr><td><b>Administrative tools can be used without sudo</b><br>  
Admin commands like <code>passenger-status</code>, <code>passenger-config restart-app</code> can be run without sudo, and operate only on apps that are owned by admin command user.</td></tr>

<tr><td><b>Secure HTTP header support (Node.js)</b><br>  
Our new <a href="https://www.phusionpassenger.com/library/config/nginx/secure_http_headers/nodejs/">“Secure HTTP headers” mechanism</a> allows Passenger to send per-request information to the application that cannot be spoofed by the client. Supported in all modes.</td></tr>

<tr><td><b>CloudLinux LVE and CageFS integration</b><br>  
Users of Passenger + CloudLinux LVE and CageFS benefit from extra security checks and a new control option (<code>PassengerLveMinUid</code>). Contributor: Oleksiy Shchukin, CloudLinux Inc.</td></tr>

<tr><td><b>Secure error pages</b><br>  
<ul class="rowul">  
<li>New secure defaults for friendly error pages: <code>off</code> unless the environment is <code>development</code>.</li>  
<li>When friendly error pages are set to <code>off</code>, Passenger never displays any backtraces.</li>  
</ul>  
</td></tr>  
</table>

<table class="featuretable">  
<tr><td><i>Especially for the Nginx integration mode</i></td></tr>

<tr><td><b>Latest stable Nginx</b><br>  
Passenger packages include the latest Nginx stable version, so that you benefit from all the awesome improvements in Nginx as well. Currently this is Nginx 1.10.2 (versus 1.6.0 at the time of Passenger 5.0.1).</td></tr>

</table>

<div class="callout-header">  
<img src="https://blog.phusion.nl/content/images/2017/01/improve-operational-effeciency-1.png" alt="Passenger 5.1: a new milestone in robustness, security and efficiency">  
<h3>Faster &amp; more efficient resource use</h3>  
<div class="undertitle">Passenger’s design and relentless optimization enables developers and administrators to get the most performance out of their hardware.</div>  
</div>

<p>With a couple of new options, Passenger helps high-performance servers and applications shine even when under extremely demanding loads. Conditions on a single server such as hundreds of workers, 100K+ RPM with traffic bursts can be handled flawlessly. Another interesting option is that Node.js applications <a href="https://www.phusionpassenger.com/library/config/nginx/dynamic_scaling_vs_fixed_app_processes/nodejs/">can now be autoscaled</a>; similar to what was already possible for Ruby apps.</p>

<table class="featuretable">

<tr><td><i>Improvements after 5.0.1</i></td></tr>

<tr><td><b>Massive concurrency</b><br>  
Three new options to help configure extremely high concurrency: <code>socket_backlog</code>, <code>core_file_descriptor_ulimit</code> and <code>app_file_descriptor_ulimit</code>.</td></tr>

<tr><td><b>Modernized performance & scaling defaults</b><br>  
<ul class="rowul">  
<li>Speed up disk buffering and request handling with larger mbuf block size (512 to 4096).</li>  
<li>Handle higher concurrency by default with larger socket backlog size (1024 to 2048).</li></ul></td></tr>

<tr><td><b>Fast fail (Node.js, Meteor)</b><br>  
Passenger now signals Node.js and Meteor apps when the client has disconnected during a request so they can stop spending resources on the response.</td></tr>

<tr><td><b>Dynamic process scaling (Node.js, Meteor)</b><br>  
Node.js and Meteor apps can now benefit from <a href="https://www.phusionpassenger.com/library/config/nginx/dynamic_scaling_vs_fixed_app_processes/nodejs/">dynamic process scaling</a> with the new <code>force_max_concurrent_requests_per_process</code> option.</td></tr>

</table>

<div class="callout-header">  
<img src="https://blog.phusion.nl/content/images/2017/01/improve-development-efficiency-1.png" alt="Passenger 5.1: a new milestone in robustness, security and efficiency">  
<h3>Improve development efficiency</h3>  
<div class="undertitle">Passenger gives developers and administrators super powers so that they can do their jobs more efficiently.</div>  
</div>

<p>We’ve added a ton of improvements in this category, such as new options and tools for diagnostics, validation and troubleshooting of configurations, applications and connections (e.g. Websockets). Configuration ease and flexibility, as well as maintenance-friendliness have been improved in various ways, like the possibility to configure Passenger Standalone through environment variables or via a refactored configuration template. This makes Passenger integrate better than ever with Heroku, Docker and 12-factor principles.</p>

<p>There are also special improvements like support for the <a href="https://www.nginx.com/blog/dynamic-modules-nginx-1-9-11/">Nginx dynamic module system</a>, installation validation for Passenger + Apache and Docker-friendly logging for Passenger Standalone.</p>

<p>The list below shows the first few items, but you can expand it with the link below that to see all of the improvements.</p>

<table class="featuretable">

<tr><td><i>Improvements after 5.0.1</i></td></tr>

<tr><td><b>Analyzing stuck applications or websockets</b><br>  
<code>passenger-status --show=server</code> now reports <code>last_data_send_time</code> and <code>last_data_receive_time</code> which can be used to troubleshoot long-running requests (for example, to see if a websocket heartbeat is stuck).</td></tr>

<tr><td><b>Diagnostics for stuck processes</b> (<mark>Enterprise</mark>)<br>  
The <code><a href="https://blog.phusion.nl/2017/01/10/passenger-5-1-1/”https://www.phusionpassenger.com/library/indepth/hooks.html”">max_request_time_reached</a></code> hook allows you to run diagnostics on a process that that took too long to respond to a request.</td></tr>

<tr><td><b>Thread ID in logging</b> (<mark>Enterprise</mark>)<br>  
When running a Rails app in multithreaded mode, Rails logs are automatically tagged with the current thread number to distinguish logs generated by different threads.</td></tr>

<tr><td><b>Rails server integration</b><br>  
Passenger <a href="https://www.phusionpassenger.com/library/dev/ruby/rails_integration.html">can now be started with</a> <code>rails server</code> just like other Rails servers.</td></tr>

<tr><td><b>Minimum Kernel requirement lifted</b><br>  
RPM packages no longer require kernel 2.6.39 on RHEL 6 / CentOS 6, and are compatible with the latest SELinux changes.</td></tr>

<tr><td><b>Application restarting convenience & Capistrano</b><br>  
<code>passenger-config restart-app</code> received several improvements:  
<ul class="rowul">  
<li>parameter <code>.</code> can be used to restart the app in the current working directory.</li>  
<li>(Capistrano) new option <code>--ignore-passenger-not-running</code> that allows the command to exit without signaling an error if Passenger is not yet running, or none of the running apps belong to the invoking user.</li>  
<li>interactive menu allowing you to select the app to restart.</li></ul>  
</td></tr>

</table>

<div id="devops_hidden">  
<a href="https://blog.phusion.nl/2017/01/10/passenger-5-1-1/#devops_hidden" onclick="document.getElementById('devops_shown').style.display='block';document.getElementById('devops_hidden').style.display='none';return false;">expand 22 more items..</a><br>  
<br>  
</div>  

<div id="devops_shown" style="display:none">  
<a href="https://blog.phusion.nl/2017/01/10/passenger-5-1-1/#devops_shown" onclick="document.getElementById('devops_hidden').style.display='block';document.getElementById('devops_shown').style.display='none';return false;">(hide 22 items below)</a>

<table class="featuretable">

<tr><td><b>Load handling statistics</b><br>  
<code>passenger-status --show=server</code> now reports the speed at which new requests are accepted.</td></tr>

<tr><td><b>Error log improvements</b><br>  
<ul class="rowul">  
<li>More informative error message if a support binary is not found, plus resolution hint.</li>  
<li>Failed program name is logged rather than its command line (contributed by: paisleyrob).</li>  
<li>Logging output from app on startup can now be significantly longer.</li>  
<li>Passenger source code paths in logs are truncated to 3 characters for brevity.</li>  
</ul></td></tr>

<tr><td><b>Improved error page look</b><br>  
Revamped the visuals when failing to spawn an application (development & production mode), and Error ID is now also shown in production mode.

</td></tr><tr><td><b>Node.js & Meteor clustering troubleshooting</b><br>  
Passenger now reports when you try to use Node.js or Meteor clustering, and tries to continue with just a nonfunctional shim in place, so that if your code uses the clustering APIs your app may still work.</td></tr>

<tr><td><b>Automation via hooks</b><br>  
All hooks now set the <code>PASSENGER_HOOK_NAME</code> environment variable. This variable is set to the name of the hook that is being called.</td></tr>

<tr><td><b>API interface extension: force disconnection</b><br>  
There is now an API endpoint for force disconnecting a client: <code>passenger-config admin-command DELETE /server/<client name="">.json</client></code>.</td></tr>

<tr><td><b>Finding downloaded or compiled Passenger components</b><br>  
A new subcommand, <code>passenger-config about support-binaries-dir</code>, can be used in automation scripts.</td></tr>

</table>

<table class="featuretable">

<tr><td><i>Especially for the Standalone mode</i></td></tr>

<tr><td><b>Configuration from Environment variables</b><br>  
All command line options can now also be specified using environment variables, making Passenger significantly easier to use on Heroku or on systems that follow the 12-factor principle.</td></tr>

<tr><td><b>Docker-friendly logging</b><br>  
Passenger now accepts <code>/dev/stdout</code> and <code>/dev/stderr</code> as log file path (via <code>--log-file</code> or <code>Passengerfile.json</code>). This is especially useful in Docker containers.</td></tr>

<tr><td><b>Max request time option</b> (<mark>Enterprise</mark>)<br>  
The <code>--max-request-time</code> option is now supported by Passenger Standalone.</td></tr>

<tr><td><b>Sticky sessions and envvars for Mass deployment mode</b> (<mark>Enterprise</mark>)<br>  
The <code>sticky_sessions</code> and <code>envvars</code> options in <code>Passengerfile.json</code> are now also supported in mass deployment mode.</td></tr>

<tr><td><b>Configuration flexibility & convenience</b><br>  
<ul class="rowul">  
<li>The <code>passenger start</code> command now performs a sanity check on the internally generated Nginx configuration file and advises you accordingly when there is a problem.</li>  
<li><code>passenger start</code> accepts the <code>--debug-nginx-config</code> configuration option. This option allows you to view the Nginx configuration file that Passenger Standalone generates internally.</li>  
<li>Raw json environment variables can now be used in <code>Passengerfile.json</code>.</li>  
<li>Unsupported configuration options set in <code>Passengerfile.json</code> trigger a warning.</li></ul></td></tr>

<tr><td><b>Maintenance-friendly configuration template</b><br>  
The Nginx configuration template has been cleaned up. It is significantly easier to edit without breaking compatibility with future versions.</td></tr>

<tr><td><b>New command line commands to match the power of the config template</b><br>  
The following options from the Nginx configuration template can now also be passed directly to <code>passenger start</code>:<br>  
<code>--pool-idle-time</code>, <code>--max-preloader-idle-time</code>, <code>--max-requests</code>, <code>--max-request-queue-size</code>, <code>--memory-limit</code>, <code>--ruby</code>, <code>--nodejs</code> and <code>--python</code>.  
</td></tr>

<tr><td><b>Non-interactive mode</b><br>  
The new <code>--auto</code> parameter suppresses prompts for running non-interactively.</td></tr>

<tr><td><b>RealIP module made available when using the Nginx engine (default)</b></td></tr>

<tr><td><b>Relative path support</b><br>  
Support was added for relative values for the <code>pid_file</code> and <code>log_file</code> options in <code>Passengerfile.json</code>.</td></tr>

</table>

<table class="featuretable">

<tr><td><i>Especially for the Nginx integration mode</i></td></tr>

<tr><td><b>Dynamic module support</b><br>  
Passenger can now be compiled as an Nginx dynamic module. Contributor: Ruslan Ermilov, NGINX Inc.</td></tr>

<tr><td><b>Index without try_files</b><br>  
The Nginx module now looks for <code>index.html</code> if the path ends in / so that it works intuitively, without needing to use <code>try_files</code>.</td></tr>

<tr><td><b>Out-of-the-box support for escaped slashes in URI</b><br>  
Passenger now passes to the application the raw URI as sent by the client, as long as Nginx didn't modify the URI (e.g. as part of rewrite rules). This means that escaped slashes (%2F) in the URI now work correctly and out-of-the-box as long as there are no applicable rewrite rules.</td></tr>

<tr><td><b>Very long request support</b><br>  
Introduces the <code>passenger_read_timeout</code> option for rare cases when server needs more than the default 10 minute timeout. Contributed by pkmiec.</td></tr>

</table>

<table class="featuretable">  
<tr><td><i>Especially for the Apache integration mode</i></td></tr>

<tr><td><b>Autodetect common configuration problems</b><br>  
The installer now validates your Apache configuration file to check for common problems. The validator can also be accessed separately by running <code>passenger-config validate-install --validate-apache2</code>.</td></tr>

</table>  
</div>

<div class="callout-header">  
<img src="https://blog.phusion.nl/content/images/2017/01/stay-ahead-of-the-curve-1.png" alt="Passenger 5.1: a new milestone in robustness, security and efficiency">  
<h3>Staying ahead of the curve</h3>  
<div class="undertitle">Passenger embraces modern technologies and multiple platforms to prevent lock-in and to stay ahead of the curve.</div>  
</div>

<p>As technology moves forward through time, Passenger keeps up. For example, you can use our Passenger APT/RPM packages for the latest couple of versions of Debian, Ubuntu, Red Hat Enterprise Linux and CentOS; which includes the recently released Ubuntu 16.10 and RHEL 7.3. Passenger also supports the newly released JRuby 9.0.0.0 as well as Rails 5 + Action Cable, and a number of smaller improvements like support for IPv6 across all the different integration modes.</p>

<table class="featuretable">  
<tr><td><i>Improvements after 5.0.1</i></td></tr>

<tr><td><b>Packages for Debian, Ubuntu, CentOS, Red Hat Enterprise Linux</b><br>  
<ul class="rowul">  
<li>Debian 8 "Jessie"</li>  
<li>Ubuntu 15.04 "Vivid Vervet", Ubuntu 16.04 “Xenial Xerus”, Ubuntu 16.10 “Yakkety Yak”</li>  
<li>CentOS 6, 7</li>  
<li>RHEL 6, 7</li>  
</ul></td></tr>

<tr><td><b>RHEL 7.3 / SELinux compatibility</b><br>  
The RPM package builder was updated to support (breaking) SELinux changes in RHEL 7.3.</td></tr>

<tr><td><b>Passing settings to non-bundled Meteor apps</b><br>  
Meteor’s new way of specifying settings for (non-bundled) apps is now supported.</td></tr>

<tr><td><b>Support SHA256 digests for the Rails asset pipeline</b><br>  
This means that software like the new Sprockets 3.x works seamlessly.</td></tr>

<tr><td><b>Platform build support</b><br>  
<ul class="rowul">  
<li>OS X 10.11 "El Capitan", macOS 10.12 "Sierra"</li>  
<li>Debian GNU/kFreeBSD (contributor: stevenc99)</li>  
<li>IBM power 8 (libev <code>config.sub</code> and <code>config.guess</code> updated)</li>  
</ul></td></tr>

<tr><td><b>Support added for JRuby 9.0.0.0</b></td></tr>

<tr><td><b>Node.js graceful shutdown</b><br>  
Passenger now calls <code>process.emit('message', 'shutdown')</code> before it shuts down an application process,  allowing some compatibility with the Cluster module API.</td></tr>

</table>

<div id="future_hidden">  
<a href="https://blog.phusion.nl/2017/01/10/passenger-5-1-1/#future_hidden" onclick="document.getElementById('future_shown').style.display='block';document.getElementById('future_hidden').style.display='none';return false;">expand 8 more items..</a><br>  
<br>  
</div>  

<div id="future_shown" style="display:none">  
<a href="https://blog.phusion.nl/2017/01/10/passenger-5-1-1/#future_shown" onclick="document.getElementById('future_hidden').style.display='block';document.getElementById('future_shown').style.display='none';return false;">(hide 8 items below)</a>

<table class="featuretable">

<tr><td><b>Websocket graceful shutdown</b><br>  
With <code>abort_websockets_on_process_shutdown off</code>, applications can cleanly close their websockets when they are being shut down, reducing the number of websocket breaks they need to cope with.</td></tr>

<tr><td><b>Foreman graceful shutdown</b><br>  
Signal catchers during shutdown allow clean shutdown in Foreman.</td></tr>

<tr><td><b>HttpV2, realip, addition module</b><br>  
<code>passenger-install-nginx-module</code> and the standalone compiler now add the http v2, realip and addition module flags for Nginx (just like the APT/RPM/autobuilder already had).</td></tr>

<tr><td><b>Support body.rewind with compression</b><br>  
Supports seek() such that body.rewind works when using Rack middleware that uses Zlib::GzipReader, such as for compressed requests.</td></tr>

<tr><td><b>XHTML mime type update</b><br>  
The mime type for serving static XHTML files was changed to be recognized by desktop browsers.</td></tr>

</table>

<table class="featuretable">  
<tr><td><i>Especially for the Standalone mode</i></td></tr>

<tr><td><b>Simple Ruby Websocket configuration</b><br>  
Configure Ruby app Websocket urls with a single option: <code>--unlimited-concurrency-path</code></td></tr>

<tr><td><b>IPv6 support</b><br>  
The ‘builtin’ engine, recommended engine for reverse proxy setups, now supports IPv6. The ‘nginx’ engine enables ipv6 support by default.</td></tr>

<tr><td><b>Support application prestarting ('builtin' engine)</b><br>  
Applications can be prestarted using HTTP and HTTPS when using the ‘builtin’ engine.</td></tr>  
</table>  
</div>

<p><img src="https://blog.phusion.nl/content/images/2017/01/outrodrawing.png" alt="Passenger 5.1: a new milestone in robustness, security and efficiency"></p>

<h2 id="changesfrom5030to511">Changes from 5.0.30 to 5.1.1</h2>

<p>For your convenience we've listed the improvements and bugfixes specifically since version 5.0.30 below. This includes two notable vulnerabilities that were addressed in 5.1.0. Version 5.1.0 and 5.1.1 were released in short succession due to a fix for Rails 5.0.1 Action Cable, so we’re covering them both in one blogpost. </p>

<h3 id="cve20161247">CVE-2016-1247</h3>

<p>On the 25th of October, an issue with the default permissions in the upstream Nginx APT package was made <a href="https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-1247">public</a>. It allows local users with access to the web server user account to gain root privileges via a symlink attack on the error log. The fix has been applied to the Phusion Nginx APT-package.</p>

<h3 id="predictabletmpfilepathvulnerability">Predictable tmp File Path Vulnerability</h3>

<p>On the 1st of November, Jeremy Evans reported a file overwrite vulnerability caused by a predictable temporary file being written by <code>passenger-install-nginx-module</code>. With access to the system, a user could plant a symlink in /tmp that resulted in a chosen-file overwrite attempt whenever <code>passenger-install-nginx-module</code> was run, using the access rights of the executing user, potentially even with chosen content. Files written to the tmp directory now have randomized path components to fix this vulnerability.</p>

<p>Update: this vulnerability was assigned <a href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-10345">CVE-2016-10345</a>.</p>

<h3 id="otherbugfixes">Other bugfixes</h3>

<table class="featuretable">

<tr><td><b>Passenger 5.1.0</b></td></tr>

<tr><td>Fixes a file overwrite vulnerability caused by a predictable temporary file being written by <code>passenger-install-nginx-module</code>. Thanks to Jeremy Evans for reporting this.</td></tr>

<tr><td>Fixes permissions issue on Linux when setting OOM score after lowering privileges. Closes <a href="https://github.com/phusion/passenger/issues/1858">GH-1858</a>.</td></tr>

<tr><td>Fixes unaligned memory access in base64 decoder on platforms that have strict aliasing requirements (non x86/x86_64). Closes <a href="https://github.com/phusion/passenger/issues/1646">GH-1646</a>.</td></tr>

<tr><td><code>passenger-install-apache-module</code> now suggests the correct apache package on Ubuntu Xenial. Closes <a href="https://github.com/phusion/passenger/issues/1884">GH-1884</a>.</td></tr>

<tr><td>Fixes compilation on Linux when a non-glibc C library is in use. Closes <a href="https://github.com/phusion/passenger/issues/1870">GH-1870</a>.</td></tr>

<tr><td>Fixes an issue where passenger-config couldn't restart an app if the TMPDIR variable was set to /tmp</td></tr>  
</table>

<table class="featuretable">

<tr><td><i>Especially for the Nginx mode</i></td></tr>

<tr><td>Updates to APT package builder (Debian & Ubuntu) with fix for www-data to root privilege escalation via log file handling (CVE-2016-1247/USN-3114-1).</td></tr>

<tr><td>Updates to RPM package builder (CentOS & RHEL) with fix for 1.10.x system nginx package overriding the nginx from the Passenger repo. Closes <a href="https://github.com/phusion/passenger/issues/1895">GH-1895</a>.</td></tr>  
</table>  

<table class="featuretable">  
<tr><td><i>Especially for the Apache mode</i></td></tr>  
<tr><td>Fixes PassengerShowVersionInHeader option. Thanks to Sebastian Welther for contributing this.</td></tr>  
</table>

<table class="featuretable">

<tr><td><i>Especially for the Standalone mode</i></td></tr>

<tr><td>The TempDirToucher will now spend most of its time with reduced privileges, except when it's actively touching files. This allows it to be killed when Passenger is quit in most circumstances. Closes <a href="https://github.com/phusion/passenger/issues/1678">GH-1678</a>.</td></tr>

<tr><td>Fixes starting Passenger as a non-extant user. Closes <a href="https://github.com/phusion/passenger/issues/1849">GH-1849</a>.</td></tr>  
</table>

<table class="featuretable">

<tr><td><b>Passenger 5.1.1</b></td></tr>

<tr><td>The precompiled version of the PassengerAgent binary (used for e.g. gem installs) now configures (statically linked) libcurl with system keystore, so that the new security update check can successfully validate certs.</td></tr>

<tr><td>Fixes some false positives (logging) from the new Node and Meteor cluster warning system. Logging is less repetitive and has extra debug info. Closes <a href="https://github.com/phusion/passenger/issues/1905">GH-1905</a>.</td></tr>

<tr><td>Updates the upload-progress module in the Nginx Debian package. The module version that we linked against in 5.1.0 was 0.9.2, but due to a bug in that version the module didn't work.</td></tr>  
</table>

<table class="featuretable">

<tr><td><i>Especially for Passenger Enterprise</i></td></tr>

<tr><td>Add missing flying-passenger integration mode to security update check.</td></tr>  
</table>

<table class="featuretable">

<tr><td><i>Especially for the Apache mode</i></td></tr>

<tr><td>Introduces a small delay to prevent running the Security Update Checker twice at startup.</td></tr>  
</table>

<h3 id="improvements">Improvements</h3>

<table class="featuretable">  
<tr><td><b>Passenger 5.1.0</b></td></tr>  
<tr><td>Introduces daily Passenger security update check to warn (error log) if there are newer Passenger versions with important security fixes (describing what was discovered, what is affected, which version has the fix).</td></tr>  
<tr><td>Passenger now reports when you try to use Node.js or Meteor clustering, and tries to continue with just a nonfunctional shim in place, so that if your code uses the clustering APIs your app may still work.</td></tr>  
<tr><td>Improved look of the error pages for failing to spawn an application (development & production mode), and Error ID is now also shown in production mode.</td></tr>  
<tr><td>Ubuntu 16.10 (Yakkety) support.</td></tr>  
<tr><td><code>passenger-install-nginx-module</code> and the standalone compiler now add the http v2, realip and addition module flags for Nginx (just like the APT/RPM/autobuilder already had). Closes <a href="https://github.com/phusion/passenger/issues/1788">GH-1788</a>.</td></tr>  
<tr><td>RPM package builder now compatible with (breaking) SELinux change in RHEL 7.3.</td></tr>  
<tr><td>RPM packages no longer require kernel 2.6.39 on RHEL 6 / CentOS 6, and are compatible with SELinux changes.</td></tr>  
<tr><td>Updates libev config.sub and config.guess to support newer platforms such as the IBM power 8.</td></tr>  
<tr><td>Upgrades union_station_hooks_core to version 2.1.2.</td></tr>  
</table>  

<table class="featuretable">  
<tr><td><i>Especially for Passenger Enterprise</i></td></tr>  
<tr><td>When running a Rails app in multithreaded mode, Passenger Enterprise automatically tags Rails logs with the current thread number. This makes it possible to distinguish logs generated by different threads.</td></tr>  
</table>  

<table class="featuretable">  
<tr><td><i>Especially for the Nginx mode</i></td></tr>  
<tr><td>The preferred Nginx version is now 1.10.2 (previously 1.10.1).</td></tr>  
</table>  

<table class="featuretable">  
<tr><td><i>Especially for the Standalone mode</i></td></tr>  
<tr><td>Allows raw json envvars in Passengerfile.json. Closes <a href="https://github.com/phusion/passenger/issues/1837">GH-1837</a>.</td></tr>  
<tr><td>Enable ipv6 support by default in builtin nginx. Closes <a href="https://github.com/phusion/passenger/issues/1873">GH-1873</a>.</td></tr>  
<tr><td>Make the <code>max_requests</code> option available on the command line as well.</td></tr>  
</table>

<table class="featuretable">  
<tr><td><b>Passenger 5.1.1</b></td></tr>  
<tr><td>The security update check now reports whether libcurl + SSL backend are statically linked to Passenger, in which case the check also needs to warn about relevant OpenSSL vulnerabilities in the linked library.</td></tr>  
<tr><td>Increases the allowed line lengths emitted by apps at startup.</td></tr>  
<tr><td>Adds support for the unary 'not' operator in the Union Station filter language.</td></tr>  
<tr><td>Fixes support for Rails 5.0.1 Action Cable. Specifically, we now support the <code>options</code> argument in the <code>write_nonblock</code> method in hijacked Rack IO sockets.</td></tr>  
</table>

<h2 id="installing511">Installing 5.1.1</h2>

<p>Please see the <a href="https://www.phusionpassenger.com/library/install/">installation guide</a>.</p>

<h2 id="upgradingto511">Upgrading to 5.1.1</h2>

<p>We strongly advise staying up to date with the latest version.</p>

<table class="passenger-install-table">  
  <tr>
    <td><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=osx"><img src="https://blog.phusion.nl/wp-content/uploads/2013/10/apple-small.png" alt="Passenger 5.1: a new milestone in robustness, security and efficiency"><br><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=osx">macOS</a></a></td>
    <td><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=debian_ubuntu"><img src="https://blog.phusion.nl/wp-content/uploads/2013/10/debian-small.png" alt="Passenger 5.1: a new milestone in robustness, security and efficiency"><br><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=debian_ubuntu">Debian</a></a></td>
    <td><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=debian_ubuntu"><img src="https://blog.phusion.nl/wp-content/uploads/2013/10/ubuntu-small.png" alt="Passenger 5.1: a new milestone in robustness, security and efficiency"><br><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=debian_ubuntu">Ubuntu</a></a></td>
    <td><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=heroku"><img src="https://blog.phusion.nl/wp-content/uploads/2013/10/heroku-small.png" alt="Passenger 5.1: a new milestone in robustness, security and efficiency"></a><br><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=heroku">Heroku</a></td>
  </tr>
  <tr>
    <td><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=redhat_centos"><img src="https://blog.phusion.nl/content/images/2015/05/redhat-small.png" alt="Passenger 5.1: a new milestone in robustness, security and efficiency"><br><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=redhat_centos">Red Hat</a></a></td>
    <td><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=redhat_centos"><img src="https://blog.phusion.nl/content/images/2015/05/centos-small.png" alt="Passenger 5.1: a new milestone in robustness, security and efficiency"><br><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=redhat_centos">CentOS</a></a></td>
    <td><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=rubygems"><img src="https://blog.phusion.nl/wp-content/uploads/2013/10/rubygems-small.png" alt="Passenger 5.1: a new milestone in robustness, security and efficiency"></a><br><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=rubygems">Ruby gem</a></td>
    <td><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=source_tarball"><img src="https://blog.phusion.nl/wp-content/uploads/2013/10/tarball-small.png" alt="Passenger 5.1: a new milestone in robustness, security and efficiency"></a><br><a href="https://www.phusionpassenger.com/library/install/upgrade/?a=source_tarball">Tarball</a></td>
  </tr>
  <tr>
    <td><a href="https://github.com/phusion/passenger-docker#upgrading_passenger"><img src="https://blog.phusion.nl/content/images/2015/03/docker-small.png" alt="Passenger 5.1: a new milestone in robustness, security and efficiency"></a><br><a href="https://github.com/phusion/passenger-docker#upgrading_passenger">Docker</a></td>
  </tr>
</table>

<h3 id="upgradenotes">Upgrade notes</h3>

<ul>
<li><p>If you are upgrading from version 4, please see <a href="https://www.phusionpassenger.com/library/install/migrating/">the Passenger 5 upgrade notes</a> for potential caveats.</p></li>
<li><p>If you are getting a download error during a <code>gem install</code>, ensure you have a version of <code>gem</code> >= 2.2.0 (2013), for instance by running <code>gem install rubygems-update; update_rubygems</code>.</p></li>
<li><p>If you are using Capistrano and <a href="https://github.com/capistrano/passenger">capistrano-passenger</a>, please ensure that capistrano-passenger is upgraded to 0.2.0 or newer to avoid "NoMethodError: undefined method `[]' for nil:NilClass".</p></li>
</ul>

<h2 id="final">Final</h2>

<p><img src="https://blog.phusion.nl/wp-content/uploads/2013/07/github-27d4e972e8e327134061bb88b4bd139e.png" alt="Passenger 5.1: a new milestone in robustness, security and efficiency" width="80" height="80" class="alignnone size-full wp-image-3823 float-right" style="margin-top: -1em; display: none"></p>

<p>Passenger's core is open source. Please <a href="https://github.com/phusion/passenger">fork or watch us on Github.</a> :)</p>

<p><img width="128" src="https://blog.phusion.nl/content/images/2016/12/logo.svg" alt="Passenger 5.1: a new milestone in robustness, security and efficiency"></p>

<p><strong><a href="https://www.phusionpassenger.com">Passenger</a></strong> ensures that your Ruby, Python, Node.js and Meteor apps, microservices, and APIs are served with outstanding reliability, performance and control. For additional features and premium support, check out the
<a href="https://www.phusionpassenger.com/enterprise">enterprise edition</a>.</p>

<iframe src="https://ghbtns.com/github-btn.html?user=phusion&amp;repo=passenger&type=watch&amp;size=large&amp;count=true" allowtransparency="true" frameborder="0" scrolling="0" width="170" height="30" style="display: inline"></iframe><iframe src="https://ghbtns.com/github-btn.html?user=phusion&amp;repo=passenger&amp;type=fork&amp;size=large&amp;count=true" allowtransparency="true" frameborder="0" scrolling="0" width="170" height="30" style="display: inline"></iframe><iframe src="https://ghbtns.com/github-btn.html?user=phusion&amp;type=follow&amp;size=large&amp;count=true" allowtransparency="true" frameborder="0" scrolling="0" width="190" height="30" style="display: inline"></iframe>]]></content:encoded></item><item><title><![CDATA[ActionCable under stress: Finding a DoS vulnerability in Rails 5 WebSockets Apps]]></title><description><![CDATA[<p>In this article we will show you how Rails 5.0.0 ActionCable applications on Puma, the new default Rails app server, might be exposed to denial of service by slow clients. We will be using the OS X network shaping tools to simulate an attack, revealing the vulnerability.</p>

<p>In</p>]]></description><link>https://blog.phusion.nl/2016/12/21/actioncable-under-stress-protecting-your-application-against-slow-clients-using-passenger/</link><guid isPermaLink="false">dc18516e-40a1-4d30-9d43-7a738a6957bb</guid><category><![CDATA[Programming]]></category><category><![CDATA[Ruby on Rails]]></category><category><![CDATA[Action Cable]]></category><category><![CDATA[WebSockets]]></category><category><![CDATA[Ruby]]></category><category><![CDATA[Security]]></category><category><![CDATA[Featured posts]]></category><dc:creator><![CDATA[Tinco Andringa]]></dc:creator><pubDate>Wed, 21 Dec 2016 10:14:18 GMT</pubDate><media:content url="https://blog.phusion.nl/content/images/2016/07/Screen-Shot-2016-07-07-at-12-01-11-1.png" medium="image"/><content:encoded><![CDATA[<img src="https://blog.phusion.nl/content/images/2016/07/Screen-Shot-2016-07-07-at-12-01-11-1.png" alt="ActionCable under stress: Finding a DoS vulnerability in Rails 5 WebSockets Apps"><p>In this article we will show you how Rails 5.0.0 ActionCable applications on Puma, the new default Rails app server, might be exposed to denial of service by slow clients. We will be using the OS X network shaping tools to simulate an attack, revealing the vulnerability.</p>

<p>In our previous ActionCable article we talked about how we <a href="https://blog.phusion.nl/2016/07/07/actioncable-under-stress-p1/">stress tested ActionCable</a> and found and solved a couple of issues. Those issues have since been fixed and the fixes have been merged into Rails. In this article we report on another issue that we have found as a result of our stress testing efforts.</p>

<p>A fix for the issue we found was <a href="https://github.com/rails/rails/pull/26646">merged</a> into Rails a couple of months ago and was recently released as part of Rails 5.0.1. Passenger users have never been affected by this issue.</p>

<h2 id="whatareslowclientsandhowcantheycausedenialofservice">What are slow clients and how can they cause Denial of Service?</h2>

<p>The next few paragraphs will explain the basic theory and implications of slow clients. If you are already familiar with the slow client problem and how it is mitigated you can skip this section and scroll down to "Testing whether ActionCable is protected against slow clients". In that section we explain how we simulated an attack against Rails on both Puma and Passenger and found that applications on just Puma are vulnerable to DoS by slow clients.</p>

<h3 id="thetheorybehindslowclients">The theory behind slow clients</h3>

<p><img src="https://blog.phusion.nl/content/images/2016/10/turtle4.jpg" alt="ActionCable under stress: Finding a DoS vulnerability in Rails 5 WebSockets Apps"></p>

<p>Slow clients are users of your web application that are on an internet connection that has low bandwidth. They might be connecting with their cell phone, or from a remote location or from an area that simply has bad internet connectivity. They might also be malicious attackers who deliberately limit their bandwidth to bring down your application.</p>

<p>There are two aspects of slow clients that can block your application. Both have to be dealt with in order to ensure reliable service; not just to the slow clients, but to all users of your application, slow or fast. Slow clients <em>send</em> their data slowly, and they <em>receive</em> their data slowly.</p>

<p>This means that in a naively written web application a thread or process that is servicing a request might spend seconds or even minutes receiving data, before it even has a chance to perform business logic or query a database. Then when it has finished building its response it might spend seconds or minutes again sending that response to the client.</p>

<h3 id="practicalimpactofslowclients">Practical impact of slow clients</h3>

<p><img src="https://blog.phusion.nl/content/images/2016/12/Blocked-request-queue.png" alt="ActionCable under stress: Finding a DoS vulnerability in Rails 5 WebSockets Apps"></p>

<p>Most Ruby application servers utilize a synchronous request/response I/O model with multiple worker processes and/or worker threads, so they are (partially) susceptible to this issue.</p>

<p>A worst-case scenario looks like this: imagine that your application server is configured to have 100 worker processes, designed to process thousands of requests per second. Now imagine a single attacker. Sending just a hundred severely bandwidth limited requests. As each of your 100 worker processes encounters a request from the attacker it is delayed for minutes, causing other requests to queue up. </p>

<p>Eventually all your processes will be busy taking minutes servicing just a single attacker request, and tens of thousands requests are queued up or dropped. A more persistent attacker might delay your application indefinitely using only minimal resources.</p>

<p>Threads mitigate this problem somewhat, as they are much less costly than processes, and so you can have more of them, but the basic problem still remains. The attacker will simply have to perform more of those cheap slow requests.</p>

<h3 id="mitigationviaeventediobufferingsystem">Mitigation via evented I/O buffering system</h3>

<p><img src="https://blog.phusion.nl/content/images/2016/12/Buffered-requests-1.png" alt="ActionCable under stress: Finding a DoS vulnerability in Rails 5 WebSockets Apps"></p>

<p>In practice, Ruby application servers are already well-protected against slow clients on the <em>receiving</em> side by using an <em>evented I/O buffering system</em> that can handle a much larger I/O concurrency.</p>

<p>How do various Ruby application servers utilize an evented I/O buffering system?</p>

<ul>
<li>Unicorn is typically deployed together with Nginx. Nginx uses evented I/O and acts a buffering reverse proxy. It protects against both slowly-sending and slowly-receiving clients.</li>
<li>Puma has a built-in evented I/O multiplexer which protects itself against slowly-sending clients. It does not protect against slowly-receiving clients, so in production deployments it is recommended to put Puma behind Nginx.</li>
<li>Passenger has a built-in evented I/O buffering system and automatically protects against slowly-sending and slowly-receiving clients, with and without Nginx.</li>
</ul>

<h3 id="thespecialproblemoftraditionalslowclientmitigationincombinationwithwebsockets">The special problem of traditional slow client mitigation in combination with WebSockets</h3>

<p>Nginx as a buffering reverse proxy has one weakness: it must receive the entire request from the client before it forwards the request to the application, and it must receive the entire response from the application before it sends any data to the client. This is normally not a problem, but it <em>is</em> a problem in combination with WebSockets. WebSocket frames must be immediately received from and sent to the client; otherwise it defeats the purpose of WebSockets.</p>

<p>This means that in order to make WebSockets (and ActionCable, which is based on WebSockets) work, Nginx’s I/O buffering system -- and thus slow client protection by Nginx -- must be disabled. ActionCable tries to mitigate this problem somewhat by providing its own evented I/O multiplexer for incoming WebSocket data. This means that ActionCable protects against slowly-sending WebSocket clients, but not against slowly-receiving WebSocket clients.</p>

<p>In the next sections we’ll provide a practical example of this problem. We will also show that Passenger does not suffer from this problem at all because it is capable of buffering I/O <em>and</em> immediately sending data to clients. Thus Passenger is capable of protecting the application against slowly-receiving <em>and</em> slowly-sending WebSocket clients.</p>

<h2 id="testingwhetheractioncableisprotectedagainstslowclients">Testing whether ActionCable is protected against slow clients</h2>

<p>With the theory out of the way it is time to move on to the practical consequences. To ascertain whether a Rails application might be vulnerable to slow client attacks we have built a <a href="https://github.com/phusion/actioncable-slow-client">small application</a> that sends a steady stream of data to any connected clients using ActionCable.</p>

<p><img src="https://blog.phusion.nl/content/images/2016/07/slow-client-bench.gif" alt="ActionCable under stress: Finding a DoS vulnerability in Rails 5 WebSockets Apps"></p>

<p>Running this application and connecting four clients will result in the above image. Each of the clients reports their current delay. On an old MacBook that is about 10 milliseconds on average. Note that this delay includes some things like rendering and parsing the JSON objects, which are quite large for the purposes of this test, a normal application will have much smaller response times.</p>

<p>As we have established that the application is functioning correctly we can move on to the test conditions. To establish that there is a slow client problem we introduce a slow client and observe the response times in the other (fast) clients. If they remain the same or are minimally impacted we have not shown a problem. If they change and are significantly impacted we can conclude there is in fact a slow client problem.</p>

<h4 id="shapingnetworktrafficonosx">Shaping network traffic on OS X</h4>

<p>Since we do not have a 56k modem lying around and internet connections in The Netherlands are “unfortunately" very fast, we will have to simulate the network conditions of the slow client. Most modern operating systems come with tools for this, on OS X we can use <code>pf</code>.</p>

<p>First, we have to see whether <code>pf</code> is currently enabled by running:</p>

<pre><code class="language-bash">sudo pfctl -s  
</code></pre>

<p>If it is not then it can be enabled by running:</p>

<pre><code class="language-bash">sudo pfctl -e  
</code></pre>

<p>The next step is to create a dummynet like so:</p>

<pre><code class="language-bash">(cat /etc/pf.conf &amp;&amp; echo "dummynet-anchor \"mop\"" &amp;&amp; echo "anchor \"mop\"") | sudo pfctl -f -
</code></pre>

<p>This extends the existing <code>/etc/pf.conf</code> with the dummynet and then instructs <code>pf</code> to use that configuration. If at any time you want to roll back to the original configuration you can issue the following two commands:</p>

<pre><code class="language-bash">sudo dnctl flush  
sudo pfctl -f /etc/pf.conf  
</code></pre>

<p>Then we find out which connection we would like to throttle. In this example the clients are 4 instances of Chrome connected to our web server at port 3000, so we issue the following command to find out their outgoing port number:</p>

<pre><code class="language-bash">sudo lsof -i -n -P | grep TCP | grep 3000  
</code></pre>

<p>This yields the port numbers we need, we pick one of them (in this example it is 58983) and insert that into the following instruction:</p>

<pre><code class="language-bash">echo "dummynet in quick proto tcp from any to any port 58983 pipe 1" | sudo pfctl -a mop -f -  
</code></pre>

<p>Now all data from that port is routed through the dummy network. The last step is to reduce the flow of traffic:</p>

<pre><code class="language-bash">sudo dnctl pipe 1 config bw 56kbit/s  
</code></pre>

<p>The effect should be immediate for the affected client, its delay should rise to multiple seconds.</p>

<h3 id="results">Results</h3>

<p>First we start the Rails application using the default server, which used to be WEBrick but is now the more production suitable <a href="http://puma.io/">Puma</a> web server, like so:  </p>

<pre><code>./bin/rails s
</code></pre>

<p>Introduction of the slow client did not only result in an increased delay in that client but also in all of its peers. This means that it is vulnerable to the slow client problem, and as such is not suitable for exposing WebSockets directly to the internet without a protective reverse proxy. Unfortunately the most recommended reverse proxy, <a href="https://nginx.org/">Nginx</a>, does not offer this protection, as explained under “The special problem of traditional slow client mitigation in combination with WebSockets".</p>

<p>Starting the Rails application using <a href="https://www.phusionpassenger.com">Passenger</a> and introducing a slow client does not result in a situation where all clients are affected by that slow client. This means that exposing a Passenger web server to the internet is safe in this regard, even without a buffering reverse proxy.</p>

<h3 id="howpassengerdealswithslowclients">How Passenger deals with slow clients</h3>

<p>To deal with slow clients Passenger puts a buffer between the application and the network. The buffer accepts data from the application immediately, storing it in memory or on the disk if the client can not receive the data fast enough. This enables the application to function as if it has a super fast client.</p>

<p>Because Passenger has an internal evented I/O architecture it does not have to dedicate threads or processes to the data streams filling these buffers. That means there's little overhead per connection allowing it to deal with many slow clients without a problem. Additionally while Passenger buffers it also sends the data to the client immediately so there is no delay perceived by the client.</p>

<h3 id="conclusion">Conclusion</h3>

<p>We conducted an experiment by building a small demo application; and by using network traffic shaping, simulated the effects of slow clients the reliability of an ActionCable server. As a result of this experiment we concluded that an ActionCable application served by Puma is at risk of denial-of-service by slow clients that take up costly worker processes and threads. </p>

<p>The same application served by Passenger is not affected by slow clients as Passenger buffers outgoing data. Using Nginx as a reverse proxy in front of Puma does not solve this problem as Nginx’s buffering system is not compatible with WebSockets.</p>

<p>The issue was reported to the Puma and Rails teams, who responded by building a response buffer into Rails. This patch was merged and was recently released with Rails 5.0.1.</p>

<div id="discuss_on_hacker_news"></div>

<p><img style="width:128px;margin:auto" src="https://blog.phusion.nl/content/images/2016/12/logo.svg" alt="ActionCable under stress: Finding a DoS vulnerability in Rails 5 WebSockets Apps"></p>

<p><strong><a href="https://www.phusionpassenger.com">Passenger</a></strong> ensures that your Ruby, Python, Node.js and Meteor apps, microservices, and APIs are served with outstanding reliability, performance and control. For additional features and premium support, check out the
<a href="https://www.phusionpassenger.com/enterprise">enterprise edition</a>.</p>

<p><img src="https://blog.phusion.nl/content/images/2015/10/logo-icon-color.png" alt="ActionCable under stress: Finding a DoS vulnerability in Rails 5 WebSockets Apps"></p>

<p><strong><a href="https://unionstationapp.com">Union Station</a></strong> is Phusion's brand new take on <a href="https://phusionpassenger.com">Passenger</a> application monitoring and analytics. Union Station aims to help you easily find performance bottlenecks and errors in your application and to help you fix them. <strong><a href="https://unionstationapp.com/signup">Sign up for a free trial today!</a></strong></p>]]></content:encoded></item><item><title><![CDATA[Hired: Customer Success Manager]]></title><description><![CDATA[<p>UPDATE: This position is filled and no longer available.</p>

<p>We are looking for an energetic, passionate and fun Customer Success Manager (full-time) to create and maintain stellar relationships with our customers. You will be mainly responsible for new Premium Support customer on-boarding, creating measurable retention and supporting our Enterprise customers.</p>]]></description><link>https://blog.phusion.nl/2016/12/19/were-hiring-customer-success-manager/</link><guid isPermaLink="false">1687f7eb-f383-4ea4-ad72-19d4c6156b27</guid><dc:creator><![CDATA[Ninh Bui]]></dc:creator><pubDate>Mon, 19 Dec 2016 13:18:55 GMT</pubDate><media:content url="https://blog.phusion.nl/content/images/2016/09/DSC00148-ARW.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.phusion.nl/content/images/2016/09/DSC00148-ARW.jpg" alt="Hired: Customer Success Manager"><p>UPDATE: This position is filled and no longer available.</p>

<p>We are looking for an energetic, passionate and fun Customer Success Manager (full-time) to create and maintain stellar relationships with our customers. You will be mainly responsible for new Premium Support customer on-boarding, creating measurable retention and supporting our Enterprise customers. The ideal candidate will work remotely from Canada. In short, you’ll be the voice on behalf of Phusion to all of our clients around the globe!</p>

<h3 id="yourmaintaskswillbeasfollows">Your main tasks will be as follows:</h3>

<ul>
<li>Maintain high levels of customer engagement and satisfaction with a focus on measurable retention </li>
<li>Maintain current and accurate account information and contact information within assigned customer database</li>
<li>Drive customer references, testimonial and case study completion </li>
<li>Follow up on surveys, compile responses, analyze results and draw conclusions to be presented to the team</li>
<li>Respond to customer’s account questions within agreed timeframe (either by phone, email, or support tickets)</li>
<li>Identify common customer challenges and proactively suggest better solutions.</li>
<li>Relay / escalate problems to engineering team in a joint effort to keep customers happy.</li>
<li>Execute and maintain Client Referral programs</li>
<li>Execute and maintain Client Affiliate programs</li>
<li>Effectively renew and maintain all assigned accounts with favorable terms and conditions</li>
<li>Travel to client offices across North America to meet and assess risks and evaluate opportunities to upsell.</li>
</ul>

<h3 id="requiredqualificationsskills">Required qualifications &amp; skills:</h3>

<ul>
<li>Bachelor’s degree or equivalent experience.
1-3 years experience providing Customer Success or equivalent history of increasing customer satisfaction and retention.  </li>
<li>Excellent written and verbal business communication skills in English. Native, or near-native, proficiency is a must. </li>
<li>Detail-oriented and analytical.</li>
<li>Demonstrated ability to communicate and present, as well as to credibly and effectively influence all levels of the organization, including the executive and C-level.</li>
<li>Ability and willingness to travel throughout North-America.</li>
</ul>

<h3 id="thefollowingaspectsarehighlyappreciated">The following aspects are highly appreciated:</h3>

<ul>
<li>Thriving in a multitasking environment and ability to adjust priorities on-the-fly.</li>
<li>A willingness to work on a flexible schedule (as most of our clients are based in the United States).</li>
<li>Work experience within the SaaS industry. </li>
<li>We are located in Amsterdam but embrace remote working and are seeking someone, ideally, located within Canada.</li>
</ul>

<h3 id="aboutphusion">About Phusion</h3>

<p>Phusion is a software company dedicated to making awesome Unix server tools to power the modern web. Click <a href="https://www.phusion.nl/about">here</a> for more info.</p>

<h3 id="whatdoesphusionhavetoofferyou">What does Phusion have to offer you?</h3>

<ul>
<li>A welcoming horizontal work environment with opportunities to grow both as a person and professionally
<ul><li>Want to go to an IT networking conference like TNW? We’ll send you!</li>
<li>Want to take a particular training course to become even better at your job? We’d like to support you here as well.</li></ul></li>
<li>An opportunity to work directly with some of the most amazing Fortune 500 companies we are fortunate enough to call our customers.</li>
<li>Flexible office hours at our homebase within walking distance to Amsterdam Centraal.</li>
</ul>

<p>Do you fit the profile and are you extremely self-motivated, fun to work with, and generally just a pretty awesome individual? WE WANT YOU!  So, please send your resume along with a cover letter to <a href="mailto:jobs@phusion.nl">jobs@phusion.nl</a> and we will get back to you shortly. </p>]]></content:encoded></item><item><title><![CDATA[We're Hiring: Web Designer]]></title><description><![CDATA[<p>UPDATE: This position is no longer available.</p>

<p>We’re looking for a passionate and creative Web Designer to assist us in designing marketing websites for our products, as well as assist us in designing UIs for the products themselves. More specifically, the job position requires you to translate business requirements</p>]]></description><link>https://blog.phusion.nl/2016/12/19/were-hiring-web-designer/</link><guid isPermaLink="false">dd9d3bca-64fa-4d54-a189-9250ed46a0c4</guid><dc:creator><![CDATA[Ninh Bui]]></dc:creator><pubDate>Mon, 19 Dec 2016 13:13:39 GMT</pubDate><media:content url="https://blog.phusion.nl/content/images/2016/09/DSC00148-ARW.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.phusion.nl/content/images/2016/09/DSC00148-ARW.jpg" alt="We're Hiring: Web Designer"><p>UPDATE: This position is no longer available.</p>

<p>We’re looking for a passionate and creative Web Designer to assist us in designing marketing websites for our products, as well as assist us in designing UIs for the products themselves. More specifically, the job position requires you to translate business requirements and targets into enticing pieces of art that not only look good, but are a joy to work with as well. To that end, deep knowledge of aesthetics, web technologies and user experience are paramount. The ideal candidate has enough experience, knowledge and skills to hit the ground running and enough of a funnybone to enjoy Friday drinks with us.</p>

<h3 id="yourmaintaskswillbeasfollows">Your main tasks will be as follows:</h3>

<ul>
<li>Tell a product story using design.</li>
<li>Translate our business requirements and targets to gorgeous marketing page designs.</li>
<li>Create UIs for our products in such a way that they end up being a joy to use.</li>
<li>Improve visitor-to-customer conversion with enticing web designs.</li>
<li>Conduct usability tests on our products and suggest / implement improvements.</li>
</ul>

<h3 id="requiredqualificationsskillstraits">Required qualifications, skills &amp; traits:</h3>

<ul>
<li>A “can do” mentality, and works in a proactive manner: rather than waiting to be told what to do, you actively pursue telling us how things can be improved by providing mockups &amp; reasoning.</li>
<li>Autonomous, but also comfortable working in multidisciplinary team environment.</li>
<li>Photoshop, Illustrator and Sketch are all second nature to you.</li>
<li>Able to cope with sprints, and as such, able to work in an effective and efficient manner.</li>
<li>Explores multiple concepts prior to settling on 1.</li>
<li>Familiar with current design paradigms and pride yourself in pushing the envelope when it comes to pursuing usability and aesthetics.</li>
<li>Take pride in your work, but are able to put business requirements above all else, even if it comes at the expense of throwing away something you’ve worked on for a while based on user feedback to “get it right”.</li>
<li>Believe that form follows function; you believe that usability should never lose out on “prettiness”.</li>
<li>A drive to keep learning new skills in an effort to expand their skillset.</li>
<li>Experience working on responsive designs for mobile and desktop (examples required).</li>
<li>Able to conduct usability testing via paper prototypes, mockups, clickthroughs etc...</li>
<li>Able to immerse themselves in domain specific knowledge; you believe that in order to be effective at designing a marketing page or UI for a product, you must first understand the product and its audience.</li>
<li>Strong understanding of designing with accessibility in mind, typography, color theory and composition.</li>
</ul>

<h3 id="thefollowingaspectsarehighlyappreciated">The following aspects are highly appreciated:</h3>

<ul>
<li>Knowledge of HTML/CSS/JS and the ability to implement designs with the aforementioned technologies.</li>
<li>Ability to create and provide prototypes in <a href="http://www.framerjs.com">Framer.js</a>, Origami or equivalent software.</li>
<li>Knowledge of functional animation techniques to support UX.</li>
<li>Ability to conducting and evaluating A/B split testing.</li>
<li>Experience with writing copy.</li>
<li>Experience designing for print.</li>
</ul>

<h3 id="aboutphusion">About Phusion</h3>

<p>Phusion is a software company dedicated to making awesome Unix server tools to power the modern web. Click <a href="https://www.phusion.nl/about">here</a> for more info.</p>

<h3 id="whatdoesphusionhavetoofferyou">What does Phusion have to offer you?</h3>

<ul>
<li>A welcoming horizontal work environment with opportunities to grow both as a person and professionally
<ul><li>Want to go to an IT networking conference like TNW? We’ll send you!</li>
<li>Want to take a particular training course to become even better at your job? We’d like to support you here as well.</li></ul></li>
<li>An opportunity to work directly with some of the most amazing Fortune 500 companies we are fortunate enough to call our customers.</li>
<li>Flexible office hours at our homebase within walking distance to Amsterdam Centraal. </li>
<li>Some of the best work hardware to allow you to perform your tasks quickly and efficiently; love Apple and want to work on a Macbook? Done deal. Prefer to work with Windows instead? We’ve got you too!</li>
</ul>

<p>Do you think you’ve got the chops for this position? Are you also extremely self-motivated, fun to work with, and generally a pretty awesome individual? Then WE WANT YOU! Please send your résumé, cover letter, and portfolio to <a href="mailto:jobs@phusion.nl">jobs@phusion.nl</a> and we’ll get back to you shortly. </p>]]></content:encoded></item><item><title><![CDATA[We're Hiring: Sales Manager]]></title><description><![CDATA[<p>UPDATE: This position is no longer available.</p>

<p>We are looking for a passionate and energetic candidate to fulfill the duties of Sales Manager at Phusion B.V. in Amsterdam. The ideal candidate has enough experience, knowledge and skills to hit the ground running and enough of a funny-bone to enjoy</p>]]></description><link>https://blog.phusion.nl/2016/12/06/hiring-sales-manager/</link><guid isPermaLink="false">1f9b0880-2124-468d-83ad-2b63e92a8952</guid><dc:creator><![CDATA[Ninh Bui]]></dc:creator><pubDate>Tue, 06 Dec 2016 15:04:34 GMT</pubDate><media:content url="https://blog.phusion.nl/content/images/2016/09/DSC00148-ARW.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.phusion.nl/content/images/2016/09/DSC00148-ARW.jpg" alt="We're Hiring: Sales Manager"><p>UPDATE: This position is no longer available.</p>

<p>We are looking for a passionate and energetic candidate to fulfill the duties of Sales Manager at Phusion B.V. in Amsterdam. The ideal candidate has enough experience, knowledge and skills to hit the ground running and enough of a funny-bone to enjoy Friday drinks with us. The focus on this position will be on acquiring new customers, smashing targets, managing the sales flow and creating growth for the company. </p>

<p>The main task categories of this position are:</p>

<ul>
<li><strong>Acquisition</strong> - Seeking out and gaining new customers on a constant and consistent basis to accelerate existing growth. </li>
<li><strong>Sales</strong> - Monitoring and maintaining automatic sales flow channels from the customer's first point of contact with our company through to payment. Includes writing copy for websites, sales flyers, blogs, etc. </li>
<li><strong>Targets</strong> - Ability and drive to meet and challenge predetermined targets set for new customers and revenue. </li>
<li><strong>Analysis</strong> - Data collection, analysis and interpretation for the purpose of presentation, opportunity cost decision, and backing up any decisions. </li>
<li><strong>Business Development</strong> - Identifying and capturing opportunities for business growth and forecasting timelines for growth.  </li>
</ul>

<p>Qualities the ideal candidate possesses:</p>

<ul>
<li>Strong analytical ability. You share the mentality “If you can’t measure it, you can’t improve it.” </li>
<li>Native (or nearly native) English proficiency. You must be able to speak and write at a business/professional level. Any additional language proficiency is a plus. </li>
<li>High curiosity and desire to learn more. You make it a top priority to be an expert in your field, keeping up-to-date on the product, company and the ecosystem in which we operate.</li>
<li>Goal oriented and can-do attitude. You can collect all information yourself to create a solution or plan before going to someone with a problem or question. </li>
<li>3+ years proven relevant experience with international markets, specifically the North American market. You’re an expert presenter, pitcher and negotiator.</li>
<li>A college or university degree in a related field. You also hold some necessary background knowledge in the fields of business administration, economics, statistics, business models and business optimization. </li>
<li>You’re located in or around Amsterdam and would love to be in our beautiful office at least 3 days a week (while the remaining 2 days you are encouraged to be in the office however that is optional). </li>
<li>Willingness to work during US times for conference calls with customers and leads. </li>
<li>Willing to travel and meet up with our customers to understand their business needs and relay this information into actionable items to our engineers. Our customers are primarily located in the US.</li>
<li>Finally, if you’re up for the challenge of this position, you’re able to bring in new customers within the first three months of employment that otherwise wouldn’t have found their way into our sales flow. </li>
</ul>

<p>The following knowledge and skills are highly appreciated: </p>

<ul>
<li>Ability to thrive in a multitasking environment, adjust priorities on-the-fly and work in sprints. </li>
<li>A willingness to work on a flexible schedule due to US-NL timezone differences of our customers. </li>
<li>Work experience within the SaaS and/or enterprise IT industry.</li>
<li>You are an initiator, if you see a problem or something that can be improved upon you create solutions and improvements without being explicitly instructed.</li>
<li>Experience with conducting and evaluating A/B tests.</li>
</ul>

<h1 id="aboutphusion">About Phusion  </h1>

<p>Phusion is a software company dedicated to making awesome Unix server tools to power the modern web. <a href="https://www.phusion.nl/about">Click here for more info.</a></p>

<h1 id="whatdoesphusionhavetoofferyou">What does Phusion have to offer you?  </h1>

<ul>
<li>A welcoming, horizontal work environment with opportunities to grow both personally and professionally. Want to go to an IT networking conference like the TNW?  We’ll send you! Want to take a particular training course to really master and keep up to date on an aspect of your position? We fully support it! </li>
<li>An opportunity to work directly, and bring in more, of the most amazing Fortune 500 companies that we are fortunate enough to call our customers. </li>
<li>We have a beautiful office in walking distance from Amsterdam Central Station. While we offer some remote working days, if you are in the office, you’ll have lunch included. </li>
<li>Some of the best hardware to allow you to perform your tasks quickly and efficiently. Love Apple and want to work on a Macbook? Done deal. Prefer to work with Windows instead? We’ve got you too! </li>
</ul>

<p>Do you think you’ve got the chops for this position? Are you also extremely self-motivated, fun to work with, and generally a pretty awesome individual? Then WE WANT YOU!</p>

<p>Please send your résumé and cover letter to <a href="mailto:jobs@phusion.nl">jobs@phusion.nl</a> and we’ll get back to you shortly. </p>]]></content:encoded></item><item><title><![CDATA[Anna Dechering joins Phusion as its Office Manager]]></title><description><![CDATA[<p><em>"Every office needs a Donna, but not as much as an Anna."</em>
Anna will be joining Phusion to make everyone's life a little easier. She was found at the University of Amsterdam with a Bachelors of Media &amp; Culture, a minor in Programming and wrapping up a Masters of Game</p>]]></description><link>https://blog.phusion.nl/2016/11/02/anna-dechering-joins-phusion-as-its-office-manager/</link><guid isPermaLink="false">3677f64c-45fe-4964-947c-ad13c6479197</guid><category><![CDATA[Phusion]]></category><dc:creator><![CDATA[Ninh Bui]]></dc:creator><pubDate>Wed, 02 Nov 2016 16:07:18 GMT</pubDate><media:content url="https://blog.phusion.nl/content/images/2016/11/anna.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.phusion.nl/content/images/2016/11/anna.jpg" alt="Anna Dechering joins Phusion as its Office Manager"><p><em>"Every office needs a Donna, but not as much as an Anna."</em>
Anna will be joining Phusion to make everyone's life a little easier. She was found at the University of Amsterdam with a Bachelors of Media &amp; Culture, a minor in Programming and wrapping up a Masters of Game Studies, excited to explore more practical matters.</p>

<p>As the new Office Manager Anna will be working behind the scenes to ensure that all members of the team can keep their focus on what they do best: putting their unique talents to good use. With her broad skill set she will be taking care of all the little things so Phusion can make the big things happen. </p>

<p>Welcome to the team Anna! </p>]]></content:encoded></item><item><title><![CDATA[Tara Lingard joins Phusion as its Customer Success Manager]]></title><description><![CDATA[<p>The Phusion team just got a little <em>nicer</em>! Tara  will be joining as the second hire from the Great White North. She is a new graduate from <a href="http://www.dal.ca">Dalhousie University</a> with a Bachelors of Business Administration. Eager to get out of rural Canada she took to finding a job in Amsterdam.</p>]]></description><link>https://blog.phusion.nl/2016/10/05/tara-lingard-joins-phusion-as-its-customer-success-manager/</link><guid isPermaLink="false">d0fd1fcb-22dc-4284-a312-f94c644128fc</guid><category><![CDATA[Phusion]]></category><category><![CDATA[Team]]></category><category><![CDATA[Customer success]]></category><category><![CDATA[Sales]]></category><dc:creator><![CDATA[Ninh Bui]]></dc:creator><pubDate>Wed, 05 Oct 2016 19:50:15 GMT</pubDate><media:content url="https://blog.phusion.nl/content/images/2016/10/tara_blog_header-1.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://blog.phusion.nl/content/images/2016/10/tara_blog_header-1.jpg" alt="Tara Lingard joins Phusion as its Customer Success Manager"><p>The Phusion team just got a little <em>nicer</em>! Tara  will be joining as the second hire from the Great White North. She is a new graduate from <a href="http://www.dal.ca">Dalhousie University</a> with a Bachelors of Business Administration. Eager to get out of rural Canada she took to finding a job in Amsterdam.</p>

<p>Tara has joined Phusion as a Customer Success Manager to build stellar relationships with customers. Her background in communications and customer relationship management lends well to becoming the customers new best friend. She will be playing a key role in creating value for the customer and the company.</p>

<p>Welcome to the team Tara!</p>]]></content:encoded></item></channel></rss>