You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by ju...@apache.org on 2023/05/06 08:13:48 UTC
[apisix] branch master updated: docs: updated Stream Proxy doc (#9367)
This is an automated email from the ASF dual-hosted git repository.
juzhiyuan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix.git
The following commit(s) were added to refs/heads/master by this push:
new fd24f3c50 docs: updated Stream Proxy doc (#9367)
fd24f3c50 is described below
commit fd24f3c504c79fe641191f5f5ce79081cadb32cf
Author: Traky Deng <tr...@gmail.com>
AuthorDate: Sat May 6 16:13:40 2023 +0800
docs: updated Stream Proxy doc (#9367)
---
docs/en/latest/stream-proxy.md | 53 ++++++++++++++++++++++++------------------
1 file changed, 30 insertions(+), 23 deletions(-)
diff --git a/docs/en/latest/stream-proxy.md b/docs/en/latest/stream-proxy.md
index 0ab87b8df..c68173d09 100644
--- a/docs/en/latest/stream-proxy.md
+++ b/docs/en/latest/stream-proxy.md
@@ -21,23 +21,24 @@ title: Stream Proxy
#
-->
-TCP is the protocol for many popular applications and services, such as LDAP, MySQL, and RTMP. UDP (User Datagram Protocol) is the protocol for many popular non-transactional applications, such as DNS, syslog, and RADIUS.
+A stream proxy operates at the transport layer, handling stream-oriented traffic based on TCP and UDP protocols. TCP is used for many applications and services, such as LDAP, MySQL, and RTMP. UDP is used for many popular non-transactional applications, such as DNS, syslog, and RADIUS.
-APISIX can dynamically load balancing TCP/UDP proxy. In Nginx world, we call TCP/UDP proxy to stream proxy, we followed this statement.
+APISIX can serve as a stream proxy, in addition to being an application layer proxy.
## How to enable stream proxy?
-Setting the `stream_proxy` option in `conf/config.yaml`, specify a list of addresses that require dynamic proxy.
-By default, no stream proxy is enabled.
+By default, stream proxy is disabled.
+
+To enable the option, add the `apisix.stream_proxy` option in `conf/config.yaml` and specify a list of addresses which APISIX should act as a stream proxy and listen for incoming requests.
```yaml
apisix:
- stream_proxy: # TCP/UDP proxy
- tcp: # TCP proxy address list
- - 9100
+ stream_proxy:
+ tcp:
+ - 9100 # listen on 9100 ports of all network interfaces for TCP requests
- "127.0.0.1:9101"
- udp: # UDP proxy address list
- - 9200
+ udp:
+ - 9200 # listen on 9200 ports of all network interfaces for UDP requests
- "127.0.0.1:9211"
```
@@ -48,40 +49,46 @@ If you have set the `enable_admin` to false, and need to enable both HTTP and st
```yaml
apisix:
enable_admin: false
- stream_proxy: # TCP/UDP proxy
+ stream_proxy:
only: false
- tcp: # TCP proxy address list
+ tcp:
- 9100
```
-## How to set route?
+If `apisix.stream_proxy` is undefined in `conf/config.yaml`, you will encounter an error similar to the following and not be able to add a stream route:
-Here is a mini example:
+```
+{"error_msg":"stream mode is disabled, can not add stream routes"}
+```
+
+## How to set a route?
+
+You can create a stream route using the Admin API `/stream_routes` endpoint. For example:
```shell
curl http://127.0.0.1:9180/apisix/admin/stream_routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
- "remote_addr": "127.0.0.1",
+ "remote_addr": "192.168.5.3",
"upstream": {
"nodes": {
- "127.0.0.1:1995": 1
+ "192.168.4.10:1995": 1
},
"type": "roundrobin"
}
}'
```
-It means APISIX will proxy the request to `127.0.0.1:1995` which the client remote address is `127.0.0.1`.
+With this configuration, APISIX would only forward the request to the upstream service at `192.168.4.10:1995` if and only if the request is sent from `192.168.5.3`. See the next section to learn more about filtering options.
-For more use cases, please take a look at [test case](https://github.com/apache/apisix/blob/master/t/stream-node/sanity.t).
+More examples can be found in [test cases](https://github.com/apache/apisix/blob/master/t/stream-node/sanity.t).
-## More route match options
+## More stream route filtering options
-And we can add more options to match a route. Currently stream route configuration supports 3 fields for filtering:
+Currently there are three attributes in stream routes that can be used for filtering requests:
-- server_addr: The address of the APISIX server that accepts the L4 stream connection.
-- server_port: The port of the APISIX server that accepts the L4 stream connection.
-- remote_addr: The address of client from which the request has been made.
+- `server_addr`: The address of the APISIX server that accepts the L4 stream connection.
+- `server_port`: The port of the APISIX server that accepts the L4 stream connection.
+- `remote_addr`: The address of client from which the request has been made.
Here is an example:
@@ -101,7 +108,7 @@ curl http://127.0.0.1:9180/apisix/admin/stream_routes/1 -H 'X-API-KEY: edd1c9f03
It means APISIX will proxy the request to `127.0.0.1:1995` when the server address is `127.0.0.1` and the server port is equal to `2000`.
-Let's take another real world example:
+Here is an example with MySQL:
1. Put this config inside `config.yaml`