Tool.Yun
Handy tools for developers
Barcode Reader
Barcode generator
GTIN Validator
QR Code decoder
QR Code generator
QR Contact Info generator
WiFi QR Code generator
tools.epc-qrcode-generator.name
Bash Cheatsheet
CSS Selectors Cheatsheet
Common Regex Cheatsheet
Docker Cheatsheet
Docker Compose cheatsheet
Docker SWARM cheatsheet
Dockerfile cheatsheet
Git Semantic Commit Cheatsheet
Git cheatsheet
JSONPath Syntax Cheatsheet
Jq Cheatsheet
K8s Cheatsheet
Markdown Cheat Sheet
Nano CheatSheet
Nginx Cheatsheet
Powershell Cheatsheet
Regex cheatsheet
Screen Command Cheatsheet
Sed cheatsheet
Tmux Command Cheatsheet
VIM Cheatsheet
XPath Syntax Cheatsheet
Zellij Command Cheatsheet
chmod Command Cheatsheet
Base64 Hex array encoder/decoder
Base64 file converter
Base64 string encoder/decoder
Csv to Data
Data Storage Unit converter
Email normalizer
Energy Consumption and Expense Computer
Env Variables Format Converter
Excel to data
Geographic Coordinates Converter
Integer base converter
Many Units Converter
Properties converter
Roman numeral converter
Text to UTF-8 binary
Text to Unicode
Torrent to Magnet
ULID generator
Unicode Characters to Java Entities Converter
dBm mW Converter
AGE Cryptography
Ansible vault crypt decrypt
Argon2 Hasher
Bcrypt
Bech32 Encoder/Decoder
CRC calculator
CSR Generator
Certificate/Key parser
ECDSA key pair generator
Ed25519 key pair generator
Encrypt / decrypt text
File Hasher
Hash text
Hmac generator
JWT Generator
JWT parser
Jasypt String Encryption
Niceware Bytes to Passphrase
PGP File Encryption
PGP encryption
PGP keygen
Paseto/PASERK Local
Paseto/PASERK Public/Private
RSA encryption
RSA key pair generator
RSA/DSA/ECDSA Signer and Verifier
SAML Parser
SSL Certificate converter
Shamirs Secret Sharing
X509 certificate generator
BMI Calculator
Calendar Converter
Credit Card Checker
Currency Converter
Explain Shell Command
IBAN validator and parser
IES Lighting Guidelines
ISBN Validator and Parser
ISO 3166 Country Codes Searcher
ISO 639 Searcher
Luhn Validator
Online Dictionary
Phone parser and formatter
RMB Uppercase Converter
Running Pace Calculator
SLA calculator
Software licence compatibility
Unicode Search
VAT Numbers Validator
Chronometer
Countdown
Cron/Weekday Alarm
Date+Durations Calculator
Date-time converter
Days Calculator
Duration Calculator
ETA calculator
ICAL File Parser
ICAL Generator
TTL calculator
Time Alarm
Timezone Converter
Week Numbers Converter
Which Day?
iCal Merger
Cron Expression Builder
ANSI Escape Tester
API Tester
CSS/JS Prettify & Minify
Cli command editor
Code/Scripts Highlighter
Curl Converter
Data Faker
Database Connection String Builder
Database Creation Builder
Database Table Generator
Django Secret Generator
Favicon Generator
File Splitter
GitIgnore Generator
Gitattributes Generator
HEX File Converter
Javascript Obfuscator
Javascript Prettifier
Javascript Unobfuscator/Unpacker
Json to Protobuf
Json to SQL INSERT
Json to Typescript
K6 Load Testing Script Generator
Mailto Generator
Open graph meta generator
Picomatch Tester
Pomodoro Timer
Quote Converter
SQL Minifier
SQL Parameters Generator
SQL prettify and format
Stacktrace prettier
String Escaper
Swagger UI tester
Docker Compose Format Converter
Docker Compose Validator
Docker Compose to .env file
Docker Compose to Docker run converter
Docker Compose to Quadlets
Docker Image Downloader
Docker Pangolin Labels
Docker compose to kubernetes
Docker inspect to Docker run
Docker run to Docker compose converter
Docker run to Quadlets
Docker run to kubernetes
Dockerfile Label Generator
Kubernetes RBAC Generator
Traefik Docker Compose Maker
Amortization Calculator
ActiveDirectory LDAP properties searcher
Bounce Email Parser
Cookies Parser
DMARC Report Analyzer
DNS Propagation Tester
DNS Tester
Dead Pixel Tester
EMV TLV decoder
ETH Transaction Decoder
Email Parser
File Type Detector
Floating point number converter
GZip/Deflate converter
HTTPS Tester
Hex Encoder/Decoder
Keycode info
MIME Encoding Converter
Middle-Endian Converter
MongoDB ObjectId Converter
Nmap Command Builder
Outlook MSG Parser
Outlook Safelink decoder
Parquet files Reader
RJ45 Cat6 Wiring Cheatsheet
Resistor Calculator
SMART Raw Converter
Sensitive data masker
Serial Port Console
Sharepoint Share Url Decoder
Short Urls Expander
Snowflake ID extractor
TCPDump Generator
Text Charset Detector/Decoder
URL Builder
URL parser
键盘测试器
Card Picker
Coin Flipper
Dice Roller
Fortune wheel
BIP39 passphrase generator
Diceware Password Generator
NanoIDs generator
Numeronym generator
OTP code generator
Passphrase Generator
Pin Code Generator
Random numbers generator
Token generator
UUID converter
UUIDs generator
Camera recorder
Crop image
GIF to MP4
HEIC Converter
ICO/PNG converter
Image Color Inverter
Image Comparer
Image EXIF/Metadata/GPS/JPEG Quality reader
Image Formats Converter
Image resizer
Image to SVG (potrace)
OCRize image and PDF
Remove EXIF
Remove Image Background
SVG Previewer
Watermarker
CSV to JSON
JS to JSON converter
JSON Editor
JSON Flattener/Unflattener
JSON Linter
JSON Merger
JSON diff
JSON minify
JSON prettify and format
JSON sort master
JSON to .env
JSON to C#
JSON to CSV
JSON to Data
JSON to Go
JSON to JS converter
JSON to Java Entity
JSON to MessagePack
JSON to TOML
JSON to TS
JSON to XML
JSON to YAML converter
JSON to object
Jq/JSONPath Tester
Json Escaper/Unescaper
Json Query
Json Size Analyzer
Json string converter
Json to PHP Code
Json to PHP-Array
Json to Python
Json to SQL DDL
Json to Schema
Message Pack to JSON
ObjGen to JSON
PHP-Array to JSON
tools.json-patch.name
Epub to Markdown
Format Converter
HTML to markdown
Markdown Diff
Markdown Editor
Markdown Lorem Ipsum
Markdown Table Generator
Markdown Table Prettifier
Markdown preview
Markdown to DOCX
Markdown to HTML
Markdown to Text
Markdown to data
Markdown toc generator
Paste as Markdown
Binary Calculator
Math Formats Converter
Math OCR
Math evaluator
Tip calculator
Trigonometric/Equation Curve Visualizer
Aspect Ratio Calculator
Benchmark builder
Geo distance calculator
Percentage calculator
ARPA Decoder
Apache LogRotate Generator
BIMI DNS Generator
Basic auth generator
Chmod calculator
Cloudflare DNS/RDAP Queries
Crontab generator
Curl Command Generator
DKIM DNS Generator
DMARC DNS Generator
DNS Queries
DNSBL Checker
Data Transfer Rate Calculator
FStab Generator
HAR Sanitizer
HDD calculator
HTAccess generator
Htpasswd/htaccess generator
IP Geo Location
IP Subnets Exclude Calculator
IPv4 Subnets Lister
IPv4 address converter
IPv4 range expander
IPv4 subnet calculator
IPv4-6/IPRange/CIDR in IPRange/CIDR/IPMask
IPv4/6 Range to CIDR(s) Calculator
IPv6 ULA generator
Integers to IPv4/IPv6
Iptables Generator
Ipv4/6 CIDR to IP Range Calculator
Ipv6 address converter
Ipv6 subnet calculator
MAC Address Converter
MAC address generator
MAC address lookup
Microphone Tester
Multi link downloader
My IP Address
Nginx formatter
Option43 generator
PTR DNS Generator
Password strength analyser
Ping
Port Numbers
Punycode Converter
RAID Calculator
RAID Reliability Calculator
Random port generator
Restic Command Generator
Rsync Generator
SIP Authorization
SPF DNS generator
Shell Commands Formatter
Shell Commands Linearizer
Shutdown Command Generator
TCP/UDP Port Tester
UFW Command Generator
Visual Subnet Calculator
WPA PSK generator
Websocket tester
Whois Checker
Wireguard Config Generator
X-VR-SpamCause Decoder
ZPOOL RAID calculator
ZPool Cheatsheet
Zxcvbn Password Strength
firewalld command line generator
tools.url-redirection-checker.name
HTML to PDF
PDF Compressor
PDF Text Extractor
PDF signature checker
Pdf Concatener
Pdf Decrypt and Unlock
Pdf Encrypt
Pdf Linearize/FastWeb
Pdf Page Extractor
Acceleration Converter
Angle Units Converter
Area Units Converter
Energy Units Converter
Fitness Computer
Food Energy Converter
Force Units Converter
Frequency Converter
Illuminance Converter
Length Units Converter
Mass Units Converter
Power Converter
Pressure Units Converter
SI Prefixes Converter
Speed Converter
Temperature converter
Volume Flow Rate Converter
Volume Units Converter
TOML Linter
TOML to JSON
TOML to YAML
AI Prompt Splitter
ASCII Art Text Generator
Case converter
Citation Generator
Distinct Words
Duplicate Lines Finder
Emoji picker
Extract text from HTML
Folder Structure Diagram
Font Compare
GPT Token Encoder/Decoder
GPT Token Estimator
I and L Checker
Image to ASCII Art
JSON to TOON
Keyboard Layout Converter
Levenshtein Calculator
List converter
Lists Comparer
Lorem ipsum generator
Mermaid exporter
Morse Code Converter
Pack files for AI
RSVP Reader
Random Line Picker
Regex Tester
Rune converter
Sed Command generator
Smart Text Replacer and Linebreaker
Social Link Sharer
String obfuscator
TOON to JSON
Tab to Spaces
Text Translator
Text diff
Text statistics
Text to NATO alphabet
Text to Unicode Names
Unicode Formatter
Unicode to GSM-7
Zalgo Generator/Banner
CSS Gradient Generator
CSS Units Converter
CSS XPath Converter
Color Contrast Checker
Color Wheel
Color converter
Css prettifier
Device information
Encode/decode url formatted strings
Escape HTML entities
HTML Minifier
HTML Prettifier
HTML WYSIWYG editor
HTML cleaner
HTML to XHTML
HTML to data
HTTP status codes
Image to CSS
MIME types
REM Pixel converter
SVG placeholder generator
Slugify string
UTM Url Generator
Url Cleaner
Url Fanger
Url Text Search Fragment Maker
User-agent parser
ObjGen to HTML
XML Linter
XML formatter
XML to JSON
XPath Tester
XSLT tester
YAML Flattener/Unflattener
YAML Merger
YAML prettify and format
YAML to JSON converter
YAML to TOML

