2022-05-13 16:13:23 +00:00
# NGINX Unit
2024-03-09 17:58:23 +00:00
[![Project Status: Active – The project has reached a stable, usable state and is being actively developed. ](https://www.repostatus.org/badges/latest/active.svg )](https://www.repostatus.org/#active)
2024-03-09 17:35:30 +00:00
[![CI ](https://github.com/nginx/unit/actions/workflows/ci.yml/badge.svg )](https://github.com/nginx/unit/actions/workflows/ci.yml "GitHub workflow CI")
2024-03-09 17:58:23 +00:00
2022-05-13 16:13:23 +00:00
## Universal Web App Server
2022-09-05 09:42:18 +00:00
![NGINX Unit Logo ](docs/unitlogo.svg )
2022-05-13 16:13:23 +00:00
NGINX Unit is a lightweight and versatile open-source server that has
2023-05-10 12:23:33 +00:00
two primary capabilities:
2022-05-13 16:13:23 +00:00
2023-01-18 15:29:33 +00:00
- serves static media assets,
- runs application code in seven languages.
2022-05-13 16:13:23 +00:00
2023-01-18 15:29:33 +00:00
Unit compresses several layers of the modern application stack into a potent,
coherent solution with a focus on performance, low latency, and scalability. It
is intended as a universal building block for any web architecture regardless
of its complexity, from enterprise-scale deployments to your pet's homepage.
2022-05-13 16:13:23 +00:00
2023-05-10 20:15:17 +00:00
Its native [RESTful JSON API ](#openapi-specification ) enables dynamic
2023-05-10 19:57:42 +00:00
updates with zero interruptions and flexible configuration, while its
out-of-the-box productivity reliably scales to production-grade workloads. We
achieve that with a complex, asynchronous, multithreading architecture
comprising multiple processes to ensure security and robustness while getting
the most out of today's computing platforms.
2022-05-13 16:13:23 +00:00
## Quick Installation
2023-01-18 15:29:33 +00:00
### macOS
2022-05-13 16:13:23 +00:00
``` console
$ brew install nginx/unit/unit
```
For details and available language packages, see the
[docs ](https://unit.nginx.org/installation/#homebrew ).
### Docker
``` console
2023-07-25 08:45:04 +00:00
$ docker pull unit
2022-05-13 16:13:23 +00:00
```
For a description of image tags, see the
[docs ](https://unit.nginx.org/installation/#docker-images ).
2023-04-13 10:57:14 +00:00
### Amazon Linux, Fedora, Red Hat
2022-05-13 16:13:23 +00:00
``` console
2022-12-14 21:17:01 +00:00
$ wget https://raw.githubusercontent.com/nginx/unit/master/tools/setup-unit & & chmod +x setup-unit
# ./setup-unit repo-config && yum install unit
# ./setup-unit welcome
2022-05-13 16:13:23 +00:00
```
For details and available language packages, see the
[docs ](https://unit.nginx.org/installation/#official-packages ).
### Debian, Ubuntu
``` console
2022-12-14 21:17:01 +00:00
$ wget https://raw.githubusercontent.com/nginx/unit/master/tools/setup-unit & & chmod +x setup-unit
# ./setup-unit repo-config && apt install unit
# ./setup-unit welcome
2022-05-13 16:13:23 +00:00
```
For details and available language packages, see the
[docs ](https://unit.nginx.org/installation/#official-packages ).
## Running a Hello World App
2023-07-25 08:45:04 +00:00
Unit runs apps in a
[variety of languages ](https://unit.nginx.org/howto/samples/ ).
Let's consider a basic example,
choosing PHP for no particular reason.
2022-05-13 16:13:23 +00:00
Suppose you saved a PHP script as `/www/helloworld/index.php` :
``` php
<?php echo "Hello, PHP on Unit!"; ?>
```
To run it on Unit with the `unit-php` module installed, first set up an
application object. Let's store our first config snippet in a file called
`config.json` :
``` json
{
"helloworld": {
"type": "php",
"root": "/www/helloworld/"
}
}
```
Saving it as a file isn't necessary, but can come in handy with larger objects.
2022-10-06 11:47:47 +00:00
Now, `PUT` it into the `/config/applications` section of Unit's control API,
2022-05-13 16:13:23 +00:00
usually available by default via a Unix domain socket:
``` console
# curl -X PUT --data-binary @config.json --unix-socket \
/path/to/control.unit.sock http://localhost/config/applications
```
``` json
{
"success": "Reconfiguration done."
}
```
2022-10-06 11:47:47 +00:00
Next, reference the app from a listener object in the `/config/listeners`
2022-05-13 16:13:23 +00:00
section of the API. This time, we pass the config snippet straight from the
command line:
``` console
2023-11-08 11:27:44 +00:00
# curl -X PUT -d '{"127.0.0.1:8080": {"pass": "applications/helloworld"}}' \
2022-05-13 16:13:23 +00:00
--unix-socket /path/to/control.unit.sock http://localhost/config/listeners
```
``` json
{
"success": "Reconfiguration done."
}
```
Now Unit accepts requests at the specified IP and port, passing them to the
application process. Your app works!
``` console
$ curl 127.0.0.1:8080
Hello, PHP on Unit!
```
Finally, query the entire `/config` section of the control API:
``` console
# curl --unix-socket /path/to/control.unit.sock http://localhost/config/
```
Unit's output should contain both snippets, neatly organized:
``` json
{
"listeners": {
"127.0.0.1:8080": {
"pass": "applications/helloworld"
}
},
"applications": {
"helloworld": {
"type": "php",
"root": "/www/helloworld/"
}
}
}
```
For full details of configuration management, see the
[docs ](https://unit.nginx.org/configuration/#configuration-management ).
2023-05-10 19:57:42 +00:00
## OpenAPI Specification
2023-05-10 20:15:17 +00:00
Our [OpenAPI specification ](docs/unit-openapi.yaml ) aims to simplify
configuring and integrating NGINX Unit deployments and provide an authoritative
source of knowledge about the control API.
2023-05-10 19:57:42 +00:00
Although the specification is still in the early beta stage, it is a promising
step forward for the NGINX Unit community. While working on it, we kindly ask
you to experiment and provide feedback to help improve its functionality and
usability.
2022-05-13 16:13:23 +00:00
## Community
- The go-to place to start asking questions and share your thoughts is
2024-01-09 15:32:17 +00:00
[GitHub Discussions ](https://github.com/nginx/unit/discussions ).
2022-05-13 16:13:23 +00:00
- Our [GitHub issues page ](https://github.com/nginx/unit/issues ) offers
space for a more technical discussion at your own pace.
- The [project map ](https://github.com/orgs/nginx/projects/1 ) on
GitHub sheds some light on our current work and plans for the future.
- Our [official website ](https://unit.nginx.org/ ) may provide answers
not easily found otherwise.
- Get involved with the project by contributing! See the
[contributing guide ](CONTRIBUTING.md ) for details.
- To reach the team directly, subscribe to the
[mailing list ](https://mailman.nginx.org/mailman/listinfo/unit ).
2024-03-11 13:37:40 +00:00
- For security issues, [email us ](mailto:security-alert@nginx.org ),
mentioning NGINX Unit in the subject and following the [CVSS
2022-05-13 16:13:23 +00:00
v3.1](https://www.first.org/cvss/v3.1/specification-document) spec.