Using NGINX to speed up Hue

26 March 2015 in Administration / Development - 2 minutes read

Need for Speed!

In the soon to be released Hue 3.8, we have added the ability to serve Hue’s static files (images, JavaScript, and etc) with an external server like NGINX. This allows us to dramatically cut down on the number of files served by the Hue application, making the whole user experience dramatically faster.

For example, in the old version of Hue, rendering the beeswax application on demo.gethue.com performs 73 requests in 3 seconds to download 2.5MB of data.

 

In comparison, in Hue 3.8 behind NGINX, rendering that same page performs 5 requests for 130KB in 0.7 seconds.

[

]4

Configuring NGINX

The simplest option is to just follow the instructions described in Automatic High Availability with Hue and Cloudera Manager, which we’ve updated to support this optimization. Or if you want to just set up a simple NGINX configuration, you can install NGINX on Redhat systems with:

% yum install nginx

Or on a Debian/Ubuntu system with:

% apt-get install nginx

Next, add a /etc/nginx/conf.d/hue.conf file with the following contents. Make sure to tweak server_name to this machine’s hostname (or just localhost), the alias to point at Hue’s static files, and the server to point at the Hue instance. Note that if you’re running multiple Hue instances, be sure to use a database like MySQL, PostgreSQL, or Oracle which allows for remote access:

server {

server_name NGINX_HOSTNAME;

charset utf-8;

listen 8001;

\# Or if running hue on https://

\## listen 8001 ssl;

\## ssl_certificate /path/to/ssl/cert;

\## ssl_certificate_key /path/to/ssl/key;

location / {

proxy_pass http://hue;

\# Or if the upstream Hue instances are running behind https://

\## proxy_pass https://hue;

}

location /static/ {

\# Uncomment to expose the static file directories.

\## autoindex on;

\# If Hue was installed with packaging install:

alias /usr/lib/hue/build/static/;

\# Or if on a parcel install:

\## /opt/cloudera/parcels/CDH/lib/hue/build/static/;

expires 30d;

add_header Cache-Control public;

}

}

upstream hue {

ip_hash;

\# List all the Hue instances here for high availability.

server HUE_HOST1:8888 max_fails=3;

server HUE_HOST2:8888 max_fails=3;

...

}

Finally, start NGINX with sudo service nginx start and navigate to http://NGINX_HOSTNAME:8001.

As usual feel free to comment on the hue-user list or @gethue!

 

Note for HTTPS

After changing X-Forwarded-Proto to X-Forwarded-Protocol in the Load Balancer configuration the rewrite from http to https worked


comments powered by Disqus

More recent stories

13 November 2019
Visually surfacing SQL information like Primary Keys, Foreign Keys, Views and Complex Types
Read More
31 October 2019
Missing some color? How to improve or add your own SQL syntax Highlighter
Read More
24 October 2019
How to create a HBase table on Kerberized Hadoop clusters
Read More