UWSGI_RACK_RUBY32(1)

πŸ“¦ version 2.0.24, in ubuntu noble

πŸ’– NAME πŸ’–

uwsgi_rack_ruby32 β€” fast (pure C), self-healing, developer-friendly WSGI server. Bestie, this is the UWSGI_RACK_RUBY32(1) manual, User Commands, part 1, and we are about to get you fluent in every single flag. No cap. πŸ’…


✨ SYNOPSIS ✨

Run it like this, periodt:

uwsgi-core-local [options...]

🌸 DESCRIPTION 🌸

Okay so DESCRIPTION is literally the whole option buffet. Every flag, every vibe, every little config knob. We're doing them in order, bestie, so grab a strawberry drink πŸ“ and let's go.

  • -s, --socket β€” bind to the specified UNIX/TCP socket using the default protocol. classic move ✨
  • -s, --uwsgi-socket β€” bind to the specified UNIX/TCP socket using the uwsgi protocol. uwsgi gang πŸ’œ
  • --suwsgi-socket β€” bind to the specified UNIX/TCP socket using the uwsgi protocol over SSL. secure-ish πŸ¦‹
  • --ssl-socket β€” bind to the specified UNIX/TCP socket using the uwsgi protocol over SSL. twin flame πŸ’–
  • --http-socket β€” bind to the specified UNIX/TCP socket using HTTP protocol. hello browser 🌈
  • --http-socket-modifier1 β€” force the specified modifier1 when using HTTP protocol. force it πŸ’…
  • --http-socket-modifier2 β€” force the specified modifier2 when using HTTP protocol. modifier2, slay ✨
  • --http11-socket β€” bind to the specified UNIX/TCP socket using HTTP 1.1 (Keep-Alive) protocol. keep it alive πŸ”₯
  • --https-socket β€” bind to the specified UNIX/TCP socket using HTTPS protocol. padlock energy πŸ‘‘
  • --https-socket-modifier1 β€” force the specified modifier1 when using HTTPS protocol. modifier magic πŸ’œ
  • --https-socket-modifier2 β€” force the specified modifier2 when using HTTPS protocol. modifier2 moment 🧚
  • --fastcgi-socket β€” bind to the specified UNIX/TCP socket using FastCGI protocol. FastCGI bestie πŸ“
  • --fastcgi-nph-socket β€” bind to the specified UNIX/TCP socket using FastCGI protocol (nph mode). nph mode activated ✨
  • --fastcgi-modifier1 β€” force the specified modifier1 when using FastCGI protocol. force field πŸ’…
  • --fastcgi-modifier2 β€” force the specified modifier2 when using FastCGI protocol. modifier2, no cap ⭐
  • --scgi-socket β€” bind to the specified UNIX/TCP socket using SCGI protocol. SCGI szn 🌸
  • --scgi-nph-socket β€” bind to the specified UNIX/TCP socket using SCGI protocol (nph mode). nph again ✨
  • --scgi-modifier1 β€” force the specified modifier1 when using SCGI protocol. modifier1, periodt πŸ’…
  • --scgi-modifier2 β€” force the specified modifier2 when using SCGI protocol. modifier2 energy πŸ”₯
  • --raw-socket β€” bind to the specified UNIX/TCP socket using RAW protocol. raw and unbothered 😭
  • --raw-modifier1 β€” force the specified modifier1 when using RAW protocol. raw modifier1 🧚
  • --raw-modifier2 β€” force the specified modifier2 when using RAW protocol. raw modifier2 πŸ’œ
  • --puwsgi-socket β€” bind to the specified UNIX/TCP socket using persistent uwsgi protocol (puwsgi). persistent queen πŸ‘‘
  • --protocol β€” force the specified protocol for default sockets. protocol override ⭐
  • --socket-protocol β€” force the specified protocol for default sockets. same vibe, different flag πŸ“
  • --shared-socket β€” create a shared socket for advanced jailing or ipc. sharing is caring 🫢
  • --undeferred-shared-socket β€” create a shared socket for advanced jailing or ipc (undeferred mode). undeferred mode ✨
  • -p, --processes β€” spawn the specified number of workers/processes. more workers, more slay πŸ’…
  • -p, --workers β€” spawn the specified number of workers/processes. twin flag πŸ’–
  • --thunder-lock β€” serialize accept() usage (if possible). thunder lock, so dramatic πŸ”₯
  • -t, --harakiri β€” set harakiri timeout. harakiri timeout πŸ’€
  • --harakiri-verbose β€” enable verbose mode for harakiri. verbose harakiri 😭
  • --harakiri-graceful-timeout β€” interval between graceful harakiri attempt and a sigkill. graceful then sigkill ⭐
  • --harakiri-graceful-signal β€” use this signal instead of sigterm for graceful harakiri attempts. signal swap ✨
  • --harakiri-queue-threshold β€” only trigger harakiri if queue is greater than this threshold. threshold trigger πŸ“
  • --harakiri-no-arh β€” do not enable harakiri during after-request-hook. no arh harakiri πŸ™ˆ
  • --no-harakiri-arh β€” do not enable harakiri during after-request-hook. same thing, another alias πŸ’œ
  • --no-harakiri-after-req-hook β€” do not enable harakiri during after-request-hook. after-req-hook no harakiri πŸ’…
  • --backtrace-depth β€” set backtrace depth. deep backtrace πŸ”₯
  • --mule-harakiri β€” set harakiri timeout for mule tasks. mule harakiri 🧚
  • -x, --xmlconfig β€” load config from xml file. xml config ✨
  • -x, --xml β€” load config from xml file. xml alias πŸ’œ
  • --config β€” load configuration using the pluggable system. pluggable config πŸŽ€
  • --fallback-config β€” re-exec uwsgi with the specified config when exit code is 1. fallback plan πŸ‘‘
  • --strict β€” enable strict mode (placeholder cannot be used). strict mode, no placeholders ⭐
  • --skip-zero β€” skip check of file descriptor 0. skip fd 0 πŸ¦‹
  • --skip-atexit β€” skip atexit hooks (ignored by the master). atexit skip πŸ™ˆ
  • --skip-atexit-teardown β€” skip atexit teardown (ignored by the master). teardown skip πŸ’…
  • -S, --set β€” set a placeholder or an option. set it πŸ’–
  • --set-placeholder β€” set a placeholder. placeholder vibes ✨
  • --set-ph β€” set a placeholder. ph alias πŸ’œ
  • --get β€” print the specified option value and exit. print and dip πŸ‘‘
  • --declare-option β€” declare a new uWSGI custom option. custom option, declare it πŸŽ€
  • --declare-option2 β€” declare a new uWSGI custom option (non-immediate). non-immediate custom ⭐
  • --resolve β€” place the result of a dns query in the specified placeholder, sytax: placeholder=name (immediate option). dns resolve, yes the typo is real πŸ“
  • --for β€” (opt logic) for cycle. opt logic for loop 🧚
  • --for-glob β€” (opt logic) for cycle (expand glob). glob expand 🌈
  • --for-times β€” (opt logic) for cycle (expand the specified num to a list starting from 1). times loop πŸ’…
  • --for-readline β€” (opt logic) for cycle (expand the specified file to a list of lines). readline loop πŸ’–
  • --endfor β€” (opt logic) end for cycle. end for ✨
  • --end-for β€” (opt logic) end for cycle. end for alias πŸ’œ
  • --if-opt β€” (opt logic) check for option. if opt ⭐
  • --if-not-opt β€” (opt logic) check for option. if not opt πŸ™ˆ
  • --if-env β€” (opt logic) check for environment variable. if env 🌸
  • --if-not-env β€” (opt logic) check for environment variable. if not env πŸ“
  • --ifenv β€” (opt logic) check for environment variable. ifenv alias 🧚
  • --if-reload β€” (opt logic) check for reload. if reload πŸ”₯
  • --if-not-reload β€” (opt logic) check for reload. if not reload πŸ’…
  • --if-hostname β€” (opt logic) check for hostname. if hostname πŸ’–
  • --if-not-hostname β€” (opt logic) check for hostname. if not hostname ✨
  • --if-hostname-match β€” (opt logic) try to match hostname against a regular expression. regex hostname πŸ’œ
  • --if-not-hostname-match β€” (opt logic) try to match hostname against a regular expression. regex hostname, but not ⭐
  • --if-exists β€” (opt logic) check for file/directory existence. if exists πŸ‘‘
  • --if-not-exists β€” (opt logic) check for file/directory existence. if not exists πŸ™ˆ
  • --ifexists β€” (opt logic) check for file/directory existence. ifexists alias πŸ“
  • --if-plugin β€” (opt logic) check for plugin. if plugin 🧚
  • --if-not-plugin β€” (opt logic) check for plugin. if not plugin πŸ’…
  • --ifplugin β€” (opt logic) check for plugin. ifplugin alias πŸ’–
  • --if-file β€” (opt logic) check for file existance. if file ✨
  • --if-not-file β€” (opt logic) check for file existance. if not file πŸ’œ
  • --if-dir β€” (opt logic) check for directory existance. if dir ⭐
  • --if-not-dir β€” (opt logic) check for directory existance. if not dir 🌸
  • --ifdir β€” (opt logic) check for directory existance. ifdir alias πŸ¦‹
  • --if-directory β€” (opt logic) check for directory existance. if directory πŸŽ€
  • --endif β€” (opt logic) end if. end if πŸ’…
  • --end-if β€” (opt logic) end if. end if alias πŸ’–
  • --blacklist β€” set options blacklist context. blacklist context πŸ’€
  • --end-blacklist β€” clear options blacklist context. clear blacklist ✨
  • --whitelist β€” set options whitelist context. whitelist context πŸ‘‘
  • --end-whitelist β€” clear options whitelist context. clear whitelist πŸ’œ
  • --ignore-sigpipe β€” do not report (annoying) SIGPIPE. ignore SIGPIPE πŸ™ˆ
  • --ignore-write-errors β€” do not report (annoying) write()/writev() errors. ignore write errors 😭
  • --write-errors-tolerance β€” set the maximum number of allowed write errors (default: no tolerance). tolerance level: zero ⭐
  • --write-errors-exception-only β€” only raise an exception on write errors giving control to the app itself. exception only πŸ”₯
  • --disable-write-exception β€” disable exception generation on write()/writev(). no write exception πŸ’…
  • --inherit β€” use the specified file as config template. inherit template πŸŽ€
  • --include β€” include the specified file as immediate configuration. include config ✨
  • --inject-before β€” inject a text file before the config file (advanced templating). inject before πŸ’–
  • --inject-after β€” inject a text file after the config file (advanced templating). inject after πŸ’œ
  • -d, --daemonize β€” daemonize uWSGI. daemonize it πŸ‘‘
  • --daemonize2 β€” daemonize uWSGI after app loading. daemonize after app load ⭐
  • --stop β€” stop an instance. stop an instance πŸ’€
  • --reload β€” reload an instance. reload an instance πŸ”₯
  • --pause β€” pause an instance. pause an instance ✨
  • --suspend β€” suspend an instance. suspend an instance πŸ’…
  • --resume β€” resume an instance. resume an instance πŸ’–
  • --connect-and-read β€” connect to a socket and wait for data from it. connect and read πŸ¦‹
  • --extract β€” fetch/dump any supported address to stdout. extract to stdout πŸŽ€
  • -l, --listen β€” set the socket listen queue size. listen queue size πŸ’…
  • -v, --max-vars β€” set the amount of internal iovec/vars structures. max vars ✨
  • --max-apps β€” set the maximum number of per-worker applications. max apps per worker πŸ’œ
  • -b, --buffer-size β€” set internal buffer size. buffer size ⭐
  • -m, --memory-report β€” enable memory report. memory report πŸ‘‘
  • --profiler β€” enable the specified profiler. profiler on πŸ”₯
  • -c, --cgi-mode β€” force CGI-mode for plugins supporting it. CGI mode πŸ’…
  • -a, --abstract-socket β€” force UNIX socket in abstract mode (Linux only). abstract socket, Linux only πŸ¦‹
  • -C, --chmod-socket β€” chmod-socket. the description is literally chmod-socket, iconic ✨
  • -C, --chmod β€” chmod-socket. same alias energy πŸ’–
  • --chown-socket β€” chown unix sockets. chown unix sockets πŸ’œ
  • --umask β€” set umask. set umask ⭐
  • --freebind β€” put socket in freebind mode. freebind mode 🧚
  • --map-socket β€” map sockets to specific workers. map sockets to workers πŸ’…
  • -T, --enable-threads β€” enable threads. enable threads πŸ”₯
  • --no-threads-wait β€” do not wait for threads cancellation on quit/reload. no threads wait πŸ™ˆ
  • --auto-procname β€” automatically set processes name to something meaningful. auto procname πŸ‘‘
  • --procname-prefix β€” add a prefix to the process names. procname prefix ✨
  • --procname-prefix-spaced β€” add a spaced prefix to the process names. spaced prefix πŸ’–
  • --procname-append β€” append a string to process names. procname append πŸ’œ
  • --procname β€” set process names. set process names ⭐
  • --procname-master β€” set master process name. master procname πŸ’…
  • -i, --single-interpreter β€” do not use multiple interpreters (where available). single interpreter 🧚
  • --need-app β€” exit if no app can be loaded. need app or exit 😭
  • -M, --master β€” enable master process. master process πŸ‘‘
  • --honour-stdin β€” do not remap stdin to /dev/null. honour stdin πŸ’–
  • --emperor β€” run the Emperor. run the Emperor πŸ‘‘
  • --emperor-proxy-socket β€” force the vassal to became an Emperor proxy. emperor proxy socket ✨
  • --emperor-wrapper β€” set a binary wrapper for vassals. emperor wrapper πŸ’œ
  • --emperor-wrapper-override β€” set a binary wrapper for vassals to try before the default one. wrapper override ⭐
  • --emperor-wrapper-fallback β€” set a binary wrapper for vassals to try as a last resort. wrapper fallback πŸ’…
  • --emperor-nofollow β€” do not follow symlinks when checking for mtime. nofollow symlinks πŸ¦‹
  • --emperor-procname β€” set the Emperor process name. emperor procname πŸŽ€
  • --emperor-freq β€” set the Emperor scan frequency (default 3 seconds). emperor freq, default 3 seconds ⭐
  • --emperor-required-heartbeat β€” set the Emperor tolerance about heartbeats. required heartbeat πŸ’–
  • --emperor-curse-tolerance β€” set the Emperor tolerance about cursed vassals. curse tolerance 😭
  • --emperor-pidfile β€” write the Emperor pid in the specified file. emperor pidfile πŸ‘‘