Nginx Cheatsheet

Nginx configuration and useful commands

nginx is a web server, reverse proxy and load balancer. Configuration is a tree of contexts — main → events / http → server → location — and a directive is only valid in the contexts that define it.

🛠 Service & CLI

# check the configuration before you break production
sudo nginx -t

# print the entire resolved configuration, includes and all
sudo nginx -T

# reload without dropping connections
sudo nginx -s reload
sudo systemctl reload nginx

# start, stop, restart, status
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo systemctl status nginx

# version, and the modules it was built with
nginx -V

# enable a site (Debian/Ubuntu layout)
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

# watch the requests come in
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log

💡 nginx -t then nginx -s reload — never restart on a live server if you can avoid it. A reload keeps existing connections alive; a restart drops them.

📁 Where Things Live

PathWhat it holds
/etc/nginx/nginx.confThe main file — worker settings and the http block
/etc/nginx/conf.d/*.confIncluded by default on RHEL-style installs
/etc/nginx/sites-available/Site configs on Debian/Ubuntu
/etc/nginx/sites-enabled/Symlinks to the sites that are actually live
/var/log/nginx/access.logEvery request
/var/log/nginx/error.logErrors, and anything the workers complain about
/var/www/htmlThe conventional document root

🧱 Config Skeleton

user www-data;
worker_processes auto;

events {
  worker_connections 1024;
}

http {
  include       /etc/nginx/mime.types;
  default_type  application/octet-stream;
  sendfile      on;
  keepalive_timeout 65;

  server {
    listen 80;
    server_name example.com;

    location / {
      root /var/www/html;
      index index.html;
    }
  }
}

🎧 listen & server_name

server {
  # plain HTTP
  listen 80;

  # HTTPS, with HTTP/2
  listen 443 ssl;
  http2 on;

  # IPv6 as well, or IPv6 only
  listen [::]:80;
  listen [::]:80 ipv6only=on;

  # the fallback server for requests that match no other server_name
  listen 80 default_server;

  # one name, several names, wildcards, or a regex
  server_name example.com;
  server_name example.com www.example.com;
  server_name *.example.com;
  server_name ~^(?<sub>.+)\.example\.com$;

  # requests that arrive with no Host header
  server_name "";
}

📄 Serving Files

server {
  listen 80;
  server_name example.com;
  root /var/www/example.com;
  index index.html index.htm;

  # try the file, then the directory, then fall back — the SPA pattern
  location / {
    try_files $uri $uri/ /index.html;
  }

  # cache fingerprinted assets hard
  location ~* \.(js|css|png|jpe?g|gif|svg|woff2?)$ {
    expires 1y;
    add_header Cache-Control "public, immutable";
    access_log off;
  }

  # a directory listing, when you actually want one
  location /downloads/ {
    autoindex on;
  }

  # a single file
  location = /robots.txt {
    root /var/www/example.com;
    log_not_found off;
  }
}

⚠️ root vs alias: root appends the whole URI to the path, alias replaces the matched prefix. With location /static/ { root /var/www; } a request for /static/a.png reads /var/www/static/a.png; with alias /var/www/assets/; it reads /var/www/assets/a.png. Always end an alias path with /.

📍 Location Matching

nginx does not pick locations top to bottom — it picks by modifier, in this order:

ModifierExampleMeaningPriority
=location = /healthExact match1 — wins immediately
^~location ^~ /static/Prefix match that stops regex matching2
~location ~ \.php$Case-sensitive regex, first match in file order3
~*location ~* \.(jpe?g)$Case-insensitive regex3
(none)location /images/Prefix match — the longest one wins if no regex did4
location = /health { return 200 "ok\n"; }   # checked first, cheapest
location ^~ /assets/ { root /var/www; }     # never falls through to the regex below
location ~* \.(png|jpg)$ { expires 30d; }
location / { try_files $uri $uri/ =404; }   # the catch-all

🔀 Redirects & Rewrites

# permanent redirect to the canonical host
server {
  listen 80;
  server_name www.example.com;
  return 301 https://example.com$request_uri;
}

# force HTTPS
server {
  listen 80;
  server_name example.com;
  return 301 https://$host$request_uri;
}

# temporary redirect of a single path
location /old-page {
  return 302 /new-page;
}

# rewrite with a captured segment
location /blog/ {
  rewrite ^/blog/(.*)$ /articles/$1 permanent;
}

# serve a maintenance page for everyone but your own IP
location / {
  if ($remote_addr != 203.0.113.7) {
    return 503;
  }
}

💡 Prefer return over rewrite — it is faster and clearer. Reach for rewrite only when you need to transform the path.

🔁 Reverse Proxy

server {
  listen 80;
  server_name app.example.com;

  location / {
    proxy_pass http://127.0.0.1:3000;

    # pass the client's details through to the app
    proxy_set_header Host              $host;
    proxy_set_header X-Real-IP         $remote_addr;
    proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;

    # timeouts: raise these for slow backends
    proxy_connect_timeout 60s;
    proxy_send_timeout    60s;
    proxy_read_timeout    60s;

    # buffering off for streaming responses (SSE, logs)
    proxy_buffering on;
  }

  # WebSockets need the upgrade headers
  location /ws/ {
    proxy_pass http://127.0.0.1:3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade    $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_read_timeout 3600s;
  }
}

⚠️ The trailing slash on proxy_pass changes everything. proxy_pass http://backend; forwards /api/users as /api/users; proxy_pass http://backend/; strips the matched location prefix first.

⚖️ Load Balancing

upstream backend {
  # least_conn;              # send to the server with the fewest connections
  # ip_hash;                 # sticky sessions by client IP
  # hash $request_uri;       # sticky by URI

  server 10.0.0.1:3000 weight=3;
  server 10.0.0.2:3000;
  server 10.0.0.3:3000 max_fails=3 fail_timeout=30s;
  server 10.0.0.4:3000 backup;

  keepalive 32;              # reuse upstream connections
}

server {
  listen 80;
  location / {
    proxy_pass http://backend;
    proxy_http_version 1.1;
    proxy_set_header Connection "";   # required for keepalive to work
  }
}
MethodBehaviour
(default)Round robin, honouring weight
least_connFewest active connections wins
ip_hashSame client IP always reaches the same server
hash <key>Distribute by any variable, e.g. $request_uri
random two least_connPick two at random, then the less busy one

🔐 HTTPS

server {
  listen 443 ssl;
  http2 on;
  server_name example.com;

  ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_prefer_server_ciphers off;
  ssl_session_cache shared:SSL:10m;
  ssl_session_timeout 1d;
  ssl_stapling on;
  ssl_stapling_verify on;

  # tell browsers to stay on HTTPS
  add_header Strict-Transport-Security "max-age=63072000" always;
}
# get and renew certificates automatically
sudo certbot --nginx -d example.com -d www.example.com
sudo certbot renew --dry-run

🚦 Limits & Access Control

http {
  # 10 MB of state ≈ 160k addresses; 10 requests/second per IP
  limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
  limit_conn_zone $binary_remote_addr zone=conn_limit:10m;

  server {
    # allow short bursts, queue the rest without delaying legitimate users
    location /api/ {
      limit_req zone=req_limit burst=20 nodelay;
      limit_conn conn_limit 10;
    }

    # the size of the largest upload you accept
    client_max_body_size 25m;

    # HTTP basic auth (htpasswd -c /etc/nginx/.htpasswd user)
    location /admin/ {
      auth_basic "Restricted";
      auth_basic_user_file /etc/nginx/.htpasswd;
    }

    # allow a subnet, deny the rest
    location /internal/ {
      allow 10.0.0.0/8;
      deny  all;
    }

    # do not serve dotfiles
    location ~ /\.(?!well-known) {
      deny all;
    }
  }
}

🗜 Performance

http {
  # compress text responses
  gzip on;
  gzip_vary on;
  gzip_min_length 1024;
  gzip_types text/plain text/css application/json application/javascript
             text/xml application/xml image/svg+xml;

  # kernel-level file sending
  sendfile on;
  tcp_nopush on;
  tcp_nodelay on;

  # keep connections around for reuse
  keepalive_timeout 65;
  keepalive_requests 1000;

  # cache open file handles
  open_file_cache max=10000 inactive=30s;
  open_file_cache_valid 60s;

  # a proxy cache for upstream responses
  proxy_cache_path /var/cache/nginx keys_zone=app_cache:10m max_size=1g inactive=60m;

  server {
    location / {
      proxy_cache app_cache;
      proxy_cache_valid 200 10m;
      add_header X-Cache-Status $upstream_cache_status;
    }
  }
}

🧪 Useful Variables

VariableHolds
$hostThe Host header, or the server name that matched
$uriThe normalised path, without the query string
$request_uriThe original path with the query string
$args / $arg_nameThe whole query string / one named parameter
$schemehttp or https
$remote_addrThe client’s IP address
$proxy_add_x_forwarded_forThe existing chain plus $remote_addr
$http_<name>Any request header, e.g. $http_user_agent
$request_methodGET, POST, …
$statusThe response status
$upstream_addrWhich backend actually served the request
$upstream_response_timeHow long the backend took
$request_timeHow long nginx took, start to finish

🩺 Troubleshooting

SymptomUsual cause
502 Bad GatewayThe backend is down, or refused the connection — check the app and proxy_pass
504 Gateway TimeoutThe backend is too slow — raise proxy_read_timeout, then fix the app
413 Request Entity Too LargeRaise client_max_body_size
403 Forbidden on a static fileThe worker user cannot read the path, or a directory lacks x
The wrong site is servedNo server_name matched, so the default_server answered
Changes have no effectThe config was never reloaded, or the file is not symlinked into sites-enabled
# see the config nginx is actually running, includes resolved
sudo nginx -T | less

# which worker user needs read access
ps -o user= -C nginx | sort -u

# turn up the error log while debugging
# error_log /var/log/nginx/error.log debug;

📚 Resources

  • Official documentation
  • Directive index
  • Variable index
  • Mozilla SSL configuration generator
  • Certbot — Let’s Encrypt