diff --git a/README.en.md b/README.en.md index bf2d88b..1d2af15 100644 --- a/README.en.md +++ b/README.en.md @@ -7,8 +7,8 @@ We will start with the general ideas then go deeper to the details. ## Why HAProxy and Varnish ? They are both open-source, mature and performance-oriented. -They are not alon inb their categories, but they are the ones we know and love the most. -They are eaisly available on many platforms. They have great documentation and vast/vibrant communities. +They are not alone in their categories, but they are the one we know and love the most. +They are easily available on many platforms. They have great documentation and vast/vibrant communities. They both are supported by companies that offer professional support and services, while keeping the core open-source and free for everybody. ### HAProxy @@ -31,14 +31,14 @@ That's where we begin to mention load-balancing. And when we introduce som logic Varnish is going to store in cache the result of some requests. Later on, a client who makes the same request might get a result from the cache if it is preset andfresh enough. -With its default configuration, Varnish has a lot of good practice already in place and jst a few adjustments might be necessary to work with most of the situations. +With its default configuration, Varnish has a lot of good practice already in place and just a few adjustments might be necessary to work with most of the situations. Every step of the request/response processing is done by functions that can be customized by something that looks a bit like inheritance in programming. At startup, everything is validated and compiled into optimized code. Like HAProxy, Varnish parses the whole request/response inside the functions, so we can decide if the request/response needs to be modified (like adding or removeing headers), if a response can be served from the cache, if it need to talk to the final server, and if the responsae can be stored in cache for future use. Varnish stores the content, its objects, into memory to be really fast. if you have a lot of trafic, give it enough RAM to keep a lot of content available. -## Comment combiner HAProxy et Varnish +## Let's combine HAProxy and Varnish So we have decided to have them work together, in a coordinated way, for an efficient and feature-rich setup. @@ -114,7 +114,7 @@ sub vcl_recv { The response is extremely fast, which allow for frequent checks by HAProxy. In the frontend section of HAProxy, there is an ACL that tells if Varnish is knownto be available. -It is then possible to decide if we can pass the requets to VArnish or bypass it: +It is then possible to decide if we can pass the requets to Varnish or bypass it: ``` frontend external @@ -176,7 +176,7 @@ And we can combine several of these conditions together: Using the PROXY Protocol is not a necessity at all, but it adds a certain amount of comfort when we have proxies involved, like HAProxy and Varnish. -At the TCP level, when HAProxy talks to Varnish, then Varnish to HAproxy and finally HAroxy to the final web server, they are all seen as regular HTTP clients. +At the TCP level, when HAProxy talks to Varnish, then Varnish to HAproxy and finally HAproxy to the final web server, they are all seen as regular HTTP clients. Without any modification, each element reports the IP of the previous elements as the client IP, and the final server thinks that HAProxy is the only client accessing it. It's bad for IP based filtering, logging… At the HTTP level, we've had the `X-Forwarded-For` header for a long time. I you look at its presence and you know how to parse it, you can use the ocrrect value in your web-server of application. It's cumbersome, and error-prone, and at the TCP level, this is invisible. @@ -260,7 +260,7 @@ Note: If you use Apache, I encourage you to take a look at the "ForensicLog" mod With the same focus on tracability easy debugging, we are using HAProxy and Varnosh to add some HTTP headers with information about their behaviour. -Let'sremember that the HTTP standard has normalized a list of headers. For example : `Host`, `Set-Cookie`, `Cache-Control`… +Let's remember that the HTTP standard has normalized a list of headers. For example : `Host`, `Set-Cookie`, `Cache-Control`… But it also normalized a way to use custom, non-standard, HTTP headers with an `X-` prefix. Some have almost become standard and are used very frequently. ### X-Forwarded-* diff --git a/snippets/haproxy.01.png b/code-snippets/haproxy.01.png similarity index 100% rename from snippets/haproxy.01.png rename to code-snippets/haproxy.01.png diff --git a/snippets/haproxy.02.png b/code-snippets/haproxy.02.png similarity index 100% rename from snippets/haproxy.02.png rename to code-snippets/haproxy.02.png diff --git a/code-snippets/haproxy.03.png b/code-snippets/haproxy.03.png new file mode 100644 index 0000000..29fc24e Binary files /dev/null and b/code-snippets/haproxy.03.png differ diff --git a/snippets/haproxy.04.png b/code-snippets/haproxy.04.png similarity index 100% rename from snippets/haproxy.04.png rename to code-snippets/haproxy.04.png diff --git a/snippets/haproxy.05.png b/code-snippets/haproxy.05.png similarity index 100% rename from snippets/haproxy.05.png rename to code-snippets/haproxy.05.png diff --git a/snippets/haproxy.06.png b/code-snippets/haproxy.06.png similarity index 100% rename from snippets/haproxy.06.png rename to code-snippets/haproxy.06.png diff --git a/snippets/haproxy.07.png b/code-snippets/haproxy.07.png similarity index 100% rename from snippets/haproxy.07.png rename to code-snippets/haproxy.07.png diff --git a/snippets/haproxy.08.png b/code-snippets/haproxy.08.png similarity index 100% rename from snippets/haproxy.08.png rename to code-snippets/haproxy.08.png diff --git a/snippets/haproxy.09.png b/code-snippets/haproxy.09.png similarity index 100% rename from snippets/haproxy.09.png rename to code-snippets/haproxy.09.png diff --git a/snippets/haproxy.10.png b/code-snippets/haproxy.10.png similarity index 100% rename from snippets/haproxy.10.png rename to code-snippets/haproxy.10.png diff --git a/snippets/haproxy.11.png b/code-snippets/haproxy.11.png similarity index 100% rename from snippets/haproxy.11.png rename to code-snippets/haproxy.11.png diff --git a/snippets/haproxy.13.png b/code-snippets/haproxy.13.png similarity index 100% rename from snippets/haproxy.13.png rename to code-snippets/haproxy.13.png diff --git a/snippets/haproxy.14.png b/code-snippets/haproxy.14.png similarity index 100% rename from snippets/haproxy.14.png rename to code-snippets/haproxy.14.png diff --git a/snippets/haproxy.15.png b/code-snippets/haproxy.15.png similarity index 100% rename from snippets/haproxy.15.png rename to code-snippets/haproxy.15.png diff --git a/snippets/haproxy.16.png b/code-snippets/haproxy.16.png similarity index 100% rename from snippets/haproxy.16.png rename to code-snippets/haproxy.16.png diff --git a/snippets/haproxy.17.png b/code-snippets/haproxy.17.png similarity index 100% rename from snippets/haproxy.17.png rename to code-snippets/haproxy.17.png diff --git a/snippets/haproxy.cfg b/code-snippets/haproxy.cfg similarity index 100% rename from snippets/haproxy.cfg rename to code-snippets/haproxy.cfg diff --git a/snippets/shell.01.png b/code-snippets/shell.01.png similarity index 100% rename from snippets/shell.01.png rename to code-snippets/shell.01.png diff --git a/snippets/shell.02.png b/code-snippets/shell.02.png similarity index 100% rename from snippets/shell.02.png rename to code-snippets/shell.02.png diff --git a/snippets/shell.03.png b/code-snippets/shell.03.png similarity index 100% rename from snippets/shell.03.png rename to code-snippets/shell.03.png diff --git a/snippets/shell.04.png b/code-snippets/shell.04.png similarity index 100% rename from snippets/shell.04.png rename to code-snippets/shell.04.png diff --git a/snippets/shell.sh b/code-snippets/shell.sh similarity index 100% rename from snippets/shell.sh rename to code-snippets/shell.sh diff --git a/code-snippets/varnish.01.png b/code-snippets/varnish.01.png new file mode 100644 index 0000000..b809437 Binary files /dev/null and b/code-snippets/varnish.01.png differ diff --git a/snippets/varnish.02.png b/code-snippets/varnish.02.png similarity index 100% rename from snippets/varnish.02.png rename to code-snippets/varnish.02.png diff --git a/snippets/varnish.03.png b/code-snippets/varnish.03.png similarity index 100% rename from snippets/varnish.03.png rename to code-snippets/varnish.03.png diff --git a/snippets/varnish.04.png b/code-snippets/varnish.04.png similarity index 100% rename from snippets/varnish.04.png rename to code-snippets/varnish.04.png diff --git a/snippets/varnish.vcl b/code-snippets/varnish.vcl similarity index 100% rename from snippets/varnish.vcl rename to code-snippets/varnish.vcl diff --git a/haproxyconf.drawio b/haproxyconf.drawio index b72b79f..1fa12aa 100644 --- a/haproxyconf.drawio +++ b/haproxyconf.drawio @@ -1 +1 @@ -7Vtbk5s2FP41fkwGEGD8mL1lp0manW6bZvuS0YIM6srIEbLXzq+vwOIqjPEF43U94wd0JGFxvvN9EkdiAK4ni48MToMv1ENkYGjeYgBuBoahm4YxiH+at1xZHMdeGXyGPdkoNzziX0gaNWmdYQ9FpYacUsLxtGx0aRgil5dskDH6Wm42pqT8r1PoI8Xw6EKiWv/GHg+kVbdHecU9wn4g/9oxhquKCUwbyyeJAujR14IJ3A7ANaOUr64mi2tEYuelfln1u1tTmw2MoZC36XD7KQrR3Zev7v1fkz+8n874T3b3TpePMYdkJp9YjpYvUxe8Bpijxyl04/KrgHkArgI+IaKki8sxDfkdnGASI/yJTvALFP0fCXZfRG3EGX3JXGfE7TEh15RQJsoeGsMZEcO/8mAUIE/eMnpB3A3SQuo3TRR8AqNIXsuRI8bRYq1P9MzTIkQRnSDOlqKJ7GCMJDgyOs20/JpjDRxpCwow66kRyvjys3vnEIgLicIWiJimAgDyREjKImU8oD4NIbnNrVfujM0z7zE6C716X+a9P1M6lcZ/EedLyTw447QML1pg/r1w/RR7/70lSzcLCUZSWMpCc0jEtfLvdCceIZ0xFz0ghoUHEYsjDYe+qAWikkPmI76mshxcIIuJ2GHNESH8m/xrEzWk2iQDaGhngPoQY4hAjuflgRw8XPThhcAFAht2WwKPuiLwUPF/TkhtNw5ug9Bm0jTRDYXpHGxWYdyNWtrSvPn2I9Bv/vltHP0uLj8+Be9Gbal1JGY1DbJArDsmcBAeGhh2EvLPTFz5PPGN/XMWT+RCB4VPBba5ZUM47EXORErlnbVastZAWIOYwsG1hANpl5Rww6FCON2sIZzVFd90Bacr6L5sgGmMTxujvUTR0rUTw8i5aOKm5YbRUhPNPlcbxi5cm0MW4ig4V7ZVFREM9b4VUV0CviG6RaIrLxDuOPQDLem3JhaOQz+w05IEhye/JDnodNc/AUcNDt7xNbyv6U5gwJbfJZZJoZAAiIt5BiApLYul7B9S43aJjDT1kKcbngo19amHrvTBbKkPdp/6YCr6MHfJD4bc+XkxvjrlWob61n/kKVff4OE3RPmuKGS1pNC++TTZ9YGKiS+PGduopHrtSixI9616VcIhG8buEWLVcvN5tXwWHI2m58XR6qx8AhzVGjz81qblHbLycWHPGbkrabBbSoPViTRYFWmwQSUEJTBdSYOtSIML3QAp0RoFcBpfukuCRdgysFkVnlcB/vk5MwjB8ZOw/zrj4jYoRVZuyFhbBnUX0mFaFTw0VTrsGuWoKvrhlMNRELr/8MDoYqlgJJ6alyGABPthjBoKE95dxb7BLiQfZMUEe15CNTEJ4F/wORPpaRxwybNYVwPrJr6XEKAUqQyKdC8mpDGape2Z1LTVfhyjXLCJhoPudmmACuioBtAqDw+Xx9IUQL+lWaoLoNsDatZsu9XtunUHqKqhCpKx7E1by5U8UCLRG2THONo7aQgqeQldzUvURf2wMyepa9C3tuZsAH8tDpWFqK6G6vCYy1BDfUv/P6BglUCwesZAzaRGSKxzWXTWUPTlbtNoq87dqbFeVeOaRaWu1XjF6Syb3+Ls3f5eaQCktWL2PG8BVTGvCUbxUuoc2LqKg/VrrZ7nK9Bi1ZC+mYpnhYQgQn0GJ/GCt5BuKNUV8hAbUcILlKY+WqJWPFzY8vhaOXA6RnZZhmwDr4zOZFl9CzoRASovFuye5Uedvc5JfkytEYre5Uddql3kZz9kT0V+1JN7fctPbxKjKvFZScyGbFLfEtMiEC8SsxWypyIxQAHy8jFNHx/TgJrzM+tP3fd2fsZqkNsj7BAbGzHafodYe+9YxeNT2tpgM9+DtOGe28TrvwXKjpNlhXbHyQ4Yim33mvc9aN1yr9msaN+avWb1Rk75RpYDyjfq+DyLaZ8fV8qyPNxwnOLgnKgcsTS6IcVeX2R1czbrcKQYdUWKQXzUOv1Ue9U8/+Ad3P4H \ No newline at end of file +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 \ No newline at end of file diff --git a/images/schema-boost.png b/images/schema-boost.png new file mode 100644 index 0000000..1e6fa28 Binary files /dev/null and b/images/schema-boost.png differ diff --git a/images/schema-haproxy.png b/images/schema-haproxy.png new file mode 100644 index 0000000..9e1311a Binary files /dev/null and b/images/schema-haproxy.png differ diff --git a/images/schema-varnish.png b/images/schema-varnish.png new file mode 100644 index 0000000..6cca997 Binary files /dev/null and b/images/schema-varnish.png differ diff --git a/images/varnish-logo.png b/images/varnish-logo.png new file mode 100644 index 0000000..205c904 Binary files /dev/null and b/images/varnish-logo.png differ diff --git a/images/with-proxy-protocol.png b/images/with-proxy-protocol.png new file mode 100644 index 0000000..a8717ee Binary files /dev/null and b/images/with-proxy-protocol.png differ diff --git a/images/without-proxy-protocol.png b/images/without-proxy-protocol.png new file mode 100644 index 0000000..ae24bf5 Binary files /dev/null and b/images/without-proxy-protocol.png differ diff --git a/snippets/haproxy.03.png b/snippets/haproxy.03.png deleted file mode 100644 index dd8166a..0000000 Binary files a/snippets/haproxy.03.png and /dev/null differ diff --git a/snippets/varnish.01.png b/snippets/varnish.01.png deleted file mode 100644 index 5563af1..0000000 Binary files a/snippets/varnish.01.png and /dev/null differ