| README - gopherproxy-c - Gopher HTTP proxy in C (CGI) | |
| git clone git://git.codemadness.org/gopherproxy-c | |
| Log | |
| Files | |
| Refs | |
| README | |
| LICENSE | |
| --- | |
| README (3782B) | |
| --- | |
| 1 gopherproxy | |
| 2 =========== | |
| 3 | |
| 4 Build dependencies | |
| 5 ------------------ | |
| 6 | |
| 7 - C compiler. | |
| 8 - libc + some BSD extensions (dprintf). | |
| 9 - POSIX system. | |
| 10 - make (optional). | |
| 11 - LibreSSL libtls for gophers:// support (optional). | |
| 12 | |
| 13 | |
| 14 Features | |
| 15 -------- | |
| 16 | |
| 17 - Works in older browsers such as links, lynx, w3m, dillo, etc. | |
| 18 - No Javascript or CSS required. | |
| 19 - Gopher+ is not supported. | |
| 20 - Support for Gopher over TLS encryption (gophers://). | |
| 21 | |
| 22 | |
| 23 Cons | |
| 24 ---- | |
| 25 | |
| 26 - Not all gopher types are supported. | |
| 27 | |
| 28 | |
| 29 Gopher over TLS | |
| 30 --------------- | |
| 31 | |
| 32 For a description of the protocol see near the section "TLS support": | |
| 33 gopher://bitreich.org/1/scm/gopher-protocol/file/gopher-extension.md.gph | |
| 34 | |
| 35 For a server implementation see: | |
| 36 - geomyidae: gopher://bitreich.org/1/scm/geomyidae | |
| 37 | |
| 38 For client implementations that support it see: | |
| 39 | |
| 40 - cURL: https://curl.se/ | |
| 41 - sacc: gopher://bitreich.org/1/scm/sacc | |
| 42 - hurl: gopher://codemadness.org/1/git/hurl | |
| 43 | |
| 44 | |
| 45 CGI configuration examples | |
| 46 -------------------------- | |
| 47 | |
| 48 Nginx + slowcgi: | |
| 49 | |
| 50 location /gopherproxy/ { | |
| 51 include /etc/nginx/fastcgi_params; | |
| 52 fastcgi_pass unix:/run/slowcgi.sock; | |
| 53 fastcgi_param SCRIPT_FILENAME /cgi-bin/gopherproxy.cgi; | |
| 54 fastcgi_param SCRIPT_NAME /cgi-bin/gopherproxy.cgi; | |
| 55 fastcgi_param REQUEST_URI /cgi-bin/gopherproxy.cgi; | |
| 56 } | |
| 57 | |
| 58 | |
| 59 OpenBSD httpd + slowcgi: | |
| 60 | |
| 61 location "/gopherproxy" { | |
| 62 root "/cgi-bin/gopherproxy.cgi" | |
| 63 fastcgi | |
| 64 } | |
| 65 | |
| 66 Caddy + http.cgi: | |
| 67 | |
| 68 proxy.domain.tld { | |
| 69 cgi /proxy /usr/local/bin/gopherproxy | |
| 70 } | |
| 71 | |
| 72 | |
| 73 Notes | |
| 74 ----- | |
| 75 | |
| 76 Restrictions: | |
| 77 | |
| 78 For security reasons, only port 70 and 7070 are accepted as valid gopher… | |
| 79 Furthermore there is a connection time limit and download size limit. Se… | |
| 80 source-code for more information. | |
| 81 | |
| 82 | |
| 83 Tor support: | |
| 84 | |
| 85 Modify the isblacklisted() function in gopherproxy.c to allow .onion add… | |
| 86 | |
| 87 | |
| 88 torsocks support: | |
| 89 | |
| 90 To accept torsocks with gopherproxy, remove the -static flag from LDFLAG… | |
| 91 the Makefile. This is because torsocks is a shared library and "hooks in… | |
| 92 network calls. | |
| 93 | |
| 94 | |
| 95 Nginx buffering issues: | |
| 96 | |
| 97 When using nginx 1.12+ with OpenBSD slowcgi there may be buffering issue… | |
| 98 is a bug in nginx. This bug is fixed in newer nginx versions (see patch … | |
| 99 | |
| 100 Workaround: | |
| 101 # workaround fastcgi buffering bug in nginx (fixed in 1.14). | |
| 102 fastcgi_buffering off; | |
| 103 | |
| 104 Patch: | |
| 105 | |
| 106 commit cfc8c28259b3fd59f2517ac4830a08e8a9925148 | |
| 107 Author: Maxim Dounin <[email protected]> | |
| 108 Date: Thu Nov 9 15:35:20 2017 +0300 | |
| 109 | |
| 110 FastCGI: adjust buffer position when parsing incomplete records. | |
| 111 | |
| 112 Previously, nginx failed to move buffer position when parsing an inc… | |
| 113 record header, and due to this wasn't be able to continue parsing on… | |
| 114 remaining bytes of the record header were received. | |
| 115 | |
| 116 This can affect response header parsing, potentially generating spur… | |
| 117 like "upstream sent unexpected FastCGI request id high byte: 1 while… | |
| 118 response header from upstream". While this is very unlikely, since … | |
| 119 record headers are written in a single buffer, this still can happen… | |
| 120 life, for example, if a record header will be split across two TCP p… | |
| 121 and the second packet will be delayed. | |
| 122 | |
| 123 This does not affect non-buffered response body proxying, due to "bu… | |
| 124 buf->last;" at the start of the ngx_http_fastcgi_non_buffered_filter… | |
| 125 function. Also this does not affect buffered response body proxying… | |
| 126 each input buffer is only passed to the filter once. | |
| 127 | |
| 128 diff --git a/src/http/modules/ngx_http_fastcgi_module.c b/src/http/modul… | |
| 129 index ea16ecae..b4bb1d0a 100644 | |
| 130 --- a/src/http/modules/ngx_http_fastcgi_module.c | |
| 131 +++ b/src/http/modules/ngx_http_fastcgi_module.c | |
| 132 @@ -2646,6 +2646,7 @@ ngx_http_fastcgi_process_record(ngx_http_request_t… | |
| 133 } | |
| 134 } | |
| 135 | |
| 136 + f->pos = p; | |
| 137 f->state = state; | |
| 138 | |
| 139 return NGX_AGAIN; |