2018-09-29

How to fix: Nginx proxy or fastcgi cache always MISS or EXPIRED

I've recently had an issue with my Nginx setup: it wasn't caching or serving cached pages properly. Every time I would visit, I'd get "MISS" or "EXPIRED".


What I found online is that you have to instruct Nginx to ignore browser request headers relative to caching, therefore allowing Nginx to determine whether it should serve cache, all by itself.

This is done by inserting the following directive:

# ignore headers to let Nginx control its own cache
fastcgi_ignore_headers Cache-Control Expires;

However, I already had this in my configuration and it wasn't helping.

After investigating the issue, I determined that my PHP scripts were updating cookies at every request. Nginx was forced to execute the PHP scripts via FastCGI (ie. not serving them from cache) because the cookie data had changed. When PHP sets a cookie, Nginx will not hit the cache, which is normal behavior. I wouldn't recommend changing this behavior. What I did is fix my PHP scripts so that they wouldn't update cookies at every request. Once I did that, I started hitting the cache again!


One last thing: if you turn off fastcgi or proxy buffering, caching may not work properly, so make sure buffering is on (it should be on by default).

2018-05-03

Clickatell vs MessageBird vs Nexmo vs Plivo vs Tropo vs Twilio: outbound SMS pricing comparison

DISCLAIMER: I am not affiliated in any way to any of those companies. I'm an independent software developer. This article is based on pricing data collected on May 2018.

As I was looking for a provider to send SMS internationally from a web application (one-way), I was recommended a variety of services by friends and colleagues. My main concern was the pricing: which of them would offer me the cheapest rates in the most countries? Obviously the answer isn't that simple, so I decided to collect pricing information from major providers to compare. I tried including SMSGlobal in this comparison but they wouldn't provide me with a full list so I had to exclude them.

Methodology

There are three important pieces of information that you absolutely need to grasp before you continue reading this article:

• The prices I have collected do not include bulk discounts. Most, if not all providers offer such discounts if you talk to their sales department. The rates I have retained in my comparison are standard rates and have been collected off the provider's sites. In half the cases I had to obtain the list by talking to the sales department directly - I asked for standard rates for low volumes.

• Some providers offer a flat rate per country, while others offer different rates based on the destination carrier. In order to establish a comparison that would be as fair as possible, for those operators that have different rates per carrier I compared prices based on AVG/MIN/MAX: AVG being the average rate for all carriers combined, MIN being the rate of the cheapest carrier, and MAX being the rate of the most expensive carrier.

•  This article compares providers solely based on pricing. But keep in mind that the pricing isn't the only thing that matters to select a provider: delivery rates, reliability, customer support, API, documentation, etc. can be equally important.

Contenders

The contenders are: (listed in alphabetical order)

1) Clickatell: based in South Africa. Flat rates. Pricing sheet obtained from sales department on May 2nd, 2018. Prices were given in USD.

2) Messagebird: based in the Netherlands (Europe). Flat rates. Pricing sheet obtained from sales department on April 30th, 2018. Prices were given in USD.

3) Nexmo: originally based in France (Europe) but now owned by Vonage (USA). Flat rates. Pricing sheet obtained from sales department on May 1st, 2018. Prices were given in EUR, converted to USD based on EUR/USD exchange rate from XE.com on May 2nd, 2018.

4) Plivo: based in the USA. Carrier-dependent rates. Pricing sheet obtained from website on May 2nd, 2018. Prices given in USD.

5) Tropo: owned by Cisco, based in the USA. Carrier-dependent rates. Pricing sheet obtained from website on May 2nd, 2018. Prices given in USD.

6) Twilio: based in the USA. Carrier-dependent rates. Pricing sheet obtained from website on May 2nd, 2018. Prices given in USD.

I collected all data from these 6 providers and combined it into a single SQL table. I spent a good amount of time fixing the name of countries to get a coherent list - my apologies if any mistakes were made as I'm not an expert in geopolitics. I also deleted a few rare countries that were covered by only 1 provider. Then I built an Excel file and determined the provider that offers the cheapest rates for each country.

Results

The final Excel table looks like this (download link can be found at the bottom of the article):


The providers that offer the best rates are... *drum rolls*:


1. Messagebird (flat rates)
They offer the cheapest rates in:
• 134 countries if we look at flat or average carrier rates of competitors
• 122 countries if we look at flat or minimum carrier rates of competitors
• 137 countries if we look at flat or maximum carrier rates of competitors

