Elvis Miranda

Elvis Miranda


Serving Requests on IPv6 with Nginx

A few weeks ago one of our readers reached out on our support channel to tell us that our site wouldn’t work for them no matter what.

It simply wouldn’t load on their browser (Chrome).

After a little back and forth, we realized that our web server lacked IPv6 support. We weren’t listening to the requests made on IPv6. If you don’t know already IPv6 stands for Internet Protocol version 6, and it is intended to replace IPv4 network which is what our original web, as-is, has had a run on for the last two decades.

Google is out with stats on IPv6 adoption lately (as of October 2018) and the numbers are rising steadily. Over twenty five percent of the Internet is now using IPv6  and from the graph it appears that well over half would be onboard in the coming few years. More importantly, a % of those who are on IPv6 already are exclusively so and cannot see your content if the website isn’t configured to serve on the new protocol. (Updated per tweet.)

ipv6 adoption @bubblin

Through this quick post we will configure our web app/site for the new protocol.

This is how I set it up on Bubblin.

The Quad-A Record.

The first step is to add an AAAA Record on your DNS Manager. We needed a public IP on IPv6 so I made a request to our hosting provider (Linode) to provide me with one.

Once they responded, I went ahead and added our public IPv6 on the Remote Access Panel, like so:

AAAA record linode

I added the ugly looking records with IPv6 option (bottom three) as screenshot-ted above. Since changes to DNS take some time to percolate we’ll leave the DNS manager here and focus on configuring our app-server nginx for IPv6 next.

Nginx on IPv6

Now Bubblin is delivered on a strict https protocol so we are effectively a permanent on redirecting all our traffic (from http →) to https.

We use the Letsencrypt and Certbot to secure Bubblin with industry-grade SSL.

Shown below is an excerpt from our nginx.conf.erb on production:


#  $ sudo vi ~/.etc/nginx/sites-available/bubblin_production
#  add listen [::]:80 ipv6only=on; for requests via insecure protocol (http).

