webui: serve via nginx

Serve the mostly pre-compressed static webui content via nginx. If nginx
can't find a static file, proxy the URI back to the rest server.

A follow-up commit will remove code that serves webui from the
phosphor-rest-server.

Tested:
- The webui, rest server and bmcweb seem to be working as before.
- curl -H "Accept-Encoding: gzip" https://<witherspoon>/foo.html
  is served compressed content.
- curl https://<witherspoon>/foo.html is served uncompressed
  content.

Change-Id: Ice443f00a467f3558f28d697261df4f23278f420
Signed-off-by: Deepak Kodihalli <dkodihal@in.ibm.com>
diff --git a/common/recipes-phosphor/webui/phosphor-webui.bbappend b/common/recipes-phosphor/webui/phosphor-webui.bbappend
new file mode 100644
index 0000000..ea81894
--- /dev/null
+++ b/common/recipes-phosphor/webui/phosphor-webui.bbappend
@@ -0,0 +1,16 @@
+do_install_append () {
+
+# The webui content is served as pre-compressed gzip content. While nginx can
+# handle this via the gzip_static directive (and we use that), the nginx
+# try_files directive (which we also use) searches the URI as-is. The suggested
+# workaround is to have an empty uncompressed file with the same name as the
+# compressed file. This does not impact the functionality of gzip_static.
+# So for eg if there's an index.html.gz, create an empty index.html. Same goes
+# for all the webui content.
+# https://serverfault.com/questions/571733/nginx-gzip-static-why-are-the-non-compressed-files-required
+# https://www.ruby-forum.com/topic/4402481
+# https://trac.nginx.org/nginx/ticket/1367
+
+find ${D}${datadir}/www -type f -name '*.gz' -exec sh -c 'touch `dirname "$0"`/`basename "$0" .gz`' '{}' \;
+
+}