UWSGI_GLUSTERFS(1)

πŸ“¦
version 2.0.31+2+0.0.3build2 Β· 6 versions
, in ubuntu resolute, ubuntu stonking

✨ NAME ✨

okay bestie, so this page you're reading is uwsgi_glusterfs β€” it's the manual for a fast (pure C), self-healing, developer-friendly WSGI server πŸ’… no cap, that's literally the whole vibe.


🌈 SYNOPSIS 🌈

uwsgi-core [options...]

like. that's it. you run uwsgi-core and you hand it some options. iconic.


πŸ’– DESCRIPTION πŸ’–

buckle up bestie, this is a LOT of options and we're doing every single one, no skipping, no summarizing, we're eating the whole plate πŸ“

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

  • --emperor-pidfile β€” drops the Emperor pid into the file you name, so you can find it later πŸ’–
  • --emperor-tyrant β€” puts the Emperor in Tyrant mode πŸ‘‘ no cap
  • --emperor-tyrant-nofollow β€” in Tyrant mode, do not follow symlinks when checking for uid/gid β€” nope, not today 🚫
  • --emperor-stats β€” runs the Emperor stats server ✨
  • --emperor-stats-server β€” runs the Emperor stats server ✨ same energy
  • --early-emperor β€” spawns the emperor as soon as possible, like it's trying to beat the group chat to the tea β˜•
  • --emperor-broodlord β€” runs the emperor in BroodLord mode, very main character πŸ‘‘
  • --emperor-throttle β€” sets throttling level (in milliseconds) for bad behaving vassals; default is 1000
  • --emperor-max-throttle β€” sets max throttling level (in milliseconds) for bad behaving vassals; default is 3 minutes
  • --emperor-magic-exec β€” if a vassal config file has the executable bit, prefixes it with exec:// β€” magic ✨
  • --emperor-on-demand-extension, --emperor-on-demand-ext β€” searches for a text file (vassal name + extension) containing the on demand socket name πŸ”
  • --emperor-on-demand-directory, --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 is passed as the only argument
  • --emperor-extra-extension, --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 β€” during ragnarok, uses vassals graceful shutdown β€” drama but polite πŸ’…
  • --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 to vassals config (uses --include instead of --inherit)
  • --vassals-inherit-before β€” adds config templates to vassals config (uses --inherit, parses before the vassal file)
  • --vassals-include-before β€” includes config templates to vassals config (uses --include instead of --inherit, 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 β€” when overloaded, asks emperor for reinforcement β€” SOS bestie πŸ†˜
  • --vassal-sos-backlog β€” asks emperor for SOS if 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 β€” it's alive, periodt πŸ’–
  • --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 β€” no take-backs πŸ’€
  • --die-on-term β€” on SIGTERM, exits instead of brutal reload
  • --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 content of the specified binary symbol
  • --print-symbol β€” prints content of the specified binary symbol
  • -r|--reaper β€” calls waitpid(-1,...) after each request to get rid of zombies 🧟
  • -R|--max-requests β€” reloads workers after the specified amount of managed requests
  • --max-requests-delta β€” adds (worker_id * delta) to the max_requests value of each worker
  • --min-worker-lifetime β€” number of seconds a worker must run before being reloaded; default is 10
  • --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 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 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 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 β€” does chdir() to specified directory before each spooler task
  • --spooler-processes β€” sets the number of processes for spoolers
  • --spooler-quiet β€” does not be verbose with spooler tasks β€” no yapping 🀫
  • --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 signal queue
  • --signals-bufsize β€” sets buffer size for 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 pidfile (before privileges drop)
  • --pidfile2 β€” creates pidfile (after privileges drop)
  • --safe-pidfile β€” creates safe pidfile (before privileges drop)
  • --safe-pidfile2 β€” creates safe pidfile (after privileges drop)
  • --chroot β€” does chroot() to the specified directory
  • --pivot-root β€” does pivot_root() to the specified directories; new_root and put_old must be separated with a space
  • --pivot_root β€” does pivot_root() to the specified directories; new_root and put_old must be separated with a space
  • --uid β€” does setuid to the specified user/uid
  • --gid β€” does setgid to the specified group/gid
  • --add-gid β€” adds the specified group id to the process credentials
  • --immediate-uid β€” does setuid to the specified user/uid IMMEDIATELY ⚑
  • --immediate-gid β€” does 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 β€” flags this instance as jailed, which forces the post_jail hooks to actually run. it's giving "i am in the box and i want everyone to know" πŸŽ€
  • --refork β€” does a fork() again after privileges drop. so useful for jailing systems fr fr.
  • --re-fork β€” literally the same thing as --refork: fork() again after privileges drop, useful for jailing systems. yes bestie, it's a twin πŸ’…
  • --refork-as-root β€” fork() again before privileges drop. useful for jailing systems. note the before vs after, this matters πŸ‘‘
  • --re-fork-as-root β€” the exact same deal: fork() again before privileges drop, useful for jailing systems.
  • --refork-post-jail β€” fork() again after jailing. useful for jailing systems πŸ¦‹
  • --re-fork-post-jail β€” same energy, same wording: fork() again after jailing, useful for jailing systems.

okay so now we're in the hook zone and honestly this is where uWSGI shows off. hooks = little things uWSGI runs at very specific moments. the when is the whole personality here. ✨

  • --hook-asap β€” run the specified hook as soon as possible. like, immediately. main character timing πŸ’…
  • --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 privileges drop.
  • --hook-as-user β€” run the specified hook after 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, but 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 is <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.
  • --after-request-hook β€” run the specified function/symbol after each request.
  • --after-request-call β€” run the specified function/symbol after each request. (yeah, same description, two flags, iconic twins πŸŽ€)

and now, the exec family β€” same timing slots, except instead of a hook you're running a whole command:

  • --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 privileges drop.
  • --exec-as-user β€” run the specified command after 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.

next up: mounting! same timing slots, but for filesystems. we love a consistent API 🌸

  • --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 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 reverse, bestie, because what goes up must come down πŸ’…

  • --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 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.

lowkey the next chunk is all about waiting patiently for stuff to exist before root hooks fire. yes, uWSGI will literally sit there and wait for your network to show up. it's giving supportive bestie energy 🫢
  • --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 as above, different spelling πŸ’–)
  • --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. (again! "iface" this time ✨)
  • --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.