server {
    listen 80;
    listen [::]:80 ipv6only=on; 
    server_name <%= fetch(:nginx_server_name) %> www.<%= fetch(:nginx_server_name) %>;
    rewrite ^(.*) https://$host$1$request_uri permanent;

#  add listen [::]:443 to listen for requests over IPv6 on https.
server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;  
  server_name www.<%= fetch(:nginx_server_name) %>;

  # Other SSL related stuff here.

  rewrite ^ https://$host$1$request_uri permanent; 


# add listen [::]:443 ssl http2; on the final server block.

server {

  // Plenty of nginx config here.

  listen 443 ssl http2; # managed by Certbot
  listen [::]:443 ssl http2;

  # Add HSTS header with preloads
  add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";


Notice the listen [::]:80 ipv6only=on; directive inside the server block and the HSTS directive at the bottom.

To test your nginx configuration:

$ sudo nginx -t

// success

$ sudo nginx -s reload

Hoping that your DNS percolated by the time the nginx was cofigured (sometimes it may take up to 24 hours), now it is time to test if the website is available on IPv6:

$ curl https://bubblin.io -6

The HTML page from your site should be served correctly.

That’s all folks.

Hi, I’m Marvin Danig, CEO and Cofounder of Bubblin.

You might want to follow and connect with me on Twitter or  Github?

P.S.: Reading more books on web will help your attention span.

30s ad

AJAX using Javascript and JQuery + 2 Projects

Modern JavaScript: Building Real-World, Real-Time Apps

Essentials in JavaScript ES6 - A Fun and Clear Introduction

JavaScript the Basics - JavaScript for Beginners

Beginning ES6, The Next Generation of JavaScript


What is GEEK

Buddha Community

Serving Requests on IPv6 with Nginx
Autumn  Blick

Autumn Blick


NGINX Announces Eight Solutions that Let Developers Run Safely with Scissors

Technology is hard. As technologists, I think we like it that way. It’s built‑in job security, right? Well, unfortunately, the modern application world has become unproductively hard. We need to make it easier.

That’s why I like describing the current developer paradox as the need to run safely with scissors.

NGINX Balances Developer Choice with Infrastructure Guardrails

Running with scissors is a simple metaphor for what is the admittedly difficult ask we make of software engineers. Developers need to run. Time to market and feature velocity are critical to the success of digital businesses. As a result, we don’t want to encumber developers with processes or technology choices that slow them down. Instead we empower them to pick tools and stacks that let them deliver code to customers as quickly as possible.

But there’s a catch. In the world of fast releases, multiple daily (or hourly or minutely!) changes, and fail‑fast development, we risk introducing application downtime into digital experiences – that risk is the metaphorical scissors that make it dangerous to run fast. On some level we know it’s wrong to make developers run with scissors. But the speed upside trumps the downtime downside.

That frames the dilemma of our era: we need our developers to run with scissors, but we don’t want anybody to get hurt. Is there a solution?

At NGINX, the answer is “yes”. I’m excited to announce eight new or significantly enhanced solutions built to unleash developer speed without sacrificing the governance, visibility, and control infrastructure teams require.

Load Balancing and Security DNS Solutions Empower Self‑Service

As my colleague, Gus Robertson, eloquently points out in his recent blog The Essence of Sprint Is Speed, self‑service is an important part of developer empowerment. He talks about developers as the engines of digital transformation. And if they’re not presented with easy-to-use, capable tools, they take matters into their own hands. The result is shadow IT and significant infrastructure risk.

Self‑service turns this on its head. It provides infrastructure teams with a way to release the application delivery and security technologies that developers need for A/B, canary, blue‑green, and circuit‑breaker patterns. But it does so within the guardrails that ensure the consistency, reliability, and security that ensure your apps remain running once in production.

#blog #news #opinion #red hat #nginx controller #nginx app protect #nginx sprint 2020 #nginx ingress controller #nginx service mesh #f5 dns cloud services #nginx analytics cloud service

Udit Vashisht


Requests Python 3 - Download Files (Free books) with requests-html and requests Python 3

In this video, we will use requests python 3 and requests-html to download pdf files from Springer’s Website.
Recently, I came across a list of 408 free books available for download from Springer’s website.
So, I have created this script in which I have used requests python and requests-html to download the files.


#request-html #requests #requests-python #webscrapping #springer

Ryleigh  Walker

Ryleigh Walker


Serving Flask Applications with Gunicorn and Nginx Reverse Proxy

In this article, I will be implementing a simple flask application. I will be setting up a Gunicorn application server and will be

#flask #serving #applications #gunicorn #nginx #reverse

Madaline  Mertz

Madaline Mertz


Parallel web requests in Python

Performing web requests in parallel improves performance dramatically. The proposed Python implementation uses Queue and Thread to create a simple method saving a lot of time.

I have recently posted several articles using the Open Trip Planner as a source for the analysis of public transport. Trip routing was obtained from OTP through its REST API. OTP was running on the local machine but it still took a lot of time to make all required requests. The shown implementation in the articles is sequential. For simplicity I posted this sequential implementation but in other cases I use a parallel implementation. This article shows a parallel implementation for performing a lot of webrequests.

Though I have some experience the tutorials I found were quite difficult to master. This article contains my lessons learned and can be used for performing parallel web requests.

#python #multithreading #parallel web requests in python #requests #web requests #parallel

Maud  Rosenbaum

Maud Rosenbaum


Basics of configuring NGINX

NGINX is a modern technology that is used for mainly for load-balancing but more different purposes. Even though it looks like a very complex technology, if you get to know the basics, it is very simple to work with NGINX. In my experience I also thought NGINX is a handful, but after learning the basics and moving on it was very simple and easy. So, before digging into the configurations let me take give you an introduction to NGINX.

Introduction to NGINX

NGINX is a web server that can be used as a reverse proxy, a load-balancer, a mail proxy, or an HTTP cache. It can be deployed in your local machine or in any cloud. Nginx has grown in popularity since its release due to its light-weight resource utilization and its ability to scale easily on minimal hardware. NGINX has many products but in this article, I will be explaining using NGINX Open Source version.

Other than NGINX, there are many other load-balancers used in the industry such as.

  • Traefik — a modern microservices-focused application load balancer and reverse proxy written in Golang.
  • Seesaw — is another open-source load balancer written in Golang. It was originally created by Google SREs to provide a robust solution for load balancing internal Google infrastructure traffic.
  • HAProxy — offers reverse proxying and load balancing of TCP and HTTP traffic.
  • Neutrino — is a Scala-based software load balancer originally developed by eBay. Neutrino’s strength lies in the broad compatibility of its runtime environment, the JVM.

#load-balancer #devops #nginx-proxy #nginx