Okay so this next chunk is a LOT of Emperor stuff and then the security/fd/cache/spooler zone, buckle up bestie πŸŽ€

  • --emperor-tyrant β€” puts the Emperor into Tyrant mode πŸ‘‘ (yes that's the actual name, it's giving monarchy)
  • --emperor-tyrant-nofollow β€” do not follow symlinks when it's checking for uid/gid in Tyrant mode πŸš«πŸ”—
  • --emperor-stats β€” runs the Emperor stats server πŸ“Š
  • --emperor-stats-server β€” also runs the Emperor stats server (same thing, different spelling of the flag, iykyk)
  • --early-emperor β€” spawns the emperor as soon as possibile ⏰ (yes, "possibile" β€” that's the original spelling, keeping it fr fr)
  • --emperor-broodlord β€” runs the emperor in BroodLord mode 🐣 (iconic name, no notes)
  • --emperor-throttle β€” sets the throttling level (in milliseconds) for bad behaving vassals β€” default is 1000 😀
  • --emperor-max-throttle β€” sets the max throttling level (in milliseconds) for bad behaving vassals β€” default is 3 minutes 🚧
  • --emperor-magic-exec β€” prefixes vassals config files with exec:// if they have the executable bit ✨
  • --emperor-on-demand-extension β€” searches for a text file (vassal name + extension) containing the on demand socket name πŸ”
  • --emperor-on-demand-ext β€” same deal: searches for a text file (vassal name + extension) containing the on demand socket name
  • --emperor-on-demand-directory β€” enables on demand mode, binding to the unix socket in the specified directory, named like the vassal + .socket πŸ”Œ
  • --emperor-on-demand-dir β€” enables on demand mode, binding to the unix socket in the specified directory, named like the vassal + .socket
  • --emperor-on-demand-exec β€” uses the output of the specified command as the on demand socket name (the vassal name gets passed as the only argument) πŸ’»
  • --emperor-extra-extension β€” allows the specified extension in the Emperor (the vassal will be called with --config) πŸ“Ž
  • --emperor-extra-ext β€” allows the specified extension in the Emperor (the vassal will be called with --config)
  • --emperor-no-blacklist β€” disables the Emperor blacklisting subsystem 🚫
  • --emperor-use-clone β€” uses clone() instead of fork(), passing the specified unshare() flags 🧬
  • --emperor-graceful-shutdown β€” uses vassals graceful shutdown during ragnarok πŸŒ‹ (yes, ragnarok, the end times, it's a whole vibe)
  • --emperor-cap β€” sets vassals capability πŸ”
  • --vassals-cap β€” sets vassals capability
  • --vassal-cap β€” sets vassals capability
  • --imperial-monitor-list β€” lists enabled imperial monitors πŸ“‹
  • --imperial-monitors-list β€” lists enabled imperial monitors
  • --vassals-inherit β€” adds config templates to vassals config (uses --inherit) πŸ“„
  • --vassals-include β€” includes config templates into vassals config (uses --include instead of --inherit)
  • --vassals-inherit-before β€” adds config templates to vassals config (uses --inherit, and parses before the vassal file) ⬅️
  • --vassals-include-before β€” includes config templates into vassals config (uses --include instead of --inherit, and parses before the vassal file)
  • --vassals-start-hook β€” runs the specified command before each vassal starts πŸš€
  • --vassals-stop-hook β€” runs the specified command after vassal's death πŸ’€
  • --vassal-sos β€” asks the emperor for reinforcement when overloaded πŸ†˜
  • --vassal-sos-backlog β€” asks the emperor for sos if the backlog queue has more items than the value specified πŸ“ˆ
  • --vassals-set β€” automatically sets the specified option (via --set) for every vassal βš™οΈ
  • --vassal-set β€” automatically sets the specified option (via --set) for every vassal
  • --heartbeat β€” announces healthiness to the emperor πŸ’“
  • --reload-mercy β€” sets the maximum time (in seconds) we wait for workers and other processes to die during reload/shutdown ⏳
  • --worker-reload-mercy β€” sets the maximum time (in seconds) a worker can take to reload/shutdown β€” default is 60 πŸ•
  • --mule-reload-mercy β€” sets the maximum time (in seconds) a mule can take to reload/shutdown β€” default is 60 🐴
  • --exit-on-reload β€” forces exit even if a reload is requested πŸšͺ
  • --die-on-term β€” exits instead of doing a brutal reload on SIGTERM ☠️
  • --force-gateway β€” forces the spawn of the first registered gateway without a master πŸŒ‰
  • -h, --help β€” shows this help πŸ™‹
  • -h, --usage β€” shows this help
  • --print-sym β€” prints the content of the specified binary symbol πŸ”¬
  • --print-symbol β€” prints the content of the specified binary symbol
  • -r, --reaper β€” calls waitpid(-1,...) after each request to get rid of zombies 🧟 (actual zombies, not the fun kind)
  • -R, --max-requests β€” reloads workers after the specified amount of managed requests πŸ”
  • --min-worker-lifetime β€” number of seconds a worker must run before being reloaded β€” default is 60 ⏱️
  • --max-worker-lifetime β€” reloads workers after the specified amount of seconds β€” default is disabled 🚫
  • --max-worker-lifetime-delta β€” adds (worker_id * delta) seconds to the max_worker_lifetime value of each worker βž•
  • -z, --socket-timeout β€” sets internal sockets timeout ⏲️
  • --no-fd-passing β€” disables file descriptor passing 🚷
  • --locks β€” creates the specified number of shared locks πŸ”’
  • --lock-engine β€” sets the lock engine βš™οΈ
  • --ftok β€” sets the ipcsem key via ftok() for avoiding duplicates πŸ”‘
  • --persistent-ipcsem β€” does not remove ipcsem's on shutdown πŸ’Ύ
  • -A, --sharedarea β€” creates a raw shared memory area of specified pages (note: it supports keyval too) 🧠
  • --safe-fd β€” does not close the specified file descriptor πŸ›Ÿ
  • --fd-safe β€” does not close the specified file descriptor
  • --cache β€” creates a shared cache containing given elements πŸ—ƒοΈ
  • --cache-blocksize β€” sets cache blocksize 🧱
  • --cache-store β€” enables persistent cache to disk πŸ’½
  • --cache-store-sync β€” sets the frequency of sync for persistent cache πŸ”„
  • --cache-no-expire β€” disables auto sweep of expired items 🧹
  • --cache-expire-freq β€” sets the frequency of cache sweeper scans β€” default 3 seconds ⏰
  • --cache-report-freed-items β€” constantly reports the cache item freed by the sweeper (use only for debug) πŸ›
  • --cache-udp-server β€” binds the cache udp server (used only for set/update/delete) to the specified socket πŸ“‘
  • --cache-udp-node β€” sends cache update/deletion to the specified cache udp server πŸ“€
  • --cache-sync β€” copies the whole content of another uWSGI cache server on server startup πŸ“₯
  • --cache-use-last-modified β€” updates the last_modified_at timestamp on every cache item modification β€” default is disabled πŸ•°οΈ
  • --add-cache-item β€” adds an item in the cache βž•
  • --load-file-in-cache β€” loads a static file in the cache πŸ“‚
  • --load-file-in-cache-gzip β€” loads a static file in the cache with gzip compression πŸ—œοΈ
  • --cache2 β€” creates a new generation shared cache (keyval syntax) ✨
  • --queue β€” enables shared queue 🚢
  • --queue-blocksize β€” sets queue blocksize 🧱
  • --queue-store β€” enables persistent queue to disk πŸ’½
  • --queue-store-sync β€” sets the frequency of sync for persistent queue πŸ”„
  • -Q, --spooler β€” runs a spooler on the specified directory πŸ–¨οΈ
  • --spooler-external β€” maps spoolers requests to a spooler directory managed by an external instance 🌐
  • --spooler-ordered β€” tries to order the execution of spooler tasks πŸ”’
  • --spooler-chdir β€” chdir() to the specified directory before each spooler task πŸ“
  • --spooler-processes β€” sets the number of processes for spoolers πŸ‘―
  • --spooler-quiet β€” does not be verbose with spooler tasks 🀫
  • --spooler-max-tasks β€” sets the maximum number of tasks to run before recycling a spooler ♻️
  • --spooler-harakiri β€” sets harakiri timeout for spooler tasks πŸ—‘οΈ
  • --spooler-frequency β€” sets spooler frequency πŸ“Ά
  • --spooler-freq β€” sets spooler frequency
  • --mule β€” adds a mule 🐴
  • --mules β€” adds the specified number of mules 🐴🐴🐴
  • --farm β€” adds a mule farm 🚜
  • --mule-msg-size β€” sets mule message buffer size πŸ“¨
  • --signal β€” sends a uwsgi signal to a server πŸ“Ά
  • --signal-bufsize β€” sets buffer size for the signal queue πŸ“¦
  • --signals-bufsize β€” sets buffer size for the signal queue
  • --signal-timer β€” adds a timer (syntax: <signal> <seconds>) ⏰
  • --timer β€” adds a timer (syntax: <signal> <seconds>)
  • --signal-rbtimer β€” adds a redblack timer (syntax: <signal> <seconds>) 🌳
  • --rbtimer β€” adds a redblack timer (syntax: <signal> <seconds>)
  • --rpc-max β€” maximum number of rpc slots β€” default: 64 πŸ“ž
  • -L, --disable-logging β€” disables request logging πŸ”‡
  • --flock β€” locks the specified file before starting, exits if locked πŸ”’
  • --flock-wait β€” locks the specified file before starting, waits if locked ⏸️
  • --flock2 β€” locks the specified file after logging/daemon setup, exits if locked πŸ”’
  • --flock-wait2 β€” locks the specified file after logging/daemon setup, waits if locked ⏸️
  • --pidfile β€” creates a pidfile (before privileges drop) πŸ“
  • --pidfile2 β€” creates a pidfile (after privileges drop) πŸ“
  • --safe-pidfile β€” creates a safe pidfile (before privileges drop) πŸ›Ÿ
  • --safe-pidfile2 β€” creates a safe pidfile (after privileges drop) πŸ›Ÿ
  • --chroot β€” chroot() to the specified directory 🏰
  • --pivot-root β€” pivot_root() to the specified directories (new_root and put_old must be separated with a space) πŸ”„
  • --pivot_root β€” pivot_root() to the specified directories (new_root and put_old must be separated with a space)
  • --uid β€” setuid to the specified user/uid πŸ§‘
  • --gid β€” setgid to the specified group/gid πŸ‘₯
  • --add-gid β€” adds the specified group id to the process credentials βž•
  • --immediate-uid β€” setuid to the specified user/uid IMMEDIATELY ⚑
  • --immediate-gid β€” setgid to the specified group/gid IMMEDIATELY ⚑
  • --no-initgroups β€” disables additional groups set via initgroups() 🚫
  • --cap β€” sets process capability πŸ”
  • --unshare β€” unshare() part of the processes and puts it in a new namespace 🫧
  • --unshare2 β€” unshare() part of the processes and puts it in a new namespace after rootfs change 🫧
  • --setns-socket β€” exposes a unix socket returning namespace fds from /proc/self/ns πŸ”Œ
  • --setns-socket-skip β€” skips the specified entry when sending setns file descriptors ⏭️
  • --setns-skip β€” skips the specified entry when sending setns file descriptors
  • --setns β€” joins a namespace created by an external uWSGI instance 🀝
  • --setns-preopen β€” opens /proc/self/ns as soon as possible and caches fds πŸ—‚οΈ
  • --jailed β€” marks the instance as jailed (forces the execution of post_jail hooks) ⛓️
ngl that was a whole journey bestie, and we're not even done πŸ’… more coming, don't go anywhere 🫢

✨ OPTIONS ✨

Okay bestie, deep breath. This is the big list. It's giving infinite scroll, but every single one of these is real and useful so we're going through them together, no skipping. 🫢


First up: the fork-again crew. If you're doing jails, these are your girls. πŸ”

  • --refork β€” do a whole extra fork() after the privileges drop. Super useful for jailing systems.
  • --re-fork β€” exactly the same thing as --refork, another fork() after the privileges drop. Also for jailing systems. (Yes they're twins, we love a duplicate name moment. πŸ‘―)
  • --refork-as-root β€” fork() again before the privileges drop. Useful for jailing systems.
  • --re-fork-as-root β€” same energy: fork() again before the privileges drop, useful for jailing systems.
  • --refork-post-jail β€” fork() again after jailing. Useful for jailing systems.
  • --re-fork-post-jail β€” yeah, fork() again after jailing, useful for jailing systems. Periodt.

Now the hooks πŸ’… β€” "run the specified hook" is the vibe here, it's just when that changes. Pick your moment:

  • --hook-asap β€” run the specified hook as soon as possible. no waiting, main character energy ⚑
  • --hook-pre-jail β€” run the specified hook before jailing.
  • --hook-post-jail β€” run the specified hook after jailing.
  • --hook-in-jail β€” run the specified hook in jail after initialization.
  • --hook-as-root β€” run the specified hook before the privileges drop.
  • --hook-as-user β€” run the specified hook after the privileges drop.
  • --hook-as-user-atexit β€” run the specified hook before app exit and reload.
  • --hook-pre-app β€” run the specified hook before app loading.
  • --hook-post-app β€” run the specified hook after app loading.
  • --hook-post-fork β€” run the specified hook after each fork.
  • --hook-accepting β€” run the specified hook after each worker enters the accepting phase.
  • --hook-accepting1 β€” run the specified hook after the first worker enters the accepting phase.
  • --hook-accepting-once β€” run the specified hook after each worker enters the accepting phase (once per-instance).
  • --hook-accepting1-once β€” run the specified hook after the first worker enters the accepting phase (once per instance).
  • --hook-master-start β€” run the specified hook when the Master starts. πŸ‘‘
  • --hook-touch β€” run the specified hook when the specified file is touched. syntax: <file> <action>
  • --hook-emperor-start β€” run the specified hook when the Emperor starts.
  • --hook-emperor-stop β€” run the specified hook when the Emperor sends a stop message.
  • --hook-emperor-reload β€” run the specified hook when the Emperor sends a reload message.
  • --hook-emperor-lost β€” run the specified hook when the Emperor connection is lost. 😭
  • --hook-as-vassal β€” run the specified hook before exec()ing the vassal.
  • --hook-as-emperor β€” run the specified hook in the emperor after the vassal has been started.
  • --hook-as-mule β€” run the specified hook in each mule.
  • --hook-as-gateway β€” run the specified hook in each gateway.

And two little per-request besties that do the same thing:

  • --after-request-hook β€” run the specified function/symbol after each request.
  • --after-request-call β€” run the specified function/symbol after each request.

Same exact timeline, but for running commands instead of hooks. Slay. πŸ”₯

  • --exec-asap β€” run the specified command as soon as possible.
  • --exec-pre-jail β€” run the specified command before jailing.
  • --exec-post-jail β€” run the specified command after jailing.
  • --exec-in-jail β€” run the specified command in jail after initialization.
  • --exec-as-root β€” run the specified command before the privileges drop.
  • --exec-as-user β€” run the specified command after the privileges drop.
  • --exec-as-user-atexit β€” run the specified command before app exit and reload.
  • --exec-pre-app β€” run the specified command before app loading.
  • --exec-post-app β€” run the specified command after app loading.
  • --exec-as-vassal β€” run the specified command before exec()ing the vassal.
  • --exec-as-emperor β€” run the specified command in the emperor after the vassal has been started.

Mounts! 🧚 (they're just filesystems, but make it fashion)

  • --mount-asap β€” mount filesystem as soon as possible.
  • --mount-pre-jail β€” mount filesystem before jailing.
  • --mount-post-jail β€” mount filesystem after jailing.
  • --mount-in-jail β€” mount filesystem in jail after initialization.
  • --mount-as-root β€” mount filesystem before the privileges drop.
  • --mount-as-vassal β€” mount filesystem before exec()ing the vassal.
  • --mount-as-emperor β€” mount filesystem in the emperor after the vassal has been started.

And the un-mounties, same timings, opposite direction:

  • --umount-asap β€” unmount filesystem as soon as possible.
  • --umount-pre-jail β€” unmount filesystem before jailing.
  • --umount-post-jail β€” unmount filesystem after jailing.
  • --umount-in-jail β€” unmount filesystem in jail after initialization.
  • --umount-as-root β€” unmount filesystem before the privileges drop.
  • --umount-as-vassal β€” unmount filesystem before exec()ing the vassal.
  • --umount-as-emperor β€” unmount filesystem in the emperor after the vassal has been started.

Waiting room era πŸ• β€” these make uWSGI chill until the thing it needs actually shows up.

  • --wait-for-interface β€” wait for the specified network interface to come up before running root hooks.
  • --wait-for-interface-timeout β€” set the timeout for wait-for-interface.
  • --wait-interface β€” wait for the specified network interface to come up before running root hooks. (same deal, shorter name ✨)
  • --wait-interface-timeout β€” set the timeout for wait-for-interface.
  • --wait-for-iface β€” wait for the specified network interface to come up before running root hooks.
  • --wait-for-iface-timeout β€” set the timeout for wait-for-interface.
  • --wait-iface β€” wait for the specified network interface to come up before running root hooks.
  • --wait-iface-timeout β€” set the timeout for wait-for-interface.
  • --wait-for-fs β€” wait for the specified filesystem item to appear before running root hooks.
  • --wait-for-file β€” wait for the specified file to appear before running root hooks.
  • --wait-for-dir β€” wait for the specified directory to appear before running root hooks.
  • --wait-for-mountpoint β€” wait for the specified mountpoint to appear before running root hooks.
  • --wait-for-fs-timeout β€” set the timeout for wait-for-fs/file/dir.
  • --wait-for-socket β€” wait for the specified socket to be ready before loading apps. 🧦
  • --wait-for-socket-timeout β€” set the timeout for wait-for-socket.

Now the call family β€” these call a specified function at a specific moment. And because C doesn't do vibes-based argument passing, the name tells you the exact signature. Keep these EXACT, bestie, character for character:

  • --call-asap β€” call the specified function as soon as possible.
  • --call-pre-jail β€” call the specified function before jailing.
  • --call-post-jail β€” call the specified function after jailing.
  • --call-in-jail β€” call the specified function in jail after initialization.
  • --call-as-root β€” call the specified function before the privileges drop.
  • --call-as-user β€” call the specified function after the privileges drop.
  • --call-as-user-atexit β€” call the specified function before app exit and reload.
  • --call-pre-app β€” call the specified function before app loading.
  • --call-post-app β€” call the specified function after app loading.
  • --call-as-vassal β€” call the specified function() before exec()ing the vassal.
  • --call-as-vassal1 β€” call the specified function(char *) before exec()ing the vassal.
  • --call-as-vassal3 β€” call the specified function(char *, uid_t, gid_t) before exec()ing the vassal.
  • --call-as-emperor β€” call the specified function() in the emperor after the vassal has been started.
  • --call-as-emperor1 β€” call the specified function(char *) in the emperor after the vassal has been started.
  • --call-as-emperor2 β€” call the specified function(char *, pid_t) in the emperor after the vassal has been started.
  • --call-as-emperor4 β€” call the specified function(char *, pid_t, uid_t, gid_t) in the emperor after the vassal has been started.

Config-loading time πŸ“‚ β€” yes, you can read your settings in from a file instead of screaming flags at the terminal:

  • --ini β€” load config from ini file.
  • -y, --yaml β€” load config from yaml file.
  • -y, --yml β€” load config from yaml file.
  • -j, --json β€” load config from json file.
  • -j, --js β€” load config from json file.

A lil cluster-flavored batch πŸ«‚:

  • --weight β€” weight of the instance (used by clustering/lb/subscriptions).
  • --auto-weight β€” set weight of the instance (used by clustering/lb/subscriptions) automatically.
  • --no-server β€” force no-server mode.
  • --command-mode β€” force command mode.

Sockets & TCP glow-up ✨:

  • --no-defer-accept β€” disable deferred-accept on sockets.
  • --tcp-nodelay β€” enable TCP NODELAY on each request.
  • --so-keepalive β€” enable TCP KEEPALIVEs.
  • --so-send-timeout β€” set SO_SNDTIMEO.
  • --socket-send-timeout β€” set SO_SNDTIMEO.
  • --so-write-timeout β€” set SO_SNDTIMEO.
  • --socket-write-timeout β€” set SO_SNDTIMEO.
  • --socket-sndbuf β€” set SO_SNDBUF.
  • --socket-rcvbuf β€” set SO_RCVBUF.
  • --shutdown-sockets β€” force calling shutdown() in addition to close() when sockets are destroyed.

Memory & limits, aka the part where we get responsible 🧠:

  • --limit-as β€” limit processes address space/vsz.
  • --limit-nproc β€” limit the number of spawnable processes.
  • --reload-on-as β€” reload if address space is higher than specified megabytes.
  • --reload-on-rss β€” reload if rss memory is higher than specified megabytes.
  • --evil-reload-on-as β€” force the master to reload a worker if its address space is higher than specified megabytes. (it's called evil for a reason, ok πŸ’€)
  • --evil-reload-on-rss β€” force the master to reload a worker if its rss memory is higher than specified megabytes.
  • --mem-collector-freq β€” set the memory collector frequency when evil reloads are in place.
  • --reload-on-fd β€” reload if the specified file descriptor is ready.
  • --brutal-reload-on-fd β€” brutal reload if the specified file descriptor is ready. πŸ”₯
  • --ksm β€” enable Linux KSM.
  • --pcre-jit β€” enable pcre jit (if available).
  • --never-swap β€” lock all memory pages avoiding swapping.

Touch-triggered everything πŸŽ€ β€” poke a file, make uWSGI do a thing. Iconic behavior honestly:

  • --touch-reload β€” reload uWSGI if the specified file is modified/touched.
  • --touch-workers-reload β€” trigger reload of (only) workers if the specified file is modified/touched.
  • --touch-mules-reload β€” reload mules if the specified file is modified/touched.
  • --touch-spoolers-reload β€” reload spoolers if the specified file is modified/touched.
  • --touch-chain-reload β€” trigger chain reload if the specified file is modified/touched.
  • --touch-logrotate β€” trigger logrotation if the specified file is modified/touched.
  • --touch-logreopen β€” trigger log reopen if the specified file is modified/touched.
  • --touch-exec β€” run command when the specified file is modified/touched. syntax: file command
  • --touch-signal β€” signal when the specified file is modified/touched. syntax: file signal

Heads up bestie: the option list is still going, so don't close the tab yet πŸ’–

okay bestie we're back in it, the option buffet continues, hydrate before reading πŸ’–


  • --fs-reload β€” the moment the filesystem object you named gets touched, it does a graceful reload πŸ¦‹ like a polite little refresh
  • --fs-brutal-reload β€” same vibe but brutal 😀 filesystem object changes β†’ instant brutal reload, no softness, no chill
  • --fs-signal β€” when the filesystem object changes it raises a uwsgi signal. syntax: file signal (yes, both of them, in that order bestie)
  • --check-mountpoint β€” nukes the instance if a filesystem becomes unreachable. genuinely useful for reliable Fuse management πŸ‘‘
  • --mountpoint-check β€” same thing, same energy: instance goes bye if a filesystem is no longer reachable (reliable Fuse management, again)
  • --check-mount β€” yep, another twin πŸ’… destroy the instance when a filesystem is no more reachable (Fuse, reliable, you know the drill)
  • --mount-check β€” the fourth one, same soul: instance destroyed if a filesystem isn't reachable anymore, great for reliable Fuse management 🌸
  • --propagate-touch β€” literally described as an over-engineering option for systems with flaky signal management 😭 iconic self-awareness
  • --limit-post β€” puts a cap on the request body 🫢
  • --no-orphans β€” workers get auto-killed if master dies. but heads up: this can be dangerous for availability ⚠️
  • --prio β€” set the priority of processes/threads
  • --cpu-affinity β€” set cpu affinity
  • --post-buffering β€” sets the size in bytes after which it buffers to disk instead of memory πŸ’Ύ
  • --post-buffering-bufsize β€” sets the buffer size used for read() while in post buffering mode
  • --body-read-warning β€” how much memory allocation (in megabytes) for the request body is allowed before it starts printing a warning πŸ“’
  • --upload-progress β€” turns on creation of .json files in the directory you specify, while a file upload is happening
  • --no-default-app β€” do not fallback to the default app πŸ™ˆ
  • --manage-script-name β€” automatically rewrites SCRIPT_NAME and PATH_INFO for you ✨
  • --ignore-script-name β€” just ignores SCRIPT_NAME entirely
  • --catch-exceptions β€” reports the exception as http output. discouraged, use only for testing bestie, i'm serious 🚨
  • --reload-on-exception β€” reloads a worker whenever an exception is raised
  • --reload-on-exception-type β€” reloads a worker when one specific exception type is raised
  • --reload-on-exception-value β€” reloads a worker when a specific exception value is raised
  • --reload-on-exception-repr β€” reloads a worker when a specific exception type+value (language-specific) is raised
  • --exception-handler β€” adds an exception handler
  • --enable-metrics β€” turns the metrics subsystem on πŸ“Š
  • --metric β€” add a custom metric, your own little number, your own little star ⭐
  • --metric-threshold β€” add a metric threshold/alarm 🚨
  • --metric-alarm β€” also add a metric threshold/alarm (same thing, different name)
  • --alarm-metric β€” and again: add a metric threshold/alarm
  • --metrics-dir β€” export metrics as text files into the directory you name πŸ“
  • --metrics-dir-restore β€” restores the last value taken from the metrics dir
  • --metric-dir β€” export metrics as text files to the specified directory (yes, the singular spelling twin)
  • --metric-dir-restore β€” restore last value taken from the metrics dir, singular flavour
  • --metrics-no-cores β€” disables generation of cores-related metrics
  • --udp β€” run the udp server on the address you give it πŸ“‘
  • --stats β€” enable the stats server on the specified address
  • --stats-server β€” enable the stats server on the specified address (same, bestie)
  • --stats-http β€” prefixes the stats server json output with http headers 🌐
  • --stats-minified β€” minifies the statistics json output
  • --stats-min β€” minifies the statistics json output (short king behaviour πŸ‘‘)
  • --stats-push β€” push the stats json to whatever destination you name
  • --stats-pusher-default-freq β€” set the default frequency of stats pushers
  • --stats-pushers-default-freq β€” set the default frequency of stats pushers (plural, same deal)
  • --stats-no-cores β€” disables generation of cores-related stats
  • --stats-no-metrics β€” don't include metrics in the stats output πŸ™…
  • --multicast β€” subscribe to the multicast group you specify
  • --multicast-ttl β€” set multicast ttl
  • --multicast-loop β€” set multicast loop, default is 1 πŸ”
  • --master-fifo β€” enable the master fifo
  • --notify-socket β€” enable the notification socket πŸ””
  • --subscription-notify-socket β€” set the notification socket used for subscriptions
  • --legion β€” become a member of a legion πŸ›‘οΈ
  • --legion-mcast β€” become a member of a legion, but the shortcut for multicast version
  • --legion-node β€” add a node to a legion
  • --legion-freq β€” set the frequency of legion packets
  • --legion-tolerance β€” set the tolerance of the legion subsystem
  • --legion-death-on-lord-error β€” declares itself a dead node for however many seconds you say, if one of the lord hooks fails πŸ’€
  • --legion-skew-tolerance β€” set the clock skew tolerance of the legion subsystem, default 30 seconds ⏰
  • --legion-lord β€” the action to call on Lord election πŸ‘‘
  • --legion-unlord β€” the action to call on Lord dismiss
  • --legion-setup β€” action to call on legion setup
  • --legion-death β€” action to call on legion death (that's the shutdown of the instance, dramatic much 😭)
  • --legion-join β€” action to call on legion join (the first time quorum is reached)
  • --legion-node-joined β€” action to call when a new node joins the legion 🫢
  • --legion-node-left β€” action to call when a node leaves the legion
  • --legion-quorum β€” set the quorum of a legion
  • --legion-scroll β€” set the scroll of a legion
  • --legion-scroll-max-size β€” set max size of the legion scroll buffer
  • --legion-scroll-list-max-size β€” set max size of the legion scroll list buffer
  • --subscriptions-sign-check β€” set the digest algorithm and certificate directory for the secured subscription system πŸ”
  • --subscriptions-sign-check-tolerance β€” set the maximum tolerance (in seconds) of clock skew for the secured subscription system
  • --subscriptions-sign-skip-uid β€” skip signature check for the uid you specify when unix sockets credentials are in play
  • --subscriptions-credentials-check β€” add a directory to search for subscriptions key credentials
  • --subscriptions-use-credentials β€” enable management of SCM_CREDENTIALS in subscriptions UNIX sockets
  • --subscription-algo β€” set the load balancing algorithm for the subscription system βš–οΈ
  • --subscription-dotsplit β€” tries to fallback to the next part (dot based) in the subscription key
  • --subscribe-to β€” subscribe to the subscription server you specify
  • --st β€” subscribe to the specified subscription server (tiny name, big job)
  • --subscribe β€” subscribe to the specified subscription server (the classic)
  • --subscribe2 β€” subscribe to the specified subscription server using the advanced keyval syntax ✨
  • --subscribe-freq β€” send subscription announce at the interval you set
  • --subscription-tolerance β€” set tolerance for subscription servers
  • --unsubscribe-on-graceful-reload β€” forces the unsubscribe request even during a graceful reload
  • --start-unsubscribed β€” configure subscriptions but don't actually send them (super handy with master fifo) 🀫
  • --subscribe-with-modifier1 β€” force the specified modifier1 when subscribing (typo in the original said "specififed", we're keeping the meaning, bestie)
  • --snmp β€” enable the embedded snmp server πŸ“ˆ
  • --snmp-community β€” set the snmp community string
  • --ssl-verbose β€” be verbose about SSL errors, spill the tea πŸ«–
  • --ssl-verify-depth β€” set maximum certificate verification depth
  • --sni β€” add an SNI-governed SSL context
  • --sni-dir β€” check for cert/key/client_ca files in the directory you specify and create a sni/ssl context on demand πŸ“‚
  • --sni-dir-ciphers β€” set ssl ciphers for the sni-dir option
  • --ssl-enable3 β€” enable SSLv3. insecure ⚠️
  • --ssl-enable-sslv3 β€” enable SSLv3. insecure, same warning, same yikes
  • --ssl-enable-tlsv1 β€” enable TLSv1. insecure πŸ™ˆ
  • --ssl-option β€” set a raw ssl option, numeric value only
  • --sni-regexp β€” add an SNI-governed SSL context where the key is a regexp 🧚
  • --ssl-tmp-dir β€” store ssl-related temp files in the directory you name
  • --check-interval β€” set the interval, in seconds, of master checks ⏱️
  • --forkbomb-delay β€” sleep for the number of seconds you specify when a forkbomb is detected πŸ’£
  • --binary-path β€” force binary path
  • --privileged-binary-patch β€” patch the uwsgi binary with a new command, and it happens before the privileges drop
  • --unprivileged-binary-patch β€” patch the uwsgi binary with a new command, after the privileges drop
  • --privileged-binary-patch-arg β€” patch the uwsgi binary with a new command and arguments, before privileges drop
  • --unprivileged-binary-patch-arg β€” patch the uwsgi binary with a new command and arguments, after privileges drop
  • --async β€” enable async mode with the number of cores you specify ⚑
  • --max-fd β€” set maximum number of file descriptors. requires root privileges πŸ‘‘
  • --logto β€” set the logfile/udp address
  • --logto2 β€” log to the specified file or udp address, but after the privileges drop
  • --log-format β€” set an advanced format for request logging
  • --logformat β€” set an advanced format for request logging (the no-dash twin)
  • --logformat-strftime β€” apply strftime to the logformat output
  • --log-format-strftime β€” apply strftime to the logformat output (same, dashed up)
  • --logfile-chown β€” chown logfiles
  • --logfile-chmod β€” chmod logfiles
  • --log-syslog β€” log to syslog
  • --log-socket β€” send logs to the socket you specify
  • --req-logger β€” set/append a request logger
  • --logger-req β€” set/append a request logger (reordered, same job)
  • --logger β€” set/append a logger
  • --logger-list β€” list enabled loggers πŸ“‹
  • --loggers-list β€” list enabled loggers (plural version, same list)
  • --threaded-logger β€” offload log writing to a thread 🧡
  • --log-encoder β€” add an item in the log encoder chain
  • --log-req-encoder β€” add an item in the log req encoder chain
  • --log-drain β€” drain, aka don't show, log lines matching the regexp you give
  • --log-filter β€” show only the log lines matching the regexp you give
  • --log-route β€” log to the named logger you specify if the regexp applied on the logline matches
  • --log-req-route β€” log requests to the named logger you specify if the regexp applied on the logline matches
  • --use-abort β€” call abort() on segfault/fpe. could be useful for generating a core dump πŸ’€
  • --alarm β€” create a new alarm. syntax: <alarm> <plugin:args> 🚨
  • --alarm-cheap β€” use the main alarm thread rather than creating dedicated threads for curl-based alarms πŸ’…

and that's part 4 bestie, we are SO not done, keep scrolling 🌈

  • --alarm-freq β€” tunes the anti-loop alarm system πŸ’… (default is 3 seconds, bestie)
  • --alarm-fd β€” fire the alarm you name here when an fd is read for read. by default it reads 1 byte β€” set 8 if you're doing eventfd ✨
  • --alarm-segfault β€” fire the specified alarm when the segmentation fault handler runs 😭
  • --segfault-alarm β€” same thing, different name: fire the specified alarm when the segfault handler runs
  • --alarm-backlog β€” fire the specified alarm when the socket backlog queue is full πŸ‘‘
  • --backlog-alarm β€” fire the specified alarm when the socket backlog queue is full
  • --lq-alarm β€” fire the specified alarm when the socket backlog queue is full
  • --alarm-lq β€” fire the specified alarm when the socket backlog queue is full
  • --alarm-listen-queue β€” fire the specified alarm when the socket backlog queue is full
  • --listen-queue-alarm β€” fire the specified alarm when the socket backlog queue is full
  • --log-alarm β€” fire the specified alarm when a log line matches the regexp you give it. syntax is literally: <alarm>[,alarm...] <regexp> πŸ“
  • --alarm-log β€” fire the specified alarm when a log line matches the regexp you give it, syntax: <alarm>[,alarm...] <regexp>
  • --not-log-alarm β€” skip the specified alarm when a log line matches the regexp you give it, syntax: <alarm>[,alarm...] <regexp>
  • --not-alarm-log β€” skip the specified alarm when a log line matches the regexp you give it, syntax: <alarm>[,alarm...] <regexp>
  • --alarm-list β€” list all the enabled alarms πŸ’–
  • --alarms-list β€” list all the enabled alarms
  • --alarm-msg-size β€” set the max size of an alarm message (default 8192)

✨ LOGGING, BUT MAKE IT EXTRA ✨

  • --log-master β€” delegate logging to the master process 🫢
  • --log-master-bufsize β€” set the buffer size for the master logger. bigger log messages will be truncated, so like… don't go overboard
  • --log-master-stream β€” create the master logpipe as SOCK_STREAM
  • --log-master-req-stream β€” create the master requests logpipe as SOCK_STREAM
  • --log-reopen β€” reopen the log after a reload πŸ”
  • --log-truncate β€” truncate the log on startup
  • --log-maxsize β€” set the maximum logfile size
  • --log-backupname β€” set the logfile name to use after rotation
  • --logdate β€” prefix your logs with a date, or with a strftime string 🌸
  • --log-date β€” prefix your logs with a date, or with a strftime string
  • --log-prefix β€” prefix your logs with a string
  • --log-zero β€” log responses that have no body
  • --log-slow β€” log any request slower than the number of milliseconds you specify 🐌
  • --log-4xx β€” log requests with a 4xx response
  • --log-5xx β€” log requests with a 5xx response
  • --log-big β€” log requests bigger than the size you specify
  • --log-sendfile β€” log sendfile requests
  • --log-ioerror β€” log requests that hit io errors πŸ’€
  • --log-micros β€” report response time in microseconds instead of milliseconds
  • --log-x-forwarded-for β€” use the ip from the X-Forwarded-For header instead of REMOTE_ADDR (iykyk)

πŸ‘‘ PRIVILEGES & DIRECTORIES & LOADING πŸ‘‘

  • --master-as-root β€” leave the master process running as root ⚠️
  • --drop-after-init β€” run the privileges drop after plugin initialization. this one is superseded by drop-after-apps
  • --drop-after-apps β€” run the privileges drop after apps loading. this one is superseded by master-as-root
  • --force-cwd β€” force the initial working directory to the value you give it
  • --binsh β€” override /bin/sh (it's used by exec hooks, and it always falls back to /bin/sh)
  • --chdir β€” chdir to the specified directory before apps loading
  • --chdir2 β€” chdir to the specified directory after apps loading
  • --lazy β€” set lazy mode (load apps in workers instead of master) 😴
  • --lazy-apps β€” load apps in each worker instead of the master
  • --cheap β€” set cheap mode (spawn workers only after the first request)
  • --cheaper β€” set cheaper mode (adaptive process spawning) πŸ’Έ
  • --cheaper-initial β€” set the initial number of processes to spawn in cheaper mode
  • --cheaper-algo β€” choose the algorithm used for adaptive process spawning
  • --cheaper-step β€” number of additional processes to spawn at each overload
  • --cheaper-overload β€” increase workers after the specified overload
  • --cheaper-algo-list β€” list the enabled cheapers algorithms
  • --cheaper-algos-list β€” list the enabled cheapers algorithms
  • --cheaper-list β€” list the enabled cheapers algorithms
  • --cheaper-rss-limit-soft β€” don't spawn new workers if the total resident memory usage of all workers goes above this limit
  • --cheaper-rss-limit-hard β€” if the total workers resident memory usage is higher, try to stop workers
  • --idle β€” set idle mode (put uWSGI into cheap mode after inactivity) πŸ›‹οΈ
  • --die-on-idle β€” shutdown uWSGI when it's idle

  • --mount β€” load an application under a mountpoint
  • --worker-mount β€” load an application under a mountpoint in the specified worker, or after workers spawn
  • --threads β€” run each worker in prethreaded mode with the number of threads you specify 🧡
  • --thread-stacksize β€” set threads stacksize
  • --threads-stacksize β€” set threads stacksize
  • --thread-stack-size β€” set threads stacksize
  • --threads-stack-size β€” set threads stacksize
  • --vhost β€” enable virtualhosting mode (based on the SERVER_NAME variable)
  • --vhost-host β€” enable virtualhosting mode (based on the HTTP_HOST variable)

🌈 ROUTES, ROUTES, AND MORE ROUTES 🌈

  • --route β€” add a route
  • --route-host β€” add a route based on the Host header
  • --route-uri β€” add a route based on REQUEST_URI
  • --route-qs β€” add a route based on QUERY_STRING
  • --route-remote-addr β€” add a route based on REMOTE_ADDR
  • --route-user-agent β€” add a route based on HTTP_USER_AGENT
  • --route-remote-user β€” add a route based on REMOTE_USER
  • --route-referer β€” add a route based on HTTP_REFERER
  • --route-label β€” add a routing label (for use with goto)
  • --route-if β€” add a route based on a condition
  • --route-if-not β€” add a route based on a condition (the negate version)
  • --route-run β€” always run the specified route action
  • --final-route β€” add a final route
  • --final-route-status β€” add a final route for the status you specify
  • --final-route-host β€” add a final route based on the Host header
  • --final-route-uri β€” add a final route based on REQUEST_URI
  • --final-route-qs β€” add a final route based on QUERY_STRING
  • --final-route-remote-addr β€” add a final route based on REMOTE_ADDR
  • --final-route-user-agent β€” add a final route based on HTTP_USER_AGENT
  • --final-route-remote-user β€” add a final route based on REMOTE_USER
  • --final-route-referer β€” add a final route based on HTTP_REFERER
  • --final-route-label β€” add a final routing label (for use with goto)
  • --final-route-if β€” add a final route based on a condition
  • --final-route-if-not β€” add a final route based on a condition (the negate version)
  • --final-route-run β€” always run the specified final route action
  • --error-route β€” add an error route
  • --error-route-status β€” add an error route for the status you specify
  • --error-route-host β€” add an error route based on the Host header
  • --error-route-uri β€” add an error route based on REQUEST_URI
  • --error-route-qs β€” add an error route based on QUERY_STRING
  • --error-route-remote-addr β€” add an error route based on REMOTE_ADDR
  • --error-route-user-agent β€” add an error route based on HTTP_USER_AGENT
  • --error-route-remote-user β€” add an error route based on REMOTE_USER
  • --error-route-referer β€” add an error route based on HTTP_REFERER
  • --error-route-label β€” add an error routing label (for use with goto)
  • --error-route-if β€” add an error route based on a condition
  • --error-route-if-not β€” add an error route based on a condition (the negate version)
  • --error-route-run β€” always run the specified error route action
  • --response-route β€” add a response route
  • --response-route-status β€” add a response route for the status you specify
  • --response-route-host β€” add a response route based on the Host header
  • --response-route-uri β€” add a response route based on REQUEST_URI
  • --response-route-qs β€” add a response route based on QUERY_STRING
  • --response-route-remote-addr β€” add a response route based on REMOTE_ADDR
  • --response-route-user-agent β€” add a response route based on HTTP_USER_AGENT
  • --response-route-remote-user β€” add a response route based on REMOTE_USER
  • --response-route-referer β€” add a response route based on HTTP_REFERER
  • --response-route-label β€” add a response routing label (for use with goto)
  • --response-route-if β€” add a response route based on a condition
  • --response-route-if-not β€” add a response route based on a condition (the negate version)
  • --response-route-run β€” always run the specified response route action
  • --router-list β€” list the enabled routers πŸ’…
  • --routers-list β€” list the enabled routers
  • --error-page-403 β€” add an error page (html) for a managed 403 response
  • --error-page-404 β€” add an error page (html) for a managed 404 response
  • --error-page-500 β€” add an error page (html) for a managed 500 response

πŸ¦‹ WEBSOCKETS & CHUNKED INPUT & CLOCKS πŸ¦‹

  • --websockets-ping-freq β€” set the frequency (in seconds) of websockets automatic ping packets
  • --websocket-ping-freq β€” set the frequency (in seconds) of websockets automatic ping packets
  • --websockets-pong-tolerance β€” set the tolerance (in seconds) of the websockets ping/pong subsystem
  • --websocket-pong-tolerance β€” set the tolerance (in seconds) of the websockets ping/pong subsystem
  • --websockets-max-size β€” set the max allowed size of websocket messages (in Kbytes, default 1024)
  • --websocket-max-size β€” set the max allowed size of websocket messages (in Kbytes, default 1024)
  • --chunked-input-limit β€” set the max size of a chunked input part (default 1MB, in bytes)
  • --chunked-input-timeout β€” set the default timeout for chunked input
  • --clock β€” set a clock source ⏰
  • --clock-list β€” list the enabled clocks
  • --clocks-list β€” list the enabled clocks
  • --add-header β€” automatically add HTTP headers to the response ✨
  • --rem-header β€” automatically yeets the specified HTTP header out of the response πŸ’…
  • --del-header β€” literally the same: auto-removes the specified HTTP header from the response ✨
  • --collect-header β€” stashes the specified response header into a request var (syntax: header var) πŸŽ€
  • --response-header-collect β€” same energy: stores the specified response header in a request var (syntax: header var) πŸ¦‹
  • --pull-header β€” stores the specified response header in a request var and removes it from the response (syntax: header var) πŸ’–
  • --check-static β€” checks for static files in the directory you name πŸ“‚
  • --check-static-docroot β€” checks for static files in the requested DOCUMENT_ROOT 🌸
  • --static-check β€” checks for static files in the specified directory (yep, same as --check-static) πŸ“
  • --static-map β€” maps a mountpoint to a static directory (or file) πŸ—ΊοΈ
  • --static-map2 β€” like --static-map but it completely appends the requested resource to the docroot 🧚
  • --static-skip-ext β€” skips the specified extension from static file checks 🚫
  • --static-index β€” searches for the specified file if a directory is requested πŸ‘‘
  • --static-safe β€” skips security checks if the file is under the specified path πŸ›‘οΈ
  • --static-cache-paths β€” puts resolved paths in the uWSGI cache for the specified amount of seconds ⏱️
  • --static-cache-paths-name β€” uses the specified cache for static paths πŸ’Ύ
  • --mimefile β€” sets the mime types file path (default /etc/mime.types) πŸ“„
  • --mime-file β€” same thing: sets the mime types file path (default /etc/mime.types) πŸ“„
  • --static-expires-type β€” sets the Expires header based on content type ⏳
  • --static-expires-type-mtime β€” sets the Expires header based on content type and file mtime πŸ•°οΈ
  • --static-expires β€” sets the Expires header based on filename regexp πŸ”
  • --static-expires-mtime β€” sets the Expires header based on filename regexp and file mtime πŸ•°οΈ
  • --static-expires-uri β€” sets the Expires header based on REQUEST_URI regexp 🌐
  • --static-expires-uri-mtime β€” sets the Expires header based on REQUEST_URI regexp and file mtime πŸ•°οΈ
  • --static-expires-path-info β€” sets the Expires header based on PATH_INFO regexp πŸ›€οΈ
  • --static-expires-path-info-mtime β€” sets the Expires header based on PATH_INFO regexp and file mtime πŸ•°οΈ
  • --static-gzip β€” if the supplied regexp matches the static file translation, it searches for a gzip version πŸ—œοΈ
  • --static-gzip-all β€” checks for a gzip version of all requested static files πŸ“¦
  • --static-gzip-dir β€” checks for a gzip version of all requested static files in the specified dir/prefix πŸ“
  • --static-gzip-prefix β€” same as above: checks for a gzip version of all requested static files in the specified dir/prefix πŸ“
  • --static-gzip-ext β€” checks for a gzip version of all requested static files with the specified ext/suffix πŸ”€
  • --static-gzip-suffix β€” same: checks for a gzip version of all requested static files with the specified ext/suffix πŸ”€
  • --honour-range β€” enables support for the HTTP Range header πŸ“
  • --offload-threads β€” sets the number of offload threads to spawn (per-worker, default 0) 🧡
  • --offload-thread β€” same: sets the number of offload threads to spawn (per-worker, default 0) 🧡
  • --file-serve-mode β€” sets static file serving mode βš™οΈ
  • --fileserve-mode β€” same: sets static file serving mode βš™οΈ
  • --disable-sendfile β€” disables sendfile() and relies on boring read()/write() 😴
  • --check-cache β€” checks for response data in the specified cache (empty for default cache) πŸ”Ž
  • --close-on-exec β€” sets close-on-exec on connection sockets (could be required for spawning processes in requests) πŸ”’
  • --close-on-exec2 β€” sets close-on-exec on server sockets (could be required for spawning processes in requests) πŸ”
  • --mode β€” set uWSGI custom mode πŸŽ›οΈ
  • --env β€” set environment variable 🌱
  • --envdir β€” load a daemontools compatible envdir πŸ“‚
  • --early-envdir β€” load a daemontools compatible envdir ASAP ⚑
  • --unenv β€” unset environment variable 🚫
  • --vacuum β€” tries to remove all of the generated file/sockets 🧹
  • --file-write β€” writes the specified content to the specified file (syntax: file=value) before privileges drop ✍️
  • --cgroup β€” puts the processes in the specified cgroup πŸ“¦
  • --cgroup-opt β€” sets value in specified cgroup option βš™οΈ
  • --cgroup-dir-mode β€” sets permission for cgroup directory (default is 700) πŸ”
  • --namespace β€” runs in a new namespace under the specified rootfs 🏠
  • --namespace-keep-mount β€” keeps the specified mountpoint in your namespace πŸ“Œ
  • --ns β€” runs in a new namespace under the specified rootfs (same as --namespace) 🏠
  • --namespace-net β€” adds network namespace 🌐
  • --ns-net β€” adds network namespace (same) 🌐
  • --enable-proxy-protocol β€” enables PROXY1 protocol support (only for http parsers) πŸ§™
  • --reuse-port β€” enables REUSE_PORT flag on socket (BSD only) πŸ”„
  • --tcp-fast-open β€” enables TCP_FASTOPEN flag on TCP sockets with the specified qlen value πŸš€
  • --tcp-fastopen β€” same: enables TCP_FASTOPEN flag on TCP sockets with the specified qlen value πŸš€
  • --tcp-fast-open-client β€” uses sendto(..., MSG_FASTOPEN, ...) instead of connect() if supported πŸ“‘
  • --tcp-fastopen-client β€” same: uses sendto(..., MSG_FASTOPEN, ...) instead of connect() if supported πŸ“‘
  • --zerg β€” attach to a zerg server πŸ‘Ύ
  • --zerg-fallback β€” fallback to normal sockets if the zerg server is not available πŸ›Ÿ
  • --zerg-server β€” enables the zerg server on the specified UNIX socket πŸ›
  • --cron β€” adds a cron task ⏰
  • --cron2 β€” adds a cron task (key=val syntax) ⏰
  • --unique-cron β€” adds a unique cron task ⏰
  • --cron-harakiri β€” sets the maximum time (in seconds) we wait for cron command to complete ⏳
  • --legion-cron β€” adds a cron task runnable only when the instance is a lord of the specified legion πŸ‘‘
  • --cron-legion β€” same: adds a cron task runnable only when the instance is a lord of the specified legion πŸ‘‘
  • --unique-legion-cron β€” adds a unique cron task runnable only when the instance is a lord of the specified legion πŸ‘‘
  • --unique-cron-legion β€” same: adds a unique cron task runnable only when the instance is a lord of the specified legion πŸ‘‘
  • --loop β€” select the uWSGI loop engine πŸ”
  • --loop-list β€” list enabled loop engines πŸ“‹
  • --loops-list β€” same: list enabled loop engines πŸ“‹
  • --worker-exec β€” runs the specified command as worker πŸ‘·
  • --worker-exec2 β€” runs the specified command as worker (after post_fork hook) πŸ‘·
  • --attach-daemon β€” attaches a command/daemon to the master process (the command has to not go in background) πŸ”—
  • --attach-control-daemon β€” attaches a command/daemon to the master process (the command has to not go in background), and when the daemon dies, the master dies too πŸ’€
  • --smart-attach-daemon β€” attaches a command/daemon to the master process managed by a pidfile (the command has to daemonize) 🧠
  • --smart-attach-daemon2 β€” attaches a command/daemon to the master process managed by a pidfile (the command has to NOT daemonize) 🧠
  • --legion-attach-daemon β€” same as --attach-daemon but the daemon runs only on legion lord node πŸ‘‘
  • --legion-smart-attach-daemon β€” same as --smart-attach-daemon but the daemon runs only on legion lord node πŸ‘‘
  • --legion-smart-attach-daemon2 β€” same as --smart-attach-daemon2 but the daemon runs only on legion lord node πŸ‘‘
  • --daemons-honour-stdin β€” do not change the stdin of external daemons to /dev/null πŸ–₯️
  • --attach-daemon2 β€” attach-daemon keyval variant (supports smart modes too) πŸ”§
  • --plugins β€” load uWSGI plugins πŸ”Œ
  • --plugin β€” load uWSGI plugins (same) πŸ”Œ
  • --need-plugins β€” load uWSGI plugins (exit on error) πŸšͺ
  • --need-plugin β€” load uWSGI plugins (exit on error) (same) πŸšͺ
  • --plugins-dir β€” add a directory to uWSGI plugin search path πŸ“
  • --plugin-dir β€” add a directory to uWSGI plugin search path (same) πŸ“
  • --plugins-list β€” list enabled plugins πŸ“ƒ
  • --plugin-list β€” list enabled plugins (same) πŸ“ƒ
  • --autoload β€” try to automatically load plugins when unknown options are found πŸ€–
  • --dlopen β€” blindly load a shared library 🎲
  • --allowed-modifiers β€” comma separated list of allowed modifiers πŸ“
  • --remap-modifier β€” remap request modifier from one id to another πŸ”„
  • --dump-options β€” dump the full list of available options πŸ“œ
  • --show-config β€” show the current config reformatted as ini πŸ“„
  • --binary-append-data β€” return the content of a resource to stdout for appending to a uwsgi binary (for data:// usage) πŸ“Ž
  • --print β€” simple print πŸ–¨οΈ
  • --iprint β€” simple print (immediate version) πŸ–¨οΈ
  • --exit β€” force exit() of the instance πŸšͺ
  • --cflags β€” report uWSGI CFLAGS (useful for building external plugins) πŸ› οΈ
  • --dot-h β€” dump the uwsgi.h used for building the core (useful for building external plugins) πŸ“„
  • --config-py β€” dump the uwsgiconfig.py used for building the core (useful for building external plugins) πŸ“„
  • --build-plugin β€” build a uWSGI plugin for the current binary πŸ”¨
  • --version β€” print uWSGI version 🏷️
  • --response-headers-limit β€” set response header maximum size (default: 64k) πŸ“

And that's a wrap on this whole manual page, bestie! This was for uwsgi_rack_ruby32 version 2.0.24-debian, dated April 2024. You're welcome πŸ’–βœ¨

πŸ“¦ where this page comes from