When setting up a server, a huge number of things have to be lined up correctly, or your server won't serve. The program might be on the wrong port, your reverse proxy might be wrong, something else might already be listening...the list goes on.

Figuring out what is actually wrong is a huge pain. Usually all you know is that your browser says "no connection". Surely we can do better! y no server (yno) is a tool that automatically checks many aspects of your connection to help you troubleshoot these problems.

Examples

These examples demonstrate various setups with a process called echo listening on port 8000 and caddy acting as a reverse proxy from yno.bvisness.me to port 8000.

yno works with local addresses:

$ sudo yno localhost:8000
Final report:
✅ Hostname "localhost" is valid and can be resolved by DNS
❌ Server is not listening on port 8000
❌ HTTP requests / responses are not working
$ sudo yno localhost:8000
Final report:
✅ Hostname "localhost" is valid and can be resolved by DNS
✅ Server is listening on port 8000
✅ HTTP requests / responses are working
✅ Request arrived at this server

But more importantly, it works with domain names. Besides doing some domain name and IP checks, it will actually make a request and trace all packets on the system to see if it comes through.

$ sudo yno yno.bvisness.me
1 programs handled the incoming traffic:
- caddy (PID 74202, port 80)

5 packets were involved in this check (2 omitted here):
- :35580 -> *:80 (caddy, PID 74202)
GET / HTTP/1.1
Host: yno.bvisness.me:80
User-Agent: Go-http-client/1.1
X-Ynoserver: lw88VzKdcTr7p9bp
Accept-Encoding: gzip

- *:80 (caddy, PID 74202) -> :35580
HTTP/1.1 308 Permanent Redirect
Connection: close
Location: https://yno.bvisness.me/
Server: Caddy
Date: Sun, 16 Apr 2023 20:46:36 GMT
Content-Length: 0

- *:80 (caddy, PID 74202) -> :35580 (TCP ACK, FIN)

Final report:
✅ Hostname "yno.bvisness.me" is valid and can be resolved by DNS
✅ DNS records for yno.bvisness.me lead to this server
✅ Server is listening on port 80 (and port 443)
❌ HTTP requests / responses are not working

Here the packet capture allows you to see that caddy is redirecting HTTP to HTTPS.

Maybe you accidentally disabled plain HTTP - yno can tell you that.

$ sudo yno yno.bvisness.me
Final report:
✅ Hostname "yno.bvisness.me" is valid and can be resolved by DNS
✅ DNS records for yno.bvisness.me lead to this server
❌ Server is not listening on port 80 (but it is listening on port 443)
❌ HTTP requests / responses are not working

Or, maybe something upstream is wrong! Here's what you see if traffic never arrives at all:

$ sudo yno bvisness.me
Final report:
✅ Hostname "bvisness.me" is valid and can be resolved by DNS
⚠️ DNS records for bvisness.me do not lead to this server
❌ Server is not listening on port 80 (but it is listening on port 443)
✅ HTTP requests / responses are working
❌ Request never arrived at this server (who are you talking to?)
   - Request went to [2600:1f16:690:5d00:c943:f237:7adf:d2c7]:443
   - bvisness.me resolved to these IP addresses:
     - 2600:1f16:690:5d00:c943:f237:7adf:d2c7
     - 3.19.0.176
   - This server's external IP addresses:
     - 2600:1f16:690:5d00:c4d2:84ff:b3aa:c976
     - 18.221.241.231

Recent Activity

Here's a bug you may not have considered, that &yno could help you catch.

A few more &yno scenarios, all trying to verify if plain old HTTP requests are working.

  1. Caddy is trying to force all traffic to HTTPS, which doesn't work. yno shows you the redirect packets.
  2. Caddy is now only handling HTTPS, rejecting my initial request.
  3. I have now forced Caddy to use HTTP, and things work!

This was real debugging; I didn't mean to configure Caddy this way, and yno actually helped me find the issue 😁

Finally have something to show! &yno is performing a battery of checks to figure out why HTTP connections aren't working, including sniffing packets to figure out which programs are actually handling the traffic despite connections not working.