RProxy

RProxy is a reverse proxy server designed to route requests to various upstream services based on the hostname. It is built using C and leverages the cJSON library for JSON parsing. This README provides a comprehensive guide on how to get started, configure the server, and understand its features.

Getting Started

Prerequisites

  • GCC (GNU Compiler Collection)
  • Make
  • OpenSSL libraries (libssl and libcrypto)
  • SQLite3 library

Installation

  1. Clone the repository:
    git clone <repository-url>
    cd <repository-directory>
    
  2. Build the project using the Makefile:
    make
    
  3. Run the server:
    make run
    

Configuration

The configuration for RProxy is stored in the proxy_config.json file. Below is a breakdown of its structure:

{
  "port": 8585,
  "reverse_proxy": [
    { "hostname": "example.com", "upstream_host": "127.0.0.1", "upstream_port": 3000, "use_ssl": false }
  ]
}
  • port: The port on which the RProxy server will listen for incoming requests.
  • reverse_proxy: An array of objects, each representing a reverse proxy configuration.
    • hostname: The hostname that the server will respond to.
    • upstream_host: The IP address or hostname of the upstream service.
    • upstream_port: The port on which the upstream service is running.
    • use_ssl: A boolean indicating whether to use SSL for the upstream connection.

Features

  • Reverse Proxying: RProxy can route requests to multiple upstream services based on the hostname.
  • SSL Support: Optionally, RProxy can connect to upstream services using SSL.
  • Dynamic Configuration: The configuration can be easily modified by editing the proxy_config.json file.
  • Multi-Host Support: RProxy can handle requests for multiple hostnames, making it suitable for microservices architectures.

Use Cases

  • Microservices Architecture: RProxy can be used to route requests to different microservices based on the hostname, simplifying service discovery.
  • Load Balancing: By configuring multiple upstream services for a single hostname, RProxy can distribute traffic among them.
  • API Gateway: RProxy can serve as an API gateway, providing a single entry point for various backend services.

Monitoring and Statistics

RProxy can be extended to monitor various statistics such as:

  • Request Count: The total number of requests handled by the server.
  • Response Times: The time taken to respond to requests.
  • Error Rates: The number of failed requests to upstream services.

License

Copyright (c) retoor. All rights reserved.

This project is licensed under the MIT License - see the LICENSE file for details.