2
0
mirror of https://github.com/acepanel/acepanel.github.io.git synced 2026-02-04 19:27:17 +08:00
Files
2026-01-26 23:59:09 +08:00

136 lines
4.2 KiB
Markdown

# Reverse Proxy
Reverse proxy websites are used to forward external requests to backend services, commonly used for deploying Node.js, Go, Java, Python, and other applications.
## How It Works
```
User Request -> Nginx (Reverse Proxy) -> Backend Application (e.g., localhost:3000)
```
Nginx receives HTTP/HTTPS requests from users and forwards them to the specified backend address.
## Create Reverse Proxy Website
1. Go to the **Website** page
2. Make sure the **Reverse Proxy** tab is selected
3. Click **Create Website**
### Configuration Items
- **Name**: Website identifier, e.g., `myapp`
- **Domain**: Bound domain, e.g., `app.example.com`
- **Port**: Listening port, default 80
- **Proxy Target**: Backend service address, e.g., `http://127.0.0.1:3000`
- **Remarks**: Optional remarks
### Proxy Target Format
```
http://127.0.0.1:3000 # Local service
http://localhost:8080 # Local service
http://172.18.0.2:80 # Docker container
https://backend.internal # Internal HTTPS service
```
## Edit Reverse Proxy Website
Click the **Edit** button in the website list to enter the edit page.
### Domain and Listen
Configure the website's domain and listening port, supporting multiple domains and ports.
![Domain and Listen Configuration](/images/website/website-proxy-edit.png)
- **Domain**: Multiple domains can be added
- **Listen Address**: Multiple ports can be configured, supporting HTTPS and QUIC(HTTP3)
### Upstream Configuration
Upstream defines backend server addresses, supporting multiple backends for load balancing.
![Upstream Configuration](/images/website/website-proxy-upstream.png)
- **Upstream Name**: Identifier name for the upstream
- **Load Balancing Algorithm**: Supports round-robin (default), IP Hash, and other algorithms
- **Keep-Alive Connections**: Number of persistent connections to maintain with the backend
- **DNS Resolver**: Custom DNS resolver
Click the **Add Server** button to add backend servers:
![Add Server](/images/website/website-proxy-upstream-add.png)
- **Server Address**: Backend server address, e.g., `127.0.0.1:8080`
- **Options**: Optional parameters, e.g., `weight=5` (weight), `backup` (backup server), etc.
### Proxy Configuration
Configure proxy behavior and request header forwarding.
![Proxy Configuration](/images/website/website-proxy-proxy.png)
- **Match Type**: Match type, such as prefix match, regex match, etc.
- **Match Expression**: URL expression to match
- **Proxy Target**: Enter upstream name or directly enter backend address
- **Enable Cache**: Whether to enable proxy cache
- **Enable Buffer**: Whether to enable buffer, AI applications are recommended to disable otherwise it may affect streaming output
- **Proxy SNI**: Whether to enable SNI (only valid for HTTPS proxy)
- **Custom Request Headers**: Add or modify request headers passed to the backend
- **Response Content Replacement**: Can replace strings in response content
## Use Cases
### Node.js Application
```bash
# Start Node.js application
node app.js # Listening on port 3000
```
Proxy Target: `http://127.0.0.1:3000`
### Docker Container
If the backend is a Docker container, you can use the container's IP address or container name (within the same network).
Proxy Target: `http://container-name:port` or `http://container-IP:port`
### Multiple Backends (Load Balancing)
Add multiple backend addresses in the upstream configuration to achieve load balancing.
Proxy Target: `http://upstream-name`
## Common Configurations
### WebSocket Support
Reverse proxy supports WebSocket by default, no additional configuration needed.
### Forwarding Real IP
AcePanel automatically configures the following request headers to pass the user's real IP to the backend:
- `X-Real-IP`
- `X-Forwarded-For`
- `X-Forwarded-Proto`
### Custom Configuration
You can edit Nginx configuration in the website management page to add custom configurations:
```nginx
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
proxy_buffer_size 64k;
proxy_buffers 4 64k;
```
## Notes
1. Ensure the backend service is started and listening on the specified port
2. If the backend is a Docker container, ensure the port is correctly mapped or use Docker network
3. When the backend service crashes, Nginx will return a 502 error