diff options
| author | Christian Cleberg <[email protected]> | 2025-11-11 22:49:13 -0600 |
|---|---|---|
| committer | Christian Cleberg <[email protected]> | 2025-11-11 22:49:13 -0600 |
| commit | 51a7a02f0c96d49b68fbcc155414c218207fa270 (patch) | |
| tree | 845af8aad0e8769352efc02fcd1044eed9cc1ec1 /content/blog/2022-04-02-nginx-reverse-proxy.org | |
| parent | 7d3e80ebf1dc770eac0e21890b74f18ba2d15a6b (diff) | |
| download | cleberg.net-51a7a02f0c96d49b68fbcc155414c218207fa270.tar.gz cleberg.net-51a7a02f0c96d49b68fbcc155414c218207fa270.tar.bz2 cleberg.net-51a7a02f0c96d49b68fbcc155414c218207fa270.zip | |
fix grammar in 2022 posts
Diffstat (limited to 'content/blog/2022-04-02-nginx-reverse-proxy.org')
| -rw-r--r-- | content/blog/2022-04-02-nginx-reverse-proxy.org | 135 |
1 files changed, 64 insertions, 71 deletions
diff --git a/content/blog/2022-04-02-nginx-reverse-proxy.org b/content/blog/2022-04-02-nginx-reverse-proxy.org index d6fa8b0..c7d2602 100644 --- a/content/blog/2022-04-02-nginx-reverse-proxy.org +++ b/content/blog/2022-04-02-nginx-reverse-proxy.org @@ -5,10 +5,10 @@ * What is a Reverse Proxy? -A reverse proxy is a server that is placed between local servers or -services and clients/users (e.g., the internet). The reverse proxy -intercepts all requests from clients at the network edge and uses its -configuration files to determine where each request should be sent. +A reverse proxy is a server that is placed between local servers or services and +clients/users (e.g., the internet). The reverse proxy intercepts all requests +from clients at the network edge and uses its configuration files to determine +where each request should be sent. ** A Brief Example @@ -18,23 +18,21 @@ For example, let's say that I run three servers in my home: - Server02 (=service01.example.com=) - Server03 (=service02.example.com=) -I also run a reverse proxy in my home that intercepts all public -traffic: +I also run a reverse proxy in my home that intercepts all public traffic: - Reverse Proxy -Assume that I have a domain name (=example.com=) that allows clients to -request websites or services from my home servers. +Assume that I have a domain name (=example.com=) that allows clients to request +websites or services from my home servers. -In this case, the reverse proxy will intercept all traffic from -=example.com= that enters my network and determine if the client is -requesting valid data, based on my configuration. +In this case, the reverse proxy will intercept all traffic from =example.com= +that enters my network and determine if the client is requesting valid data, +based on my configuration. -If the user is requesting =example.com= and my configuration files say -that Server_{01} holds that data, Nginx will send the user to -Server_{01}. If I were to change the configuration so that =example.com= -is routed to Server_{02}, that same user would be sent to Server_{02} -instead. +If the user is requesting =example.com= and my configuration files say that +Server_{01} holds that data, Nginx will send the user to Server_{01}. If I were +to change the configuration so that =example.com= is routed to Server_{02}, that +same user would be sent to Server_{02} instead. #+begin_src txt ┌──────┐ ┌───────────┐ @@ -50,9 +48,9 @@ instead. * Reverse Proxy Options -There are a lot of options when it comes to reverse proxy servers, so -I'm just going to list a few of the options I've heard recommended over -the last few years: +There are a lot of options when it comes to reverse proxy servers, so I'm just +going to list a few of the options I've heard recommended over the last few +years: - [[https://nginx.com][Nginx]] - [[https://caddyserver.com][Caddy]] @@ -60,42 +58,41 @@ the last few years: - [[https://www.haproxy.org/][HAProxy]] - [[https://ubuntu.com/server/docs/proxy-servers-squid][Squid]] -In this post, we will be using Nginx as our reverse proxy, running on -Ubuntu Server 20.04.4 LTS. +In this post, we will be using Nginx as our reverse proxy, running on Ubuntu +Server 20.04.4 LTS. * Nginx Reverse Proxy Example ** Local Applications -You may be like me and have a lot of applications running on your local -network that you'd like to expose publicly with a domain. +You may be like me and have a lot of applications running on your local network +that you'd like to expose publicly with a domain. -In my case, I have services running in multiple Docker containers within -a single server and want a way to visit those services from anywhere -with a URL. For example, on my local network, -[[https://dashy.to][Dashy]] runs through port 4000 (=localhost:4000=) -and [[https://github.com/louislam/uptime-kuma][Uptime Kuma]] runs -through port 3001 (=localhost:3001=). +In my case, I have services running in multiple Docker containers within a +single server and want a way to visit those services from anywhere with a URL. +For example, on my local network, [[https://dashy.to][Dashy]] runs through port 4000 +(=localhost:4000=) and [[https://github.com/louislam/uptime-kuma][Uptime Kuma]] runs through port 3001 (=localhost:3001=). In order to expose these services to the public, I will need to do the following: -1. Set up DNS records for a domain or subdomain (one per service) to - point toward the IP address of the server. -2. Open up the server network's HTTP and HTTPS ports (80 & 443) so that - the reverse proxy can accept traffic and determine where to send it. +1. Set up DNS (Domain Name System) records for a domain or subdomain (one per + service) to point toward the internet protocol (IP) address of the server. +2. Open up the server network's HTTP (Hypertext Transfer Protocol) and HTTPS + (Hypertext Transfer Protocol Secure) ports (80 & 443) so that the reverse + proxy can accept traffic and determine where to send it. 3. Install the reverse proxy software. -4. Configure the reverse proxy to recognize which service should get - traffic from any of the domains or subdomains. +4. Configure the reverse proxy to recognize which service should get traffic + from any of the domains or subdomains. ** Step 1: DNS Configuration -To start, update your DNS configuration so that you have an =A= record -for each domain or subdomain. +To start, update your DNS configuration so that you have an =A= record for each +domain or subdomain. -The =A= records should point toward the public IP address of the server. -If you don't know the public IP address, log in to the server and run -the following command: +The =A= records should point toward the public IP address of the server. If you +don't know the public IP address, log in to the server and run the following +command: #+begin_src sh curl ifconfig.co @@ -111,34 +108,30 @@ dashy.example.com A xxx.xxx.xxx.xxx www CNAME example.com #+end_src -Finally, ensure the DNS has propagated correctly with -[[https://dnschecker.org][DNS Checker]] by entering your domains or -subdomains in the search box and ensuring the results are showing the -correct IP address. +Finally, ensure the DNS has propagated correctly with [[https://dnschecker.org][DNS Checker]] by entering +your domains or subdomains in the search box and ensuring the results are +showing the correct IP address. ** Step 2: Open Network Ports -This step will be different depending on which router you have in your -home. If you're not sure, try to visit -[[http://192.168.1.1][192.168.1.1]] in your browser. Login credentials -are usually written on a sticker somewhere on your modem/router. +This step will be different depending on which router you have in your home. If +you're not sure, try to visit [[http://192.168.1.1][192.168.1.1]] in your browser. Login credentials are +usually written on a sticker somewhere on your modem/router. -Once you're able to log in to your router, find the Port Forwarding -settings. You will need to forward ports =80= and =443= to whichever -machine is running the reverse proxy. +Once you're able to log in to your router, find the Port Forwarding settings. +You will need to forward ports =80= and =443= to whichever machine is running +the reverse proxy. -In my case, the table below shows the port-forwarding rules I've -created. In this table, =xxx.xxx.xxx.xxx= is the local device IP of the -reverse proxy server, it will probably be an IP between =192.168.1.1= -and =192.168.1.255=. +In my case, the table below shows the port-forwarding rules I've created. In +this table, =xxx.xxx.xxx.xxx= is the local device IP of the reverse proxy +server, it will probably be an IP between =192.168.1.1= and =192.168.1.255=. | NAME | FROM PORT | DEST PORT/IP | ENABLED | |-------+-----------+-----------------+---------| | HTTP | 80 | xxx.xxx.xxx.xxx | TRUE | | HTTPS | 443 | xxx.xxx.xxx.xxx | TRUE | -Once configured, these rules will direct all web traffic to your reverse -proxy. +Once configured, these rules will direct all web traffic to your reverse proxy. ** Step 3: Nginx Installation @@ -148,11 +141,11 @@ To install Nginx, simply run the following command: sudo apt install nginx #+end_src -If you have a firewall enabled, open up ports =80= and =443= on your -server so that Nginx can accept web traffic from the router. +If you have a firewall enabled, open up ports =80= and =443= on your server so +that Nginx can accept web traffic from the router. -For example, if you want to use =ufw= for web traffic and SSH, run the -following commands: +For example, if you want to use =ufw= for web traffic and SSH, run the following +commands: #+begin_src sh sudo ufw allow 'Nginx Full' @@ -162,9 +155,8 @@ sudo ufw enable ** Step 4: Nginx Configuration -Now that we have domains pointing toward the server, the only step left -is to configure the reverse proxy to direct traffic from domains to -local services. +Now that we have domains pointing toward the server, the only step left is to +configure the reverse proxy to direct traffic from domains to local services. To start, you'll need to create a configuration file for each domain in =/etc/nginx/sites-available/=. They will look identical except for the @@ -204,22 +196,23 @@ server { } #+end_src -Once the configuration files are created, you will need to enable them -with the =symlink= command: +Once the configuration files are created, you will need to enable them with the +=symlink= command: #+begin_src sh sudo ln -s /etc/nginx/sites-available/dashy.example.com /etc/nginx/sites-enabled/ #+end_src -Voilà! Your local services should now be available through their URLs. +Voilà! Your local services should now be available through their URLs (uniform +resource locators). * HTTPS with Certbot -If you've followed along, you'll notice that your services are only -available via HTTP (not HTTPS). +If you've followed along, you'll notice that your services are only available +via HTTP (not HTTPS). -If you want to enable HTTPS for your new domains, you will need to -generate SSL/TLS certificates for them. The easiest way to generate +If you want to enable HTTPS for your new domains, you will need to generate TLS +(Transport Layer Security) certificates for them. The easiest way to generate certificates on Nginx is [[https://certbot.eff.org][Certbot]]: #+begin_src sh |
