misc
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
Michael Zhang 2023-07-04 04:42:47 -05:00
parent 3f6bdacaf6
commit 98d3dddc41

View file

@ -5,13 +5,17 @@ tags = ["web", "learn-by-implementing"]
draft = true draft = true
+++ +++
Nginx is a powerful tool but also comes with many knobs, which may make it [Nginx] is a powerful tool but also comes with many knobs, which may make it
intimidating for lots of newcomers. In this post, let's rewrite its core intimidating for lots of newcomers. In this post, let's rewrite its core
functionality using a few lines of code to understand what it's doing. functionality using a few lines of code to understand what it's doing.
[nginx]: https://nginx.org/
<!--more--> <!--more-->
To begin, what's a reverse proxy? To begin, what's a [reverse-proxy]?
[reverse-proxy]: https://en.wikipedia.org/wiki/Reverse_proxy
- A proxy usually lets you access a site through some gateway when reaching that - A proxy usually lets you access a site through some gateway when reaching that
site when your client is sitting behind some intercepting firewall site when your client is sitting behind some intercepting firewall
@ -28,16 +32,35 @@ details. Which means it can:
- Apply authentication - Apply authentication
- Serve raw files without a server program - Serve raw files without a server program
I'm going to implement this using Deno. I'm going to implement this using [Deno].
<details> [deno]: https://deno.land/
<summary>Imports</summary>
```ts > **&#x1f4a1; This is a literate document.** I wrote a [small utility][3] to
import { serve } from "https://deno.land/std@0.192.0/http/mod.ts"; > extract the code blocks out of markdown files, and it should produce working
const PORT = parseInt(Deno.env.get("PORT") || "8314"); > example for this file. If you have the utility, then running the following
``` > should get you a copy of all the code extracted from this blog post:
</details> >
> [3]: https://git.mzhang.io/michael/markout
>
> ```
> markout --lang ts path/to/posts/2023-07-04-learn-by-implementing-nginx.md > program.ts
> ```
>
> It can then be executed with Deno:
>
> ```
> deno run --allow-net program.ts
> ```
>
> <details>
> <summary>Imports</summary>
>
> ```ts
> import { serve } from "https://deno.land/std@0.192.0/http/mod.ts";
> const PORT = 8314;
> ```
> </details>
Deno implements an HTTP server for us. On a really high level, what this means Deno implements an HTTP server for us. On a really high level, what this means
is it starts listening for TCP connections, and once it receives one, listens is it starts listening for TCP connections, and once it receives one, listens