| Apache Traffic Server MySQL-based remap plugin |
| ============================================== |
| |
| == Description == |
| This is a basic plugin for doing dynamic "remaps" from a database. It essentially rewrites the incoming request's Host header / origin server connection |
| to one retrieved from a database. |
| |
| The generic proxying setup is the following: |
| |
| UA ----> Traffic Server ----> Origin Server |
| |
| Without the plugin a request like: |
| |
| GET /path/to/something HTTP/1.1 |
| Host: original.host.com |
| |
| Ends up requesting http://original.host.com/path/to/something |
| |
| With this plugin enabled, you can easily change that to anywhere you desire. Imagine the many possibilities.... |
| |
| I have benchmarked this at about 9200 requests/sec (1.7k object) on a junky imac with mysql, ab & trafficserver local. Real performance |
| is likely substantially higher up to your mysql's max queries / second. |
| |
| == Build == |
| A simple |
| |
| % make install |
| |
| should do it, assuming that you have the tsxs script in your search path. |
| This script is installed with your installation of Apache Traffic Server. |
| |
| NOTE: you may need to open the Makefile and adjust the paths to MySQL client includes & libraries |
| |
| == Configuration == |
| Import the default schema to a database you create: |
| |
| mysql -u root -p -e "CREATE DATABASE mysql_remap;" # create a new database |
| mysql -u root -p mysql_remap < schema/import.sql # import the provided schema |
| |
| insert some interesting values in mysql_remap.hostname & mysql_remap.map |
| |
| Traffic Server plugin configuration is done inside a global configuration file: /path/to/etc/trafficserver/plugin.config: |
| |
| mysql_remap.so /path/to/sample.ini |
| |
| The INI file should contain the following values: |
| |
| [mysql_remap] |
| mysql_host = localhost #default |
| mysql_port = 3306 #default |
| mysql_username = root |
| mysql_password = |
| mysql_database = mysql_remap #default |
| |
| To debug errors, start trafficserver manually using: |
| |
| /path/to/traffic_server -T "mysql_remap" |
| |
| And resolve any errors or warnings displayed. |
| |
| == Credits == |
| * Eric Balsa |
| * ericb@apache.org / eric@ericbalsa.com |
| * http://www.ericbalsa.com |
| |
| == TODO == |
| * some stupid bug in the ini parsing requiring a blank trailing \n |
| * make db backend pluggable |
| * handle mysql connections a bit more intelligently |
| * define a fallback host for missing remaps (instead of blindly issuing a 404) |
| * handle rewriting paths |
| * handle regexp in paths & hosts |
| * verify scheme switching |
| * ... many more ideas ... |