15 ms·
Nginx Unit – Universal web app server
- vinay_ys 3y agoIt is a great start and shows very good potential. Still need to build support for io_uring, and all the sundry features in mainline nginx, apache, haproxy etc.
- e12e 3y agoio_uring is in the backlog: https://github.com/orgs/nginx/projects/1#column-7850679 https://github.com/orgs/nginx/projects/1#column-7850679
- dmarinus 3y agothis is a nice alternative for the apache php module (mod_php) if you don't want to or can't use php-fpm.
- deleted 3y ago[deleted]
- yetanother-1 3y agoWould you prefer this over Traefik for a simple docker-compose setup?
- Grimburger 3y ago> a simple docker-compose Abstraction at it's finest.
- 9dev 3y agoWhat strikes you as difficult with compose files? In fact, I would say it’s the most concise format to describe a desired state of running applications currently available.
- Grimburger 3y agoNothing is difficult about them, compose is easy enough that you can grok it in a day. You saw the lament in my comment though and that speaks a deeper truth. If WSL took off quick enough we could have had lxc as the main player rather than the bastardisation of lxc that is docker.com For an open source project they make it incredibly hard to access what are essentially text files for containerisation setups on windows or mac? https://github.com/docker/hub-feedback/issues/1103 https://github.com/docker/hub-feedback/issues/1103
- 9dev 3y agoCompose is an open source project entirely separate to hub, though. The compose file specification is versioned separately, and will outlive Docker, probably. So I don’t quite get your criticism?
- Grimburger 3y agoHow are you using compose without docker? They are joined at the hip, criticism of one is criticism of the other. The days of cheap money are over, it's inevitable that certain SaaS companies will start tightening the screws on their users to match the returns they can get with cash in a bank. I just wish lxc (which docker was built off) got a chance to gain traction. It's miles ahead in DX and sure they serve different functionalities but can be used the same and the network effects can't be understated.
- 9dev 3y agoNo, that isn't true. Compose can absolutely be used with Docker replacements, and there is no reason you couldn't create an implementation for LXC, for example.
- Grimburger 3y ago> Compose can absolutely be used with Docker replacements Can you point to some examples of this? LXC has profiles which can be mixed and matched for containers, it's got far more extensibility, compose files are a one-shot creation that gets copy/pasted/modified all over the place (we're all guilty of this), you need to read every single compose file and reboot unlike additively popping another profile on a linux container while it's running.
- notpushkin 3y agoUnironically this. After trying Kubernetes, Terraform, Ansible, and various proprietary PaaS config formats, I've grown to love Compose files' simplicity.
- segfaltnh 3y agoYes, when compared to extreme complexity, compose is simpler. But it's hardly simple.
- notpushkin 3y agoI'll happily try anything simpler than that if you give me an idea what that might be. Not trying to be salty or anything – I really think Compose hits the sweet spot of abstraction which is less complex than both the monstrosities I listed and the ad hoc Bash scripts copying code over SSH and restarting services approach (so, the other extremity of declarative v. imperative).
- oriettaxx 3y agoso I guess you are on Docker Swarm?
- notpushkin 3y agoActually yeah! A single node is usually enough for me though, but I like the ability to throw in more nodes as needed (more or less painlessly, as long as you properly guard services that need persistent volumes with a label constraint). Shameless plug: I also make a Docker Swarm dashboard, check it out: https://lunni.dev/ https://lunni.dev/
- oriettaxx 3y agoI am on docker swarm, too, and I like it. Lunni? cool, thank you for sharing it, I'll give it a try How to navigate the docs? in https://lunni.dev https://lunni.dev I only reach https://lunni.dev/docs/install/ https://lunni.dev/docs/install/ while I see a lot of good docs https://gitlab.com/lunni/lunni.dev/-/tree/master/docs https://gitlab.com/lunni/lunni.dev/-/tree/master/docs ...maybe not ready for the website?
- ljm 3y agoI didn’t think I would see traefik and simple in the same sentence.
- ExoticPearTree 3y agoThis seems to be a “universal” app server, like gunicorn is for running Pyhthon stuff, php-fpm for PHP and so on. It was first launched as closed source and the marketing gibberish f5 came up with made it sound like make believe.
- spoiler 3y agoI only glanced at the docs, but way they expect apps to integrate with it seems a bit convoluted to me? It's not really a reverse proxy at this What would be wrong with just using HTTP/2, maybe with a few custom headers sprinkled in for custom features?
- TheHappyOddish 3y ago> It's not really a reverse proxy at this In fact it's not one at all, nor does it claim to be. It's an app server.
- cxcorp 3y ago> NGINX Unit – universal web app server – a lightweight and versatile open source server project that works as a reverse proxy, serves static assets, and runs applications in multiple languages. https://github.com/nginx/unit https://github.com/nginx/unit
- l5870uoo9y 3y agoThought for a second that it included automatic TLS certificates but that is still done manually with Certbot, which also isn’t that difficult.
- deleted 3y ago[deleted]
- danappelxx 3y agoNot that difficult, but it’s still a separate dependency (with python requirements). If the goal here is a Caddy competitor, then IMO it’s missing the mark in terms of “one stop shop”. What’s the killer feature?
- wolletd 3y agoOn the python requirements: I've always been satisfied with Bash implementations of ACME. I use dehydrated from the very beginning (when it was still called letsencrypt.sh) and lately started using acme.sh.
- kijin 3y agoThis thing will probably run in a bunch of VMs/containers behind a load balancer, so it's actually better that it doesn't try to obtain any certificates by default. Even a small number of apps trying to get their own certificates at the same time can exhaust the Let's Encrypt quota for your domain, with serious consequences to your other online properties.
- smarkov 3y ago> Even a small number of apps trying to get their own certificates at the same time can exhaust the Let's Encrypt quota for your domain I got curious about this and decided to look it up, they actually have more restrictions than I expected[1]. Looks like to play it on the safe side you might be better off having a single server issuing certificates and distributing them where needed as well as using wildcards as much as possible. Interestingly, it looks like Google is doing just that since their certificate covers a very wide range of domains[2]. [1] https://letsencrypt.org/docs/rate-limits/ https://letsencrypt.org/docs/rate-limits/ [2] https://www.sslchecker.com/sslchecker?su=b39e88e1c4d3efcdb79ce7182d9317d1 https://www.sslchecker.com/sslchecker?su=b39e88e1c4d3efcdb79...
- Ranked6815 3y agoI choose envoy
- mindwok 3y agoWell I commend the Nginx team for trying something new and launching this, even though I'm not sure what I would use it for personally. Slightly tangental, but it always irks me when I see these kinds of responses in JSON: { "success": "Reconfiguration done." } Really this should be something like "result": "success". Using "success" as a key name tells me nothing about the data it's representing.
- dan-robertson 3y agoI think this is trying to be a discriminated union type[1] in json. One way to do it is to have a ‘tag’ field that says “ok” or “err” or whatever and then other fields for the rest of the data (or an array with the tag in the first slot). Another is to have one field whose name is the tag and whose value is everything else (which is what happened here). [1] eg one where the possible values are either Err(<some error>) or Ok(<some result>), and the data inside could be more complex types instead of just strings
- 9dev 3y agoHeh. My pet peeve are useless success fields. A 200 response tells you it was successful already. We can talk about a „message“ field or something if you intend to display it to a user, but even that should be implicit by being a response to a specific request. If I send a POST /configuration, is there really something new to be gained from that message that the client cannot figure out on its own? Wouldn’t, perhaps, a 201 No Content suffice?
- eterps 3y agoEric S. Raymond, in his guide "The Art of Unix Programming", mentions this principle as Rule of Silence: "When a program has nothing surprising to say, it should say nothing." His statement probably related to command line applications, but it makes sense for a lot of cases.
- pydry 3y agoIt sounds smart but what counts as surprising is entirely context dependent and most programs won't be aware of your context. E.g. a command line app where you put a subtly wrong switch in that does exactly what it thought you wanted and prints nothing while outputting a 0 exit code is dangerous.
- Dachande663 3y agoTested this with a moderately complex PHP Laravel app and got a 40% speed improvement. Very useful to be able to run multiple apps each using different lang runtimes/versions without needing separate docker containers.
- dieulot 3y ago40% improvement versus what? A docker container for nginx and another one for PHP?
- Dachande663 3y agoCompared to nginx and PHP-FPM installed on a host machine. All running opcache, JIT etc. Was pleasantly surprised. Note this is up to 40%, not all apps we’ve run have seen same improvement.
- deleted 3y ago[deleted]
- sidcool 3y agoWhat were you using earlier?
- quickthrower2 3y agoSounds like a blog post in the making
- husarcik 3y agoHow does this speed improvement compare to Laravel octane with swoole? Curious if I can switch!
- Dachande663 3y agoWe tried roadrunner (similar thing), but couldn't do it without rewriting certain bits of the app (anything with globals basically) whereas unit was a straight swap. My guess would be, if you're properly using the advantages swoole can bring (like shared memory cache etc), it will outperform unit.
- talboren 3y agoYAWS - yet another web server
- CodeCompost 3y agoLooks like this is more focused on ease of use rather than bringing new features in.
- mirzap 3y agoWhat is the difference between Nginx and Nginx Unit? Benefits?
- jalk 3y agoNginx-unit is reconfigurable using REST: https://unit.nginx.org/controlapi/ https://unit.nginx.org/controlapi/
- usrusr 3y agoSo much JSON... is that the real thing, as in comments are the gateway to hell, or is it actually some practical JSON superset like JSON5? I almost see myself jury-rigging some bespoke filesystem on-ramp to that REST configuration interface. Likely with at least half a dozen scary security compromises. Then on the other hand I guess they've never been afraid of getting called opinionated and that's certainly much better than trying to be everything, for everyone, at the same time.
- gjvc 3y agoJSON without comments is hell, forcing one to 1) convert JSON configuration to YAML. 2) add comments to YAML and admire it. 3) convert YAML to JSON for sending to the server.
- coldtea 3y agoYAML is an order of magnitude more hell...
- johnchristopher 3y agoBut TOML is worse, right ? I can't write nor read TOML to save my life... :(
- rascul 3y agoTOML is much simpler in general but it does have its warts. It's basically just key = "value" pairs in [sections] for the simple stuff.
- coldtea 3y agoI think it's saner, but still has some bizarre design choices
- TheFlyingFish 3y agoThis is just my personal opinion, but I think YAML is more intuitive but has a lot more footguns and gotchas, while TOML is more consistent but less obvious (ironically, given the name.) This may contribute to YAML's popularity in CI systems, because CI systems often need to be adjusted by someone who isn't super familiar with the syntax, and YAML is easier to intuit than TOML.
- ilovefood 3y agoThis is really great! What I'm really look forward to trying is the server side WebAssembly: https://unit.nginx.org/configuration/#configuration-wasm https://unit.nginx.org/configuration/#configuration-wasm. Huge potential!
- eterps 3y agoWhat specifically are you looking forward to?
- ilovefood 3y agoI've been tinkering quite a bit with WasmCloud and WasmEdge lately, for some data workloads (scraping, ingesting, apis etc) mainly as an excuse to learn WebAssembly. What I want to see for myself is how Unit compares to those for this reduced scope (api's/services) and how fast I can be productive with it. This could be a good starting point for a lot of new applications, kind of an "airflow (the data orchestration thing) on Webassembly". So main points are performance (is it good enough) and developer experience (is it easy to maintain/change). Nothing really ground breaking, just trying out stuff.
- drawfloat 3y agoWhat’s the advantage of server side WebAssembly over just running a Rust/whatever application?
- politelemon 3y agoMy limited understanding from various blog posts is that you can still get the benefits of a container, but much faster startup/runtimes. As in WASM provides performance very close to native.
- pseudosavant 3y agoSecurity isolation too. I am using a WASM-based image processing pipeline for handling user submitted images. Much safer than trying to run a binary (Imagemagick, ffmpeg, etc) written in an unsafe language. In my case, the WASM does not have access to anything outside the sandbox.
- fulafel 3y agoThere seems to be code in several languages - are the parts on the front lines of untrusted input written in some memory safe language?
- vanjajaja1 3y agoI like it, has potential to push docker out of the application layer
- jiggawatts 3y agoThis seems a lot more like how IIS works, unless I'm missing something? As an aside: it's always curious to see how the programming world has splintered into cliques that no longer hang out together. NGINX Unit is a "Universal" web server without support for C++, Rust, or ASP.NET! But PERL is supported, like the 1990s Linux cgi-bin world never went away.
- crvdgc 3y agoDon't know about ASP.NET, but one of the supported languages is assembly, so I'd presume C++ and Rust can easily add a wrapper around that. > Binary-compiled languages in general: using the embedded libunit library. From https://unit.nginx.org/keyfeatures/#supported-app-languages https://unit.nginx.org/keyfeatures/#supported-app-languages
- tyingq 3y agoReads like it's not real straightforward or well documented for rust: https://github.com/nginx/unit/issues/738 https://github.com/nginx/unit/issues/738
- throwaway2037 3y agoThank you to link to that page. It is very funny. I highly recommend that others read it. Choice quote: The benefits of using the assembly language for your web apps are immense: You get all the bragging rights: coding in assembly while everyone is working safe and secure within the confines of their precious sandboxed languages is like doing a perfect triple somersault without safety mats. Next: I recommend multi-threaded assembly code with self-modifying code and lock free data structures!
- coldtea 3y agoIn Linux where this is primarily expected to be used ASP.NET is extremely rare, as is C++ for web stuff, and Rust has a vanishingly small web presence still. Lots of people use Perl still though, if not for anything else, for legacy stuff. So might as well ask why it doesn't support Delphi.
- KronisLV 3y agoHey, this is pretty cool to see! Here's a page with the features: https://unit.nginx.org/keyfeatures/ https://unit.nginx.org/keyfeatures/ The languages supported, if anyone is curious: Binary-compiled languages in general: using the embedded libunit library. Go: by overriding the http module. JavaScript (Node.js): by automatically overloading the http and websocket modules. Java: by using the Servlet Specification 3.1 and WebSocket APIs. Perl: by using PSGI. PHP: by using a custom SAPI module. Python: by using WSGI or ASGI with WebSocket support. Ruby: by using the Rack API. WebAssembly: by using Wasmtime. I'm currently using Apache as a reverse proxy for most apps and sometimes PHP-FPM when I need to run software with PHP, which works well for my personal needs (mod_md and mod_auth_openidc are pretty cool), but it's cool to see something similarly interesting to OpenResty coming along as well, too!
- deleted 3y ago[deleted]
- ghoshbishakh 3y agoThis is really interesting. Wonder how does it compare to tomcat or undertow for Java
- smetj 3y agoFinally something exciting! If only this had event push capabilities usefull for discoverability and announcement patterns over various sinks http/nats/mqtt/amqp ...
- lagniappe 3y agoI built something like this, but with much simpler syntax and automatic https simply bc I'm not smart enough to reliably set up server blocks and letsencrypt every time I route a new app. AppServe takes care of all that, and even if I did know the syntax by heart to do it in nginx, this is still faster. https://github.com/donuts-are-good/appserve https://github.com/donuts-are-good/appserve
- deleted 3y ago[deleted]
- abdellah123 3y agoI'd love to see a performance benchmark for unit. Especially for an nodejs/express app
- e12e 3y ago2017? https://youtu.be/I4IWEz2lBWU https://youtu.be/I4IWEz2lBWU
- DarkCrusader2 3y ago> open source server project that works as a reverse proxy, serves static assets, and runs applications in multiple languages. Isn't this what Nginx also does. How is Nginx Unit different beyond configuration via JSON REST APIs? The Github readme or their site is not very clear on this.
- pacifika 3y agoNginx doesn’t talk to Python or php directly it’s talks to the application server.
- fideloper 3y agoI was just playing with this the other day. Trying to find context on what it was, I saw it’s been on HN a few times (mostly to the sound of people asking the same question). Since I mostly do php/laravel, I was pleasantly surprised that it let me remove php-fpm from my stack - extremely nice when putting PHP apps in a container. I personally have come to dislike PHP-FPM’s max_children and similar settings, whose low defaults come as an annoying surprise when you suddenly get gateway errors before your server is even overloaded. (and having to add nginx AND php-fpm “layers” into a container to run PHP apps is all sorts of annoying). Unit doesn’t have as many features as Nginx so I suspect it’s best used when there’s another fully-featured http layer in front of Unit (to more easily handle TLS, protecting dot files, gzip, cache headers, and the like). Overall i’m excited to use it when making images for php apps.
- donatj 3y agoI remember when they announced this a couple years ago I had no idea why I would use it over standard nginx. That seems to still be the case. It’s JSON controlled via Curl? And has a bunch of langue’s built in for some reason? The question becomes why?
- pseudosavant 3y agoThis is the question I keep asking myself as I read more. Why? Only the NGINX team would think to "simplify" loading a configuration file from the CLI by using curl to post it. smh...
- El_RIDO 3y agoThis tool does have it's appeals to folks that run web applications behind web servers in containers. For example, in this project we use nginx + php-fpm to serve some PHP app: https://github.com/PrivateBin/docker-nginx-fpm-alpine https://github.com/PrivateBin/docker-nginx-fpm-alpine It uses s6 to handle nginx + php-fpm services, meaning we have to maintain configuration for s6 services (written in execline), nginx webserver configuration files (nginx proprietary format) and php-fpm (INI format). I've created a fork that replaces that stack with nginx unit: https://github.com/PrivateBin/docker-unit-alpine https://github.com/PrivateBin/docker-unit-alpine No need for a service manager and both webserver and php configuration are in one file[1]. What is not well documented IMHO is that you don't have to load the config at runtime - if you place the JSON file in the (compile time changeable) /var/lib/unit directory it will be loaded on startup, similar to a traditional /etc config file. But it also will get updated at runtime, if configuration is uploaded on the config socket, making it persist service restarts, hence /var is more appropriate than /etc. [1] https://github.com/PrivateBin/docker-unit-alpine/blob/master/Dockerfile#L84 https://github.com/PrivateBin/docker-unit-alpine/blob/master...
- e12e 3y ago> What is not well documented IMHO is that you don't have to load the config at runtime - if you place the JSON file in the (compile time changeable) /var/lib/unit directory it will be loaded on startup, similar to a traditional /etc config file. But it also will get updated at runtime, if configuration is uploaded on the config socket, making it persist service restarts, hence /var is more appropriate than /etc. Thank you very much for this example, and calling out the config file option. Do you find that you get any use from the config api in your setup (vs pushing a new container)? I imagine it might be more useful if nginx unit acts like a k8s ingress like setup? As for: > both webserver and php configuration are in one file[1]. That's just the line in the Docker file: COPY --chown=${UID}:${GID} conf.json /var/lib/unit/ I found the actual file more illuminating: https://github.com/PrivateBin/docker-unit-alpine/blob/master/conf.json https://github.com/PrivateBin/docker-unit-alpine/blob/master...
- andrewstuart 3y agoI switched to caddy from nginx and didn’t look back. Auto SSL wildcards was enough.
- tacker2000 3y agoHow is Caddys performance compared to nginx?
- mholt 3y agoIt's very good. In some cases better. For example Caddy can handle tens of thousands of certs without problem whereas nginx + Certbot would choke. The difference is negligible to most people.
- tomjen3 3y agoThis is an interesting idea, but I feel like it is a big oversight not to have build in support for automatically getting certificates. Instead the docs have you do something manual with certbot (a complete nono if you believe in automatic SSL and are using docker images that don't persist data, as Docker is meant to be used). The only reason I have SSL on my domain in the first place is that my host offers a simple setup that runs automatically.
- MrStonedOne 3y ago[dead]
- jchook 3y agoNginx Unit + PHP seems to handedly out-perform Nginx + php-fpm[1][2][3]. Also, Docker environments running PHP via Nginx Unit will no longer need separate containers for http + fpm, as it works similar to Apache's mod_php. 1. https://habr.com/en/articles/646397/ https://habr.com/en/articles/646397/ 2. https://medium.com/@le_moment_it/nginx-unit-discover-and-benchmark-part-3-c38661194cd0 https://medium.com/@le_moment_it/nginx-unit-discover-and-ben... 3. https://github.com/nginx/unit/issues/6#issuecomment-384073628 https://github.com/nginx/unit/issues/6#issuecomment-38407362...
- conradfr 3y agoYou don't need separate containers to run nginx and php-fpm.
- wongarsu 3y agoAre you implying that docker containers don't run a unikernel that can only run one application at a time? /s
- kobalsky 3y agodoes it involve running supervisor inside the container? that’s fine but it’s definitely not kosher. in my experience those are the ones that kick and scream when they don’t start as root.
- 3y ago
- vcryan 3y agoFor a NodeJS app, could you remove something like nodemon by using this? That could make this appealing.
- amiga-workbench 3y agoYou can replace nodemon/PM2 with a systemd unit file.
- ojintoad 3y agoexcited for .NET support so I can write NUnit tests verifying my NGINX Unit hosted software
- gibmeat 3y agoWhy the obsession (it seems to be the prominent point in the readme) with configuration via API? How often do you need to add php support on the fly? I want to configure my app server via files so it just starts up in the state that I expect. What am I missing?
- sneak 3y agoThis allows you to start up generic machines with no configuration and customize them after boot from a remote host. It's not so much "on the fly", as it is moving the long-term config storage to a different system.
- remram 3y agoI don't buy it. For this situation I would much rather have the software load its (regular) configuration file from a URL.
- Ayesh 3y agoProbably the most common use case is SaaS providers that support custom domain name for whatever the software it is. For example, a site uptime monitoring service might offer a feature to host a status page on a custom (sub)domain of the customer. The SaaS now needs to programatically create virtual hosts on demand, issue HTTPS certificates, run routine updates, etc. An API and a web server with small segmented updates make this so much easier. Compare this to Apache, that has to wait to properly end existing connections before reloading, has a config file parsing overhead, and probably does not scale that well with several virtual hosts anyway. There are hardware/File System level limitations as well.
- gabereiser 3y agoWhy? To scale infra of my offering to my customers. They need it too. I’d like for my remaining customers to not suffer downtime. I’d like to use the existing infra I have without spinning up new ones. I’d like to offer a dashboard so my customer can configure their host.
- didip 3y ago
- layer8 3y agoThey should make a page explaining how this differs from Nginx and why it needs to be its own separate thing. I couldn’t find such a page.
- bewuethr 3y agoHere maybe? https://www.nginx.com/products/nginx-unit/ https://www.nginx.com/products/nginx-unit/
- akokanka 3y agoYeah welcome to NgineX universe, hence I still prefer Apache httpd
- ComputerGuru 3y agoCan you feasibly run this behind nginx (either over http in a regular reverse proxy setup or with sort of more clever shared memory forwarding situation?) so you could, eg use nginx-unit instead of php-fpm but keep everything (ssl termination, rate limiting, etc) centralized behind your core nginx load balancer? Edit: yes, it’s as straightforward as it sounds: https://unit.nginx.org/howto/integration/ https://unit.nginx.org/howto/integration/
- stefantalpalaru 3y ago[dead]
- whatever1 3y agoSo for a python django project this would replace gunicorn?
- winrid 3y agoI would also like to know this. Edit, yes: https://unit.nginx.org/howto/django/ https://unit.nginx.org/howto/django/
- nicwolff 3y agoI'm hoping so – gunicorn has a long-open pull request that would fix `--reuse-port`, which currently does nothing https://github.com/benoitc/gunicorn/pull/2938 https://github.com/benoitc/gunicorn/pull/2938
- tandav 3y agoIf you need just reverse proxy, Caddyfile syntax looks simpler: myapp.company.com { reverse_proxy localhost:3000 }
- logeist 3y agoCame here to say Caddy still seems like the way to go for most use cases. Although I don't use it in any 'prod' environments it checks all the boxes.
- deleted 3y ago[deleted]
- sideeffffect 3y agoIt even supports Scala (Scala Native, that is) https://github.com/lolgab/snunit https://github.com/lolgab/snunit
- nginxsucx 3y ago[flagged]
- pbreit 3y agoCan someone explain what this is to a novice web app developer?
- nirse 3y agoThis is a webserver that can run various web applications for you. In a typical setup you'd run a web/http server (nginx or Apache etc) to handle the 'slow' connections to the client and a separate app server (say, an express application, or Django or Rails etc) that is completely separate from the webserver. The web server acts as a reverse proxy, sending the request on to the app server. The response from the app server is then passed to the webserver, which sends it back tot he client. So a request would this path: client -> web server -> app server -> web server -> client. This is done because web servers are optimised to handle (many) requests from clients (including things like TLS termination, optimised handling of static files, orchestrate to which backend service to send a request and much more), while application servers are optimised to run the application code. In this model, the web and app servers run separately, for example in separate containers and they have to talk to each other so you have to somehow connect them (often this is done through a network socket). So what Nginx Unit does is combining the two: it can do the standard web server stuff (not everything a normal nginx can do, but often that's not needed anyway), but also run your application for you, which could, depending on your setup, make your life a bit easier, as now you don't have to tie the two together.
- gertrunde 3y agoNginx Unit helped me out of a hole recently - needing to deal with a legacy Python 2.7 web application, while trying to keep it as 'supported' as possible (ignoring the whole python 2.7 thing for the moment!). Nginx Unit, with their python 2 module, on Debian 11 ended up working petty well.
- cduzz 3y agoHow does this compare to uwsgi?
- stefantalpalaru 3y ago[dead]
- tippexs 3y agoThis is great to read! Thanks for all the great input! I check the comments next week and make sure to address the issues / ideas mentioned. If you don’t mind feel free to drop a comment here as well with your ideas / needs. https://github.com/nginx/unit/issues/945 https://github.com/nginx/unit/issues/945 I will work on a compression between Nginx and Unit to close this gap in our documentation.
- abhishekjha 3y agoSo can I run python flask/django apps inside this? Does it repalce Gunicorn?