2. Tropo (carrier-dependent rates)
They offer the cheapest rates in:
• 50 countries if we look at flat or average carrier rates of competitors
• 44 countries if we look at flat or minimum carrier rates of competitors
• 50 countries if we look at flat or maximum carrier rates of competitors

3. Clickatell (flat rates)
They offer the cheapest rates in:
• 23 countries if we look at flat or average carrier rates of competitors
• 20 countries if we look at flat or minimum carrier rates of competitors
• 23 countries if we look at flat or maximum carrier rates of competitors

4. Plivo (carrier-dependent rates)
They offer the cheapest rates in:
• 19 countries if we look at flat or average carrier rates of competitors
• 37 countries if we look at flat or minimum carrier rates of competitors
• 16 countries if we look at flat or maximum carrier rates of competitors

5. Twilio (carrier-dependent rates)
They offer the cheapest rates in:
• 2 countries if we look at flat or average carrier rates of competitors
• 8 countries if we look at flat or minimum carrier rates of competitors
• 2 countries if we look at flat or maximum carrier rates of competitors

6. Nexmo (flat rates)
They offer the cheapest rates in:
• 1 country if we look at flat or average carrier rates of competitors
• 1 country if we look at flat or minimum carrier rates of competitors
• 1 country if we look at flat or maximum carrier rates of competitors

Downloads

The Excel file with the full list of countries is available for download here

You can also download the source code for my script, the file contains:
• The original CSV/PDF/Excel files from providers with the rates
• Database dump with the SQL table containing properly imported and reformatted data
• The source code of my script. Bear in mind this script was written over 2 hours, I am publishing it for reasons of transparency, so please no judging of the dirty code (PHP 5.6).

If you notice any inconsistency in my data, script, or methodology please comment and I will do my best to make the necessary fixes.

2018-02-21

Nginx HTTP Server - 4th edition now available

Thanks to the amazing work of Martin Fjordvald, the 4th edition of Nginx HTTP Server (which was, at the time of the 1st edition, the first-ever book about Nginx) is as of today available for purchase in libraries and online. Congratulations Martin!


This book is a detailed guide to setting up Nginx in ways that correspond to actual production situations: as a standalone server, as a reverse proxy, interacting with applications via FastCGI, and more. In addition, this complete direct reference will be indispensable at all stages of the configuration and maintenance processes. This book mainly targets the most recent version of Nginx (1.13.2) and focuses on all the new additions and improvements, such as support for HTTP/2, improved dynamic modules, security enhancements, and support for multiple SSL certificates. 

This book is the perfect companion for both Nginx beginners and experienced administrators. For beginners, it will take you through the complete process of setting up this lightweight HTTP server on your system and configuring its various modules so that it does exactly what you need quickly and securely. For more experienced administrators, this book provides different approaches that can help you make the most of your current infrastructure.

2018-02-14

How to fix: Outlook on iOS/iPhone: "No Internet Connection"

Microsoft Outlook is probably one of the best (if not the best) email client for iOS to date. Sadly, you may run into a random annoying problem which basically renders the application useless: it displays a message saying "No internet connection", at which point you can't receive or send emails anymore. The number of people having this issue is incredibly high, as I discovered when it happened to me yesterday:


After reading all of these posts and many more, there did not appear to be a particular solution for this. I had already checked the following:
  • my Internet was of course working properly, on both WiFi and 4G
  • I made sure to allow data/internet usage for the Outlook app
  • I made sure my email accounts were working properly (they work fine on the Outlook desktop app & web)
  • I tried enabling or disabling push notifications but that did not help
  • I tried to use the 'reset account' functionality in the Outlook app settings for each of the accounts
  • I made sure I had enough storage space left on device, which I did, over 10 GB left. And the Outlook app itself was only using about 200 MB.

None of the above proved useful.

The only solution?

Eventually, here is what I did to get the app to work again:

  1. Removed all my accounts one by one from the Outlook app
  2. Went to the iOS settings, "Storage & icloud" settings, manage storage, selected the 'Outlook' app and tapped 'Delete' in order to delete the application from my iPhone
  3. I re-downloaded the application from the App Store
  4. I set up my accounts into the app again

Thankfully, the 'no internet connection' message hasn't shown up again until now. It's really surprising that considering the amount of people having this issue (not even recently) Microsoft have yet to address the issue properly. If someone is reading this, my iPhone is running the latest version of iOS 10, and I always keep my apps up to date so I had the latest version of Outlook for iOS installed at the time of writing this article.

Search This Blog