summaryrefslogtreecommitdiffhomepage
path: root/src/nxt_http.h (follow)
AgeCommit message (Collapse)AuthorFilesLines
2022-11-20Basic njs support.Zhidao HONG1-1/+1
2022-11-20Var: separating nxt_tstr_t from nxt_var_t.Zhidao HONG1-2/+3
It's for the introduction of njs support. For each option that supports native variable and JS template literals introduced next, it's unified as template string. No functional changes.
2022-10-12HTTP: added a $request_time variable.Zhidao HONG1-0/+2
2022-07-14Var: dynamic variables support.Zhidao HONG1-2/+5
This commit adds the variables $arg_NAME, $header_NAME, and $cookie_NAME.
2022-06-22Constified numerous function parameters.Andrew Clayton1-2/+3
As was pointed out by the cppcheck[0] static code analysis utility we can mark numerous function parameters as 'const'. This acts as a hint to the compiler about our intentions and the compiler will tell us when we deviate from them. [0]: https://cppcheck.sourceforge.io/
2022-06-20Router: forwared header replacement.Zhidao HONG1-1/+2
2022-06-20Router: introduced nxt_http_forward_t.Zhidao HONG1-2/+7
This makes the replacement of forwarded request header like client_ip and protocol more generic. It's a prerequirement for protocol replacement. No functional changes.
2022-05-19HTTP: generalized uri encoding.Zhidao HONG1-0/+10
No functional changes.
2022-05-30Static: supporting new "index" option.Alejandro Colomar1-0/+1
This supports a new option "index" that configures a custom index file name to be served when a directory is requested. This initial support only allows a single fixed string. An example: { "share": "/www/data/static/$uri", "index": "lookatthis.htm" } When <example.com/foo/bar/> is requested, </www/data/static/foo/bar/lookatthis.html> is served. Default is "index.html". === nxt_conf_validator.c: Accept "index" as a member of "share", and make sure it's a string. === I tried this feature in my own computer, where I tried the following: - Setting "index" to "lookatthis.htm", and check that the correct file is being served (check both a different name and a different extension). - Not setting "index", and check that <index.html> is being served. - Settind "index" to an array of strings, and check that the configuration fails: { "error": "Invalid configuration.", "detail": "The \"index\" value must be a string, but not an array." }
2022-05-18HTTP: generalized argument and cookie parsing.Zhidao HONG1-0/+12
No functional changes.
2022-05-16Supporting empty Location URIs.Alejandro Colomar1-1/+1
An empty string in Location was being handled specially by not sending a Location header. This may occur after variable resolution, so we need to consider this scenario. The obsolete RFC 2616 defined the Location header as consisting of an absolute URI <https://www.rfc-editor.org/rfc/rfc2616#section-14.30>, which cannot be an empty string. However, the current RFC 7231 allows the Location to be a relative URI <https://www.rfc-editor.org/rfc/rfc7231#section-7.1.2>, and a relative URI may be an empty string <https://stackoverflow.com/a/43338457>. Due to these considerations, this patch allows sending an empty Location header without handling this case specially. This behavior will probably be more straightforward to users, too. It also simplifies the code, which is now more readable, fast, and conformant to the current RFC. We're skipping an allocation at request time in a common case such as "action": {"return": 404}
2022-04-26Fixed indentation.Alejandro Colomar1-7/+7
Some lines (incorrectly) had an indentation of 3 or 5, or 7 or 9, or 11 or 13, or 15 or 17 spaces instead of 4, 8, 12, or 16. Fix them. Found with: $ find src -type f | xargs grep -n '^ [^ ]'; $ find src -type f | xargs grep -n '^ [^ *]'; $ find src -type f | xargs grep -n '^ [^ ]'; $ find src -type f | xargs grep -n '^ [^ *]'; $ find src -type f | xargs grep -n '^ [^ +]'; $ find src -type f | xargs grep -n '^ [^ *+]'; $ find src -type f | xargs grep -n '^ [^ +]'; $ find src -type f | xargs grep -n '^ [^ *+]';
2021-11-05Router: matching query string support.Zhidao HONG1-0/+1
The "query" option matches decoded arguments, including plus ('+') to space (' '). Like "uri", it can be a string or an array of strings.
2021-09-07Router: refactored variable pass.Zhidao HONG1-2/+2
Since the "pass" option supports both strings and variables, a generic nxt_var_t structure can be used in the configuration phase, and the "name" field in actions is redundant. No functional changes.
2021-08-12Router: client IP address replacement.Oisin Canty1-2/+15
This commit introduces the replacement of the client address based on the value of a specified HTTP header. This is intended for use when Unit is placed behind a reverse proxy like nginx or a CDN. You must specify the source addresses of the trusted proxies. This can be accomplished with any valid IP pattern supported by Unit's match block: ["10.0.0.1", "10.4.0.0/16", "!192.168.1.1"] The feature is configured per listener. The client address replacement functionality only operates when there is a source IP match and the specified header is present. Typically this would be an 'X-Forwarded-For' header. { "listeners": { "127.0.0.1:8080": { "client_ip": { "header": "X-Forwarded-For", "source": [ "10.0.0.0/8" ] }, "pass": "applications/my_app" }, } } If a request occurs and Unit receives a header like below: "X-Forwarded-For: 84.123.23.23" By default, Unit trusts the last rightmost IP in the header, so REMOTE_ADDR will be set to 84.123.23.23 if the connection originated from 10.0.0.0/8. If Unit runs behind consecutive reverse proxies and receives a header similar to the following: "X-Forwarded-For: 84.123.23.23, 10.0.0.254" You will need to enable "recursive" checking, which walks the header from last address to first and chooses the first non-trusted address it finds. { "listeners": { "127.0.0.1:8080": { "client_ip": { "header": "X-Forwarded-For", "source": [ "10.0.0.0/8" ] "recursive": true, }, "pass": "applications/my_app" }, } } If a connection from 10.0.0.0/8 occurs, the chain is walked. Here, 10.0.0.254 is also a trusted address so the client address will be replaced with 84.123.23.23. If all IP addresses in the header are trusted, the client address is set to the first address in the header: If 10.0.0.0/8 is trusted and "X-Forwarded-For: 10.0.0.3, 10.0.0.2, 10.0.0.1", the client address will be replaced with 10.0.0.3.
2021-07-24Router: split nxt_http_app_conf_t from nxt_http_action_t.Zhidao HONG1-5/+0
No functional changes.
2021-07-26Router: renamed nxt_http_proxy_create() as nxt_http_proxy_init().Zhidao HONG1-2/+2
No functional changes.
2021-07-23Router: split nxt_http_static_conf_t from nxt_http_action_t.Zhidao HONG1-15/+12
No functional changes.
2021-05-24Router: split nxt_http_return_conf_t from nxt_http_action_t.Zhidao HONG1-3/+17
No functional changes.
2021-05-06Static: implemented MIME filteringOisin Canty1-1/+5
2021-04-29Static: support for openat2() features.Zhidao HONG1-0/+2
Support for chrooting, rejecting symlinks, and rejecting crossing mounting points on a per-request basis during static file serving.
2021-04-22Router: grouped app and share fields in nxt_http_action_t.Zhidao HONG1-3/+9
This is a prerequisite for further introduction of openat2() features. No functional changes.
2020-12-08PHP: populating PHP_AUTH_* server variables.Valentin Bartenev1-0/+1
This closes #498 issue on GitHub.
2020-11-17Router: matching regular expressions support.Axel Duch1-0/+6
2020-08-13Basic variables support.Valentin Bartenev1-4/+8
2020-08-12Responding with error in case of first process start failure.Max Romanov1-0/+4
After shared application port introducing, request queue in router was removed and requests may stuck forever waiting for another process start.
2020-06-23Upstream chunked transfer encoding support.Igor Sysoev1-1/+0
2020-05-14PHP: implemented "targets" option.Valentin Bartenev1-0/+2
This allows to specify multiple subsequent targets inside PHP applications. For example: { "listeners": { "*:80": { "pass": "routes" } }, "routes": [ { "match": { "uri": "/info" }, "action": { "pass": "applications/my_app/phpinfo" } }, { "match": { "uri": "/hello" }, "action": { "pass": "applications/my_app/hello" } }, { "action": { "pass": "applications/my_app/rest" } } ], "applications": { "my_app": { "type": "php", "targets": { "phpinfo": { "script": "phpinfo.php", "root": "/www/data/admin", }, "hello": { "script": "hello.php", "root": "/www/data/test", }, "rest": { "root": "/www/data/example.com", "index": "index.php" }, } } } }
2020-05-14Configuration: URI encoding in the "pass" option.Valentin Bartenev1-1/+4
This is useful to escape "/" in path fragments. For example, in order to reference the application named "foo/bar": { "pass": "applications/foo%2Fbar" }
2020-04-16Using malloc/free for the http fields hash.Max Romanov1-3/+3
This is required due to lack of a graceful shutdown: there is a small gap between the runtime's memory pool release and router process's exit. Thus, a worker thread may start processing a request between these two operations, which may result in an http fields hash access and subsequent crash. To simplify issue reproduction, it makes sense to add a 2 sec sleep before exit() in nxt_runtime_exit().
2020-03-21Implemented "location" option for "return" action.Valentin Bartenev1-0/+2
This allows to specify redirects: { "action": { "return": 301, "location": "https://www.example.com/" } }
2020-03-27Implemented "return" action.Valentin Bartenev1-0/+7
The "return" action can be used to immediately generate a simple HTTP response with an arbitrary status: { "action": { "return": 404 } } This is especially useful for denying access to specific resources.
2020-03-19Completing request header buffers to avoid memory leak.Max Romanov1-1/+2
Before this fix, only persistent connection request buffers were completed. This issue was introduced in dc403927ab0b.
2020-03-06Round robin upstream added.Igor Sysoev1-3/+15
2020-03-03Added a "fallback" option to be used with the "share" action.Valentin Bartenev1-0/+1
It allows proceeding to another action if a file isn't available. An example: { "share": "/data/www/", "fallback": { "pass": "applications/php" } } In the example above, an attempt is made first to serve a request with a file from the "/data/www/" directory. If there's no such file, the request is passed to the "php" application. Fallback actions may be nested: { "share": "/data/www/", "fallback": { "share": "/data/cache/", "fallback": { "proxy": "http://127.0.0.1:9000" } } }
2019-11-14Processing inconsistent proxied response length.Igor Sysoev1-0/+2
Keepalive connection is disabled if upstream response length differs from specified in the "Content-Length" field value.
2019-11-14Initial proxy support.Igor Sysoev1-2/+39
2019-11-14Using request task.Igor Sysoev1-0/+1
2019-11-14Replacing pass with action.Igor Sysoev1-10/+10
2019-09-19Basic support for serving static files.Valentin Bartenev1-0/+29
2019-08-26Adding body handler to nxt_http_request_header_send().Igor Sysoev1-2/+4
2019-08-20Introducing websocket support in router and libunit.Max Romanov1-0/+28
2019-08-06nxt_h1proto_t definition was moved to h1proto implementation.Igor Sysoev1-19/+1
2019-08-06Refactored HTTP protocol callback table.Igor Sysoev1-22/+19
2019-07-24Added routing based on request scheme.Axel Duch1-2/+0
Scheme matches exact string “http” or “https”.
2019-05-30Added routing based on cookies.Igor Sysoev1-0/+1
2019-05-30Added routing based on arguments.Igor Sysoev1-0/+1
2019-03-21Adjusting request schema value according to connection tls state.Max Romanov1-1/+3
This closes #223 issue on GitHub.
2019-03-06Removed unnecessary abstraction layer.Alexander Borisov1-0/+4
2019-02-27Initial routing implementation.Igor Sysoev1-1/+31