and now the call family: instead of running a hook or a command, you're calling a C function directly. the numbered variants just tell you exactly what arguments get passed, iykyk πŸ‘‘

  • --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 privileges drop.
  • --call-as-user β€” call the specified function after 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 file loading, bestie, come get your formats 🌈

  • --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.

  • --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.
  • --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.
  • --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. yes bestie, it's called evil on purpose πŸ’€
  • --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. brutal. as advertised πŸ”₯
  • --ksm β€” enable Linux KSM.
  • --pcre-jit β€” enable pcre jit (if available).
  • --never-swap β€” lock all memory pages, avoiding swapping.
  • --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 is file command. πŸ¦‹
  • --touch-signal β€” the vibe check for a file πŸ‘€ whenever the file you name gets modified or touched, fire off a signal. syntax: file signal
  • --fs-reload β€” when the filesystem object you point at changes, do a graceful reload ✨
  • --fs-brutal-reload β€” same energy but unhinged πŸ’€ the filesystem object changes β†’ brutal reload, no chill
  • --fs-signal β€” raise a uwsgi signal when the specified filesystem object gets modified. syntax: file signal
  • --check-mountpoint, --mountpoint-check, --check-mount, --mount-check β€” if a filesystem becomes unreachable, bestie, the instance just gets destroyed πŸ’… genuinely useful when you need reliable Fuse management
  • --propagate-touch β€” literally the over-engineering option, made for systems whose signal management is flaky πŸ™ˆ
  • --limit-post β€” cap the request body, that's it, that's the whole thing
  • --no-orphans β€” if the master dies, automatically kill the workers so nobody's left wandering around orphaned 🫢 heads up though: this can be dangerous for availability
  • --prio β€” set the priority of processes/threads
  • --cpu-affinity β€” set the cpu affinity
  • --post-buffering β€” set the size in bytes at which stuff gets buffered to disk instead of memory
  • --post-buffering-bufsize β€” set the buffer size for read() while in post buffering mode
  • --body-read-warning β€” set how much memory (in megabytes) a request body is allowed to allocate before it starts printing a warning πŸ‘‘
  • --upload-progress β€” while a file upload is happening, create .json files in the directory you specify
  • --no-default-app β€” no falling back to the default app, we don't do that here
  • --manage-script-name β€” automatically rewrite SCRIPT_NAME and PATH_INFO for you, slay
  • --ignore-script-name β€” ignore SCRIPT_NAME
  • --catch-exceptions β€” report the exception as http output. discouraged bestie, only for testing, fr fr ⚠️
  • --reload-on-exception β€” exception gets raised β†’ the worker reloads
  • --reload-on-exception-type β€” reload the worker when a specific exception type gets raised
  • --reload-on-exception-value β€” reload the worker when a specific exception value gets raised
  • --reload-on-exception-repr β€” reload the worker when a specific exception type+value (language-specific) gets raised
  • --exception-handler β€” add an exception handler
  • --enable-metrics β€” turn on the metrics subsystem, let's gooo πŸ”₯
  • --metric β€” add a custom metric
  • --metric-threshold, --metric-alarm, --alarm-metric β€” add a metric threshold/alarm
  • --metrics-dir, --metric-dir β€” export metrics as text files into the directory you name
  • --metrics-dir-restore, --metric-dir-restore β€” restore the last value taken from the metrics dir
  • --metrics-no-cores β€” disable generation of cores-related metrics
  • --udp β€” run the udp server on the address you specify
  • --stats, --stats-server β€” enable the stats server on the specified address
  • --stats-http β€” prefix the stats server json output with http headers
  • --stats-minified, --stats-min β€” minify that statistics json output ✨
  • --stats-push β€” push the stats json to the destination you specify
  • --stats-pusher-default-freq, --stats-pushers-default-freq β€” set the default frequency of stats pushers
  • --stats-no-cores β€” disable 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 the multicast ttl
  • --multicast-loop β€” set multicast loop (default 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 (this one's a shortcut for multicast)
  • --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 β€” if one of the lord hooks fails, declare itself a dead node for however many seconds you specify
  • --legion-skew-tolerance β€” set the clock skew tolerance of the legion subsystem (default 60 seconds)
  • --legion-lord β€” the action to call on Lord election
  • --legion-unlord β€” the action to call on Lord dismiss
  • --legion-setup β€” the action to call on legion setup
  • --legion-death β€” the action to call on legion death (aka shutdown of the instance πŸ’€)
  • --legion-join β€” the action to call on legion join (first time quorum is reached)
  • --legion-node-joined β€” the action to call when a new node joins the legion
  • --legion-node-left β€” the 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 the max size of the legion scroll buffer
  • --legion-scroll-list-max-size β€” set the 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 the 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 β€” try to fallback to the next part (dot based) in the subscription key
  • --subscribe-to, --st, --subscribe β€” subscribe to the subscription server you specify
  • --subscribe2 β€” subscribe to the specified subscription server using advanced keyval syntax
  • --subscribe-freq β€” send the subscription announce at the interval you set
  • --subscription-tolerance β€” set tolerance for subscription servers
  • --unsubscribe-on-graceful-reload β€” force the unsubscribe request even during a graceful reload
  • --start-unsubscribed β€” configure subscriptions but don't actually send them (comes in clutch with master fifo)
  • --subscribe-with-modifier1 β€” force the specified modifier1 when subscribing
  • --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 the maximum certificate verification depth
  • --sni β€” add an SNI-governed SSL context
  • --sni-dir β€” look for cert/key/client_ca files in the directory you specify and create an sni/ssl context on demand
  • --sni-dir-ciphers β€” set the ssl ciphers for the sni-dir option
  • --ssl-enable3, --ssl-enable-sslv3 β€” enable SSLv3. this is insecure, be so serious ⚠️
  • --ssl-enable-tlsv1 β€” enable TLSv1. also insecure, bestie 😭
  • --ssl-option β€” set a raw ssl option (numeric value)
  • --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) between master checks
  • --forkbomb-delay β€” when a forkbomb gets detected, sleep for however many seconds you specify πŸ’€
  • --binary-path β€” force the binary path
  • --privileged-binary-patch β€” patch the uwsgi binary with a new command (happens before privileges drop)
  • --unprivileged-binary-patch β€” patch the uwsgi binary with a new command (happens after 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 however many cores you specify
  • --max-fd β€” set the maximum number of file descriptors (requires root privileges πŸ‘‘)
  • --logto β€” set the logfile/udp address
  • --logto2 β€” log to the file or udp address you specify, after privileges drop
  • --log-format, --logformat β€” set an advanced format for request logging
  • --logformat-strftime, --log-format-strftime β€” apply strftime to the logformat output
  • --logfile-chown β€” chown the logfiles
  • --logfile-chmod β€” chmod the logfiles
  • --log-syslog β€” log to syslog
  • --log-socket β€” send logs to the socket you specify
  • --req-logger, --logger-req β€” set/append a request logger
  • --logger β€” set/append a logger
  • --logger-list, --loggers-list β€” list the enabled loggers
  • --threaded-logger β€” offload the 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 do not 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 β€” bestie, instead of spinning up a whole dedicated thread for each curl-based alarm, just use the main alarm thread. less drama, fewer threads πŸ’…
  • --alarm-freq β€” tune the anti-loop alarm system. default is 3 seconds ⏰
  • --alarm-fd β€” raise the specified alarm when an fd is read for read. by default it reads 1 byte, but set it to 8 for eventfd πŸ‘€
  • --alarm-segfault β€” raise the specified alarm when the segmentation fault handler runs πŸ’€
  • --segfault-alarm β€” raise the specified alarm when the segmentation fault handler runs πŸ’€ (same vibe, different spelling, both iconic)
  • --alarm-backlog β€” raise the specified alarm when the socket backlog queue is full 😭
  • --backlog-alarm β€” raise the specified alarm when the socket backlog queue is full 😭
  • --lq-alarm β€” raise the specified alarm when the socket backlog queue is full 😭
  • --alarm-lq β€” raise the specified alarm when the socket backlog queue is full 😭
  • --alarm-listen-queue β€” raise the specified alarm when the socket backlog queue is full 😭
  • --listen-queue-alarm β€” raise the specified alarm when the socket backlog queue is full 😭

okay so the backlog queue alarm has like six names and honestly? queen behavior. anywayβ€”

  • --log-alarm β€” raise the specified alarm when a log line matches the specified regexp. syntax: <alarm>[,alarm...] <regexp> πŸ”
  • --alarm-log β€” raise the specified alarm when a log line matches the specified regexp. syntax: <alarm>[,alarm...] <regexp> πŸ”
  • --not-log-alarm β€” skip the specified alarm when a log line matches the specified regexp. syntax: <alarm>[,alarm...] <regexp> πŸ™…
  • --not-alarm-log β€” skip the specified alarm when a log line matches the specified regexp. syntax: <alarm>[,alarm...] <regexp> πŸ™…
  • --alarm-list β€” list enabled alarms πŸ“‹
  • --alarms-list β€” list enabled alarms πŸ“‹
  • --alarm-msg-size β€” set the max size of an alarm message. default is 8192 ✨

  • --log-master β€” delegate logging to the master process πŸ‘‘
  • --log-master-bufsize β€” set the buffer size for the master logger. heads up bestie, bigger log messages will get truncated βœ‚οΈ
  • --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 log after reload πŸ”„
  • --log-truncate β€” truncate log on startup
  • --log-maxsize β€” set maximum logfile size
  • --log-backupname β€” set logfile name after rotation
  • --logdate β€” prefix logs with date or a strftime string πŸ“…
  • --log-date β€” prefix logs with date or a strftime string πŸ“…
  • --log-prefix β€” prefix logs with a string
  • --log-zero β€” log responses without body
  • --log-slow β€” log requests slower than the specified number of milliseconds 🐒
  • --log-4xx β€” log requests with a 4xx response
  • --log-5xx β€” log requests with a 5xx response
  • --log-big β€” log requests bigger than the specified size
  • --log-sendfile β€” log sendfile requests
  • --log-ioerror β€” log requests with io errors
  • --log-micros β€” report response time in microseconds instead of milliseconds ⚑
  • --log-x-forwarded-for β€” use the ip from X-Forwarded-For header instead of REMOTE_ADDR

  • --master-as-root β€” leave master process running as root πŸ‘‘
  • --drop-after-init β€” run privileges drop after plugin initialization, superseded by drop-after-apps
  • --drop-after-apps β€” run privileges drop after apps loading, superseded by master-as-root
  • --force-cwd β€” force the initial working directory to the specified value
  • --binsh β€” override /bin/sh (used by exec hooks, it always fallback to /bin/sh)
  • --chdir β€” chdir to specified directory before apps loading
  • --chdir2 β€” chdir to 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 to algorithm used for adaptive process spawning
  • --cheaper-step β€” number of additional processes to spawn at each overload
  • --cheaper-overload β€” increase workers after specified overload
  • --cheaper-algo-list β€” list enabled cheapers algorithms πŸ“‹
  • --cheaper-algos-list β€” list enabled cheapers algorithms πŸ“‹
  • --cheaper-list β€” list enabled cheapers algorithms πŸ“‹
  • --cheaper-rss-limit-soft β€” don't spawn new workers if total resident memory usage of all workers is higher than this limit
  • --cheaper-rss-limit-hard β€” if total workers resident memory usage is higher try to stop workers
  • --idle β€” set idle mode (put uWSGI in cheap mode after inactivity) 😴
  • --die-on-idle β€” shutdown uWSGI when idle πŸ’€
  • --mount β€” load application under mountpoint
  • --worker-mount β€” load application under mountpoint in the specified worker or after workers spawn
  • --threads β€” run each worker in prethreaded mode with the specified number of threads 🧡
  • --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 SERVER_NAME variable) 🌈
  • --vhost-host β€” enable virtualhosting mode (based on HTTP_HOST variable) 🌈

okay the routing section is here and it is LONG. buckle up bestie, we're going full main character πŸŽ€

  • --route β€” add a route
  • --route-host β€” add a route based on 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 condition
  • --route-if-not β€” add a route based on condition (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 specified status
  • --final-route-host β€” add a final route based on 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 condition
  • --final-route-if-not β€” add a final route based on condition (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 specified status
  • --error-route-host β€” add an error route based on 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 condition
  • --error-route-if-not β€” add an error route based on condition (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 specified status
  • --response-route-host β€” add a response route based on 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 condition
  • --response-route-if-not β€” add a response route based on condition (negate version) πŸ™…
  • --response-route-run β€” always run the specified response route action
  • --router-list β€” list enabled routers πŸ“‹
  • --routers-list β€” list enabled routers πŸ“‹

okay that was a lot but we ate, no crumbs ✨


  • --error-page-403 β€” add an error page (html) for managed 403 response
  • --error-page-404 β€” add an error page (html) for managed 404 response
  • --error-page-500 β€” add an error page (html) for managed 500 response

  • --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 websockets ping/pong subsystem πŸ“
  • --websocket-pong-tolerance β€” set the tolerance (in seconds) of 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 default timeout for chunked input
  • --clock β€” set a clock source ⏰
  • --clock-list β€” list enabled clocks πŸ“‹

  • --clocks-list β€” shows u the clocks that are currently enabled ✨
  • --add-header β€” auto-slaps HTTP headers onto the response, no manual labour πŸ’…
  • --rem-header β€” auto-yeets the HTTP header u specify out of the response
  • --del-header β€” same energy: auto-removes the specified HTTP header from the response
  • --collect-header β€” stashes that response header in a request var (syntax: header var) πŸŽ€
  • --response-header-collect β€” literally the same thing: store 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) β€” grabby and clean 🫢
  • --check-static β€” peeks for static files in the directory u name
  • --check-static-docroot β€” peeks for static files in whatever DOCUMENT_ROOT was requested
  • --static-check β€” check for static files in the specified directory (yes bestie, it's the twin of --check-static)
  • --static-map β€” maps a mountpoint to a static directory (or a file) 🌸
  • --static-map2 β€” like --static-map but it completely appends the requested resource to the docroot
  • --static-skip-ext β€” skips the extension u name when it's doing static file checks
  • --static-index β€” if someone requests a directory, it goes looking for the file u specified
  • --static-safe β€” skips the security checks when the file lives under the path u gave it
  • --static-cache-paths β€” drops the resolved paths into the uWSGI cache for however many seconds u say ⏱️
  • --static-cache-paths-name β€” uses the cache u name for those static paths
  • --mimefile β€” sets the mime types file path (default /etc/mime.types)
  • --mime-file β€” sets the mime types file path (default /etc/mime.types) β€” same flag, twin name πŸ’–
  • --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 a filename regexp
  • --static-expires-mtime β€” sets the Expires header based on a filename regexp and file mtime
  • --static-expires-uri β€” sets the Expires header based on a REQUEST_URI regexp
  • --static-expires-uri-mtime β€” sets the Expires header based on a REQUEST_URI regexp and file mtime
  • --static-expires-path-info β€” sets the Expires header based on a PATH_INFO regexp
  • --static-expires-path-info-mtime β€” sets the Expires header based on a PATH_INFO regexp and file mtime
  • --static-gzip β€” if ur regexp matches the static file translation, it goes hunting for a gzip version πŸ¦‹
  • --static-gzip-all β€” checks for a gzip version of every requested static file
  • --static-gzip-dir β€” checks for a gzip version of all requested static files in the dir/prefix u name
  • --static-gzip-prefix β€” checks for a gzip version of all requested static files in the dir/prefix u name (same thing, different name, we love options)
  • --static-gzip-ext β€” checks for a gzip version of all requested static files with the ext/suffix u name
  • --static-gzip-suffix β€” checks for a gzip version of all requested static files with the ext/suffix u name ✨
  • --honour-range β€” turns on support for the HTTP Range header
  • --offload-threads β€” sets how many offload threads to spawn (per-worker, default 0)
  • --offload-thread β€” sets how many offload threads to spawn (per-worker, default 0) β€” the singular twin
  • --file-serve-mode β€” sets the static file serving mode
  • --fileserve-mode β€” sets the static file serving mode (again, twins πŸ‘―)
  • --disable-sendfile β€” disables sendfile() and makes it rely on the boring read()/write() instead 😭
  • --check-cache β€” checks for response data in the cache u name (leave it empty for the 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 β€” loads a daemontools compatible envdir
  • --early-envdir β€” loads a daemontools compatible envdir ASAP ⚑
  • --unenv β€” unsets an environment variable
  • --vacuum β€” tries to remove all of the generated files/sockets 🧹
  • --file-write β€” writes the content u specify to the file u specify (syntax: file=value), and it does this before privileges drop
  • --cgroup β€” puts the processes in the cgroup u name
  • --cgroup-opt β€” sets a value in the cgroup option u specify
  • --cgroup-dir-mode β€” sets permission for the cgroup directory (default is 700) πŸ”’
  • --namespace β€” runs in a new namespace under the rootfs u specify
  • --namespace-keep-mount β€” keeps the mountpoint u name inside ur namespace
  • --ns β€” runs in a new namespace under the specified rootfs (short king πŸ‘‘)
  • --namespace-net β€” adds a network namespace
  • --ns-net β€” adds a network namespace (twin!)
  • --enable-proxy-protocol β€” enables PROXY1 protocol support (only for http parsers)
  • --reuse-port β€” enables the REUSE_PORT flag on the socket (BSD only, bestie)
  • --tcp-fast-open β€” enables the TCP_FASTOPEN flag on TCP sockets with the qlen value u give
  • --tcp-fastopen β€” enables the TCP_FASTOPEN flag on TCP sockets with the specified qlen value
  • --tcp-fast-open-client β€” uses sendto(..., MSG_FASTOPEN, ...) instead of connect() if it's supported
  • --tcp-fastopen-client β€” uses sendto(..., MSG_FASTOPEN, ...) instead of connect() if supported
  • --zerg β€” attach to a zerg server πŸ›
  • --zerg-fallback β€” falls back to normal sockets if the zerg server isn't available
  • --zerg-server β€” enables the zerg server on the UNIX socket u name
  • --cron β€” adds a cron task
  • --cron2 β€” adds a cron task, but key=val syntax style
  • --unique-cron β€” adds a unique cron task
  • --cron-harakiri β€” sets the max time (in seconds) we wait for a cron command to finish ⏳
  • --legion-cron β€” adds a cron task that only runs when the instance is a lord of the legion u specify
  • --cron-legion β€” 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 β€” adds a unique cron task runnable only when the instance is a lord of the specified legion (same, twin name πŸ’œ)
  • --loop β€” selects the uWSGI loop engine
  • --loop-list β€” lists the enabled loop engines
  • --loops-list β€” lists the enabled loop engines
  • --worker-exec β€” runs the command u specify as a worker
  • --worker-exec2 β€” runs the specified command as a worker (after the post_fork hook)
  • --attach-daemon β€” attaches a command/daemon to the master process (heads up: 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 that daemon dies, the master dies too πŸ’€
  • --smart-attach-daemon β€” attaches a command/daemon to the master process managed by a pidfile (here the command has to daemonize)
  • --smart-attach-daemon2 β€” attaches a command/daemon to the master process managed by a pidfile (here the command has to NOT daemonize β€” opposite day)
  • --legion-attach-daemon β€” same as --attach-daemon but the daemon only runs on the legion lord node
  • --legion-smart-attach-daemon β€” same as --smart-attach-daemon but the daemon only runs on the legion lord node
  • --legion-smart-attach-daemon2 β€” same as --smart-attach-daemon2 but the daemon only runs on the legion lord node
  • --daemons-honour-stdin β€” does not change the stdin of external daemons to /dev/null
  • --attach-daemon2 β€” the attach-daemon keyval variant (it supports smart modes too) πŸ”₯
  • --plugins β€” loads uWSGI plugins
  • --plugin β€” loads uWSGI plugins
  • --need-plugins β€” loads uWSGI plugins and exits on error
  • --need-plugin β€” loads uWSGI plugins (exit on error)
  • --plugins-dir β€” adds a directory to the uWSGI plugin search path
  • --plugin-dir β€” adds a directory to the uWSGI plugin search path
  • --plugins-list β€” lists the enabled plugins
  • --plugin-list β€” lists the enabled plugins
  • --autoload β€” tries to automatically load plugins whenever it finds unknown options πŸ‘€
  • --dlopen β€” blindly loads a shared library (no thoughts, head empty)
  • --allowed-modifiers β€” a comma separated list of allowed modifiers
  • --remap-modifier β€” remaps a request modifier from one id to another
  • --dump-options β€” dumps the full list of available options πŸ“œ
  • --show-config β€” shows the current config, reformatted as ini
  • --binary-append-data β€” returns the content of a resource to stdout so u can append it to a uwsgi binary (for data:// usage)
  • --print β€” simple print
  • --iprint β€” simple print, immediate version ⚑
  • --exit β€” force exit() of the instance
  • --cflags β€” reports uWSGI CFLAGS (super useful for building external plugins)
  • --dot-h β€” dumps the uwsgi.h used for building the core (useful for building external plugins)
  • --config-py β€” dumps the uwsgiconfig.py used for building the core (useful for building external plugins)
  • --build-plugin β€” builds a uWSGI plugin for the current binary πŸ”¨
  • --version β€” prints the uWSGI version
  • --response-headers-limit β€” sets the response header maximum size (default: 64k)

okay bestie that's the whole flag buffet, u made it to the end and honestly? iconic πŸŽ€ this page is from uwsgi_glusterfs version 2.0.31-2, dated February 2026, and it lives in the manual as UWSGI_GLUSTERFS(1). go forth and serve those static files, mwah πŸ’–πŸ¦‹βœ¨

πŸ“¦ where this page comes from