summaryrefslogtreecommitdiffhomepage
AgeCommit message (Collapse)AuthorFilesLines
2023-06-07Packages: added Debian 12 "bookworm" support.Konstantin Pavlov2-1/+14
2023-06-07Tools: unitc edit mode for interactive configuration.Liam Crilly2-2/+27
2023-06-01Tools: improved ps(1) portability for unitc.Liam Crilly1-4/+19
Improved cross-platform support by trying multiple ps(1) invocations to obtain the unitd command line parameters. Additional error checking detects when this process fails. The first attempt uses `ps -wwo args=COMMAND -p` which has very broad support and has the additional benefit of simplifying the output for more reliable parsing of the process info. If that fails then we fall back to simply `ps`. The parsing of the process info has also changed. Instead of converting '[]' into spaces we now convert them into explicit delimiters (using '^'). This is more reliable as it marks the beginning and the end of the info we care about. Any trailing process information is now ignored (FreeBSD). Additional error handling improves the robustness when starting unitd with a different filename or from a relative path. In this case the control socket and log file detection will fail when running `unitd --help`. Additional error checking and messages are displayed when the control socket cannot be determined. A single warning is shown when the log file cannot be determined.
2023-06-01Python: Fix error checks in nxt_py_asgi_request_handler().synodriver1-2/+2
Signed-off-by: synodriver <diguohuangjiajinweijun@gmail.com> Reviewed-by: Andrew Clayton <a.clayton@nginx.com> [ Re-word commit subject - Andrew ] Fixes: c4c2f90c5b53 ("Python: ASGI server introduced.") Closes: <https://github.com/nginx/unit/issues/895> Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
2023-06-01Python: Add ASGI lifespan state support.synodriver4-3/+84
Lifespan state is a special dict in asgi lifespan scope, which allow applications to persist data from the lifespan cycle to request/response handling. The scope["state"] namespace provides a place to store these sorts of things. The server will ensure that a shallow copy of the namespace is passed into each subsequent request/response call into the application. Some frameworks are already taking advantage of this feature, for example, starlette, and without this feature they wouldn't work properly. Signed-off-by: synodriver <diguohuangjiajinweijun@gmail.com> Reviewed-by: Andrew Clayton <a.clayton@nginx.com> [ Minor code tweaks to avoid lines > 80 chars, static a function and re-work the PyMemberDef structure initialisation for Python <3.7 and -Wwrite-strings compatibility - Andrew ] Tested-by: <https://github.com/synodriver> Tested-by: <https://github.com/hawiliali> Closes: <https://github.com/nginx/unit/issues/864> Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
2023-05-29Tests: more fixtures.Andrei Zeliankou24-341/+340
Common methods from applications/proto.py converted to the fixtures. sysctl check moved to the specific file where it is using. Some options moved to the constructor to have early access.
2023-05-29Tests: Log reworked.Andrei Zeliankou3-80/+90
All log-related code moved to the log.py.
2023-05-25Tests: assertion related fixes.Andrei Zeliankou11-95/+90
2023-05-25Tests: "temp_dir" fixture used were possible.Andrei Zeliankou3-5/+5
2023-05-25Tests: unified setup method usage.Andrei Zeliankou15-93/+113
To make fixtures accessible inside of setup methods in tests all these methods are renamed to the "setup_method_fixture" and decorated by autouse flag. Also all setup methods moved to the top of the files.
2023-05-25Tests: removed unused variables.Andrei Zeliankou34-91/+87
2023-05-25Tests: fixed incorrect pointer assignment.Alejandro Colomar1-2/+2
If we don't update the pointer before copying the request body, then we get the behavior shown below. After this patch, "foo\n" is rightly appended at the end of the response body. Request: "GET / HTTP/1.1\r\nHost: _\nContent-Length: 4\n\nfoo\n" Response body: """ Hello world! foo est data: Method: GET Protocol: HTTP/1.1 Remote addr: 127.0.0.1 Local addr: 127.0.0.1 Target: / Path: / Fields: Host: _ Content-Length: 4 Body: """ Fixes: 1bb22d1e922c ("Unit application library.") Reviewed-by: Andrew Clayton <a.clayton@nginx.com> Signed-off-by: Alejandro Colomar <alx@nginx.com>
2023-05-24Updated copyright notice.Andrei Zeliankou9-27/+75
2023-05-24Version bump.Andrei Zeliankou2-2/+44
2023-05-21Using names in .mailmap.Alejandro Colomar1-2/+2
In this case, Andrew always committed under the same name, so it's not strictly necessary. This is for consistency, so that it's clearer whose is an email address. It also makes it easier to sort the names alphabetically. Reviewed-by: Andrew Clayton <a.clayton@nginx.com> Signed-off-by: Alejandro Colomar <alx@nginx.com>
2023-05-21Added Alex to .mailmap.Alejandro Colomar1-0/+2
Reviewed-by: Andrew Clayton <a.clayton@nginx.com> Signed-off-by: Alejandro Colomar <alx@nginx.com>
2023-05-21Added back deprecated options to unitd.Alejandro Colomar1-0/+31
We renamed the options recently, with the intention of keeping the old names as supported but deprecated for some time, before removal. This was done with the configure script options, but in the unitd binary, we accidentally removed the old names, causing some unintended breakage. Keep support for the old names, albeit with a deprecation message to stderr, for some time, until we decide to remove them. Fixes: 5a37171f733f ("Added default values for pathnames.") Closes: <https://github.com/nginx/unit/issues/876> Reported-by: El RIDO <elrido@gmx.net> Acked-by: Liam Crilly <liam@nginx.com> Acked-by: Artem Konev <a.konev@f5.com> Acked-by: Timo Stark <t.stark@nginx.com> Reviewed-by: Andrew Clayton <a.clayton@nginx.com> Cc: Andrei Zeliankou <zelenkov@nginx.com> Signed-off-by: Alejandro Colomar <alx@nginx.com>
2023-05-19Tests: added tests for "server_version" option.Andrei Zeliankou1-0/+15
2023-05-19Tests: added ASGI application with IPv6 address test.Andrei Zeliankou1-0/+9
2023-05-18Python: Fix ASGI applications accessed over IPv6.Andrew Clayton1-11/+3
There are a couple of reports on GitHub about issues accessing Python ASGI based applications over IPv6. A request over IPv6 would result in an error like 2023/05/13 17:49:12 [alert] 47202#47202 [unit] #10: Python failed to create 'client' pair 2023/05/13 17:49:12 [alert] 47202#47202 [unit] Python failed to call 'loop.call_soon' ValueError: invalid literal for int() with base 10: 'db8:1:1:1ee7:dead:beef:cafe' The above error was the direct cause of the following exception: Traceback (most recent call last): File "/usr/lib64/python3.11/asyncio/base_events.py", line 765, in call_soon handle = self._call_soon(callback, args, context) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib64/python3.11/asyncio/base_events.py", line 781, in _call_soon handle = events.Handle(callback, args, self, context) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ SystemError: <class 'asyncio.events.Handle'> returned a result with an exception set This issue occurred in the nxt_py_asgi_create_ip_address() function where it tries to create an IP address / port number pair. It does this by looking for the first ':' in the address and taking everything after it as the port number. Like in the above error message, if we tried to access the server @ 2001:db8:1:1:1ee7:dead:beef:cafe, then we'd end up with the port number as 'db8:1:1:1ee7:dead:beef:cafe'. There are two issues with this 1) The IP address and port number are already flowed through separately. 2) Even if (1) wasn't true, it would still be broken for IPv6 as we'd expect to a get an address literal like [2001:db8:1:1:1ee7:dead:beef:cafe]:8080, however there was no code to handle the []'s. The fix is to simply not try looking for a port number. We pass a port number into this function to use in the case where we don't find a port number, we never will... A further cleanup would be to flow through the server port number when creating the 'server pair' PyTuple, rather than just using the hard coded 80. Closes: <https://github.com/nginx/unit/issues/793> Closes: <https://github.com/nginx/unit/issues/874> Reviewed-by: Alejandro Colomar <alx@nginx.com> Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
2023-05-10Fixed broken links in README.Artem Konev1-4/+4
2023-05-10Added the initial version of the OpenAPI specification.Artem Konev2-6/+6350
2023-05-10Unit 1.30.0 release.Andrei Zeliankou1-0/+1
2023-05-10Merged with the 1.29 branch.1.30.0Andrei Zeliankou1-2/+1
2023-05-10Added version 1.30.0 CHANGES.Andrei Zeliankou2-2/+30
2023-05-10Edited "changes.xml" for the 1.30.0 release.Andrei Zeliankou1-4/+35
2023-05-10Toned down proxy messaging in README.Artem Konev1-2/+1
2023-05-10Tests: added tests for NJS loadable modules.Andrei Zeliankou6-15/+133
2023-05-09Regenerated dockerfiles.Konstantin Pavlov11-425/+477
2023-05-09Docker: show welcome page on port 80 when entrypoint.d is empty.Liam Crilly5-33/+136
The entrypoint script now performs a default configuration when no useful files are found in /docker-entrypoint.d/ The default configuration serves a welcome page in response to all requests, using Markdown unless text/html is sent in the Accept header. This provides a useful 'hello world' experience when running a Unit container for the first time.
2023-05-05Docker: tagged minimal variant as latest.Konstantin Pavlov1-1/+5
2023-05-05Docker: Makefile housekeeping.Konstantin Pavlov1-5/+2
2023-05-05Docker: added a way to generate multiple versions of an image.Konstantin Pavlov1-23/+30
2023-05-03Packages: added Ubuntu 23.04 "lunar" support.Konstantin Pavlov6-1/+177
2023-05-09Docker: add support for JavaScript modules.Liam Crilly1-1/+7
2023-05-08NJS: supported loadable modules.Zhidao HONG16-50/+1591
2023-05-09Tests: added tests for the URI rewrite.Andrei Zeliankou1-0/+219
2023-04-20HTTP: added basic URI rewrite.Zhidao HONG11-11/+167
This commit introduced the basic URI rewrite. It allows users to change request URI. Note the "rewrite" option ignores the contained query if any and the query from the request is preserverd. An example: "routes": [ { "match": { "uri": "/v1/test" }, "action": { "return": 200 } }, { "action": { "rewrite": "/v1$uri", "pass": "routes" } } ] Reviewed-by: Alejandro Colomar <alx@nginx.com>
2023-05-08Docs: removed incorrect Pp call in unitd.8.Alejandro Colomar1-1/+0
Pp is used to separate paragraphs, not to introduce them. A Pp macro call right after Sh is wrong, and it is ignored by the formatter, which reports a warning about it. Signed-off-by: Alejandro Colomar <alx@nginx.com>
2023-05-08Docs: using appropriate mdoc(7) macros for URIs in unitd.8.Alejandro Colomar1-6/+3
Reviewed-by: Artem Konev <a.konev@f5.com> Signed-off-by: Alejandro Colomar <alx@nginx.com>
2023-05-08Docs: changed Authors section to Copyright section in unitd.8.Alejandro Colomar1-2/+4
The Authors section is meant to list the main authors. However, the section only contained the copyright notice, so the Copyright section seems more appropriate. While we change that, it makes sense to also specify the license, and update the copyright year. Reviewed-by: Liam Crilly <liam@nginx.com> Reviewed-by: Artem Konev <a.konev@f5.com> Signed-off-by: Alejandro Colomar <alx@nginx.com>
2023-05-08Docs: updated unitd.8 date.Alejandro Colomar1-1/+1
We've applied significant changes to the page, so let's update the date. While we're at it, let's change it to use ISO 8601 format for the date. Reviewed-by: Artem Konev <a.konev@f5.com> Signed-off-by: Alejandro Colomar <alx@nginx.com>
2023-05-08Docs: setting the project name in unitd.8.Alejandro Colomar1-1/+1
Not setting it produces the default value of 'BSD' or 'GNU', depending on the software formatting the manual page. We're neither, so let's specify our project name. See groff_mdoc(7). While mandoc_mdoc(7) formally says that .Os is only for the operating system, and not for the package name, that's an oversimplification, and only meant for software inherent to the OS. For portable software, mandoc(1)'s (and OpenBSD's) maintainer Ingo Schwarze agreed that it is more sensible to specify the project name (and optionally, the version). Reviewed-by: Artem Konev <a.konev@f5.com> Signed-off-by: Alejandro Colomar <alx@nginx.com>
2023-05-08Docs: documenting the renamed directory flags in unitd.8.Alejandro Colomar1-4/+4
Reviewed-by: Artem Konev <a.konev@f5.com> Signed-off-by: Alejandro Colomar <alx@nginx.com>
2023-05-08Docs: not using shouty caps in unitd.8.Alejandro Colomar1-10/+10
There was a recent unanimous agreement by maintainers of groff, mandoc, the Linux man-pages, and other relevant programmers, that manual pages should not use uppercase unnecessarily. Use of uppercase in the title and in the section's titles dates from before one could use bold, italics, and other such formatting, so that it was the way of giving more importance to certain parts of a page. Nowadays, we use bold, so uppercase is unnecessary. Moreover, using uppercase in the title is bad, since it removes information. If we keep the exact casing used in the program (or function) name, we provide more information. And anyway, if users want to read in uppercase, they can program certain mdoc(7) or man(7) macros to transform their arguments into uppercase. This could be done via </etc/groff/mdoc.local> and </etc/groff/man.local>. There's a plan of transforming OpenBSD pages and the Linux man-pages to stop using uppercase. Other projects may join. That will likely happen in the following months. Let's align with this. Reviewed-by: Artem Konev <a.konev@f5.com> Signed-off-by: Alejandro Colomar <alx@nginx.com>
2023-05-08Docs: removed '-v' from unitd.8.Alejandro Colomar1-2/+2
This short option is not really supported. Probably it was just a typo. Reviewed-by: Artem Konev <a.konev@f5.com> Signed-off-by: Alejandro Colomar <alx@nginx.com>
2023-05-08Docs: moved uintd.8 to man8/ subdirectory.Alejandro Colomar5-6/+6
Reviewed-by: Artem Konev <a.konev@f5.com> Signed-off-by: Alejandro Colomar <alx@nginx.com>
2023-04-12Docker: made curl fail with non-zero exit code on server errors.Konstantin Pavlov1-1/+1
2023-04-25Allow to remove the version string in HTTP responses.Andrew Clayton4-3/+22
Normally Unit responds to HTTP requests by including a header like Server: Unit/1.30.0 however it can sometimes be beneficial to withhold the version information and in this case just respond with Server: Unit This patch adds a new "settings.http" boolean option called server_version, which defaults to true, in which case the full version information is sent. However this can be set to false, e.g "settings": { "http": { "server_version": false } }, in which case Unit responds without the version information as the latter example above shows. Link: <https://www.ietf.org/rfc/rfc9110.html#section-10.2.4> Closes: <https://github.com/nginx/unit/issues/158> Reviewed-by: Alejandro Colomar <alx@nginx.com> Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
2023-04-25Decouple "Unit" from NXT_SERVER.Andrew Clayton1-1/+2
Split out the "Unit" name from the NXT_SERVER #define into its own NXT_NAME #define, then make NXT_SERVER a combination of that and NXT_VERSION. This is required for a subsequent commit where we may want the server name on its own. Reviewed-by: Alejandro Colomar <alx@nginx.com> Signed-off-by: Andrew Clayton <a.clayton@nginx.com>