{"id":50277907,"url":"https://github.com/imsweb/mod-proxy-scgi","last_synced_at":"2026-05-27T22:02:30.128Z","repository":{"id":147444915,"uuid":"11692870","full_name":"imsweb/mod-proxy-scgi","owner":"imsweb","description":"A fork of Apache's mod_proxy_scgi that handles SCRIPT_NAME and PATH_INFO sanely.","archived":false,"fork":false,"pushed_at":"2025-09-08T14:44:23.000Z","size":20,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-09-08T15:40:25.319Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/imsweb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-07-26T19:12:17.000Z","updated_at":"2025-09-08T14:44:27.000Z","dependencies_parsed_at":"2023-04-01T06:15:11.947Z","dependency_job_id":null,"html_url":"https://github.com/imsweb/mod-proxy-scgi","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/imsweb/mod-proxy-scgi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imsweb%2Fmod-proxy-scgi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imsweb%2Fmod-proxy-scgi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imsweb%2Fmod-proxy-scgi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imsweb%2Fmod-proxy-scgi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/imsweb","download_url":"https://codeload.github.com/imsweb/mod-proxy-scgi/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imsweb%2Fmod-proxy-scgi/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33585203,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-27T02:00:06.184Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-27T22:02:27.950Z","updated_at":"2026-05-27T22:02:30.114Z","avatar_url":"https://github.com/imsweb.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"mod-proxy-scgi\n==============\n\nA fork of Apache's mod_proxy_scgi that handles SCRIPT_NAME and PATH_INFO sanely.\n\n\nThe Problem\n-----------\n\nThe problem with mod_proxy_scgi out of the box is that it essentially passes the request path as `SCRIPT_NAME`, regardless of how your ProxyPass line is configured. That means applications need to know where they are \"mounted\", instead of being told by Apache (this is basically what `SCRIPT_NAME` exists to do). And for root-mounted applications (typial Django sites), the entire path is sent as `SCRIPT_NAME`, causing Django to think every request is for /.\n\nSee also: http://www.saddi.com/software/news/archives/78-mod_proxy_scgi,-why!!.html\n\n\nFixing It\n---------\n\nAll this module does is check to see if there is a path component specified after the port in your `ProxyPass` directive, and if so, uses it (minus any trailing slash) as `SCRIPT_NAME`. It also trims the `SCRIPT_NAME` off the front of `PATH_INFO`, such that `SCRIPT_NAME` + `PATH_INFO` = request path.\n\n\nExample\n-------\n\nAn example configuration for a Django application mounted under `/app` may look like this:\n\n    \u003cVirtualHost myhost:80\u003e\n        ServerName myhost.mydomain.com\n        DocumentRoot /srv/http\n        \u003cDirectory /srv/http\u003e\n            Options FollowSymLinks Includes\n            Require all granted\n        \u003c/Directory\u003e\n        ProxySCGISendfile On\n        ProxyPass /static !\n        ProxyPass /app/ scgi://127.0.0.1:5555/app/\n    \u003c/VirtualHost\u003e\n\nIn the confirguation above, a request for `/app/first/second/` would be passed to Django as having `SCRIPT_NAME = /app` and `PATH_INFO = /first/second/`. That way, Django's URL handling/reversing Just Work.\n\nIf, for some reason, you want to use this fork of mod_proxy_scgi, but don't want to enable the `SCRIPT_NAME` and `PATH_INFO` handling for a certain site, you can disable this processing be setting the `proxy-scgi-stupid` environment variable:\n\n    SetEnv proxy-scgi-stupid\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimsweb%2Fmod-proxy-scgi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fimsweb%2Fmod-proxy-scgi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimsweb%2Fmod-proxy-scgi/lists"}