-
Notifications
You must be signed in to change notification settings - Fork 1
sportsru/gourlmapper
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
About: ------------ gourlmapper – simple and fast service for url mapping with nginx & redis (support internal/external redirects) * usable not only with nginx probably Description ------------ Use url maps for redirect from one url to another. Supported redirect types: * external 301 (Moved permanently) * internal (nginx X-Accel-Redirect header) Use storages: * local – file slurped in memory (be careful with it's size) for fast permanent mapping (optional) * redis (for dynamic urls), redis values caches locally for efficiency (optional) Support mutiply hosts, but map "host -> prefix" hardcoded in sources (TODO: move to config) Usage: ------------ ./gourlmapper -h Example: GOMAXPROCS=2 ./gourlmapper -f gen_map.txt Environment ------------ – create/generate url's map file or/and : - install Redis (redis.io) *optional* – add keys in redis – install and setup nginx - configure nginx Local file format: ------------------- <prefix> <redir_type> <from> <to> ru I /1000000 /_tags/ru/1000000.html ru 301 /tags/ru/1000000.html /1000000 Redis keys format: ------------------ $ redis-cli # set internal redirects: > SET "ru:/dynamo" "I /_tags/1685245.html" > SET "ua:/dynamo" "I /_tags/1047809.html" # set external redirects: > SET "ru:/tags/1685245.html" "301 /dynamo" > SET "ua:/tags/1047809.html" "301 /dynamo" Nginx config example: -------------------- nginx.conf: log_format timed_combined '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '$request_time $upstream_response_time $pipe'; access_log log/hru.access.log timed_combined; # one host with 1st map server { listen 8069; server_name ru.localhost; proxy_set_header Host www.sports.ru; include conf/common_hru.conf; } # 2nd host with 2nd map server { listen 8069; server_name ua.localhost; proxy_set_header Host ua.tribuna.com; include conf/common_hru.conf; } common_hru.conf: # all other rules must be on top location = /favicon.ico { root htdocs/favicon.ico; } # only for internal redirects location ^~ /_tags/(\d+)\.html$ { internal; set $tag_id $1; rewrite ^/(.*) /tags/$tag_id.html; error_page 418 = @tag; return 418; } # -> target location @tag { proxy_pass http://www.sports.ru; } # our fancy redirector here: location / { proxy_pass http://127.0.0.1:8080; } How to test ------------- bare service: ./gourlmapper curl -I http://127.0.0.1:8080/dynamo -H "Host: www.sports.ru" with nginx: ./gourlmapper curl -I http://ua.localhost:8069/dynamo curl -I http://ua.localhost:8069/ Other notes: ------------- available hosts hardcoded in `gourlmapper/main.go` by map `hostsMap` TODO: ---------------- - add statistics in expvar - test, check with 'go build -race' produced binary - memory profiling - benchmarking
About
web backend for human readable urls
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published