mirror of
https://github.com/emikulic/darkhttpd.git
synced 2023-08-10 21:13:08 +03:00
Forward to HTTPS if X-Forwarded-Proto is equal to "http". This can be
enabled with "--forward-https". This might be useful if darkhttpd is behind a reverse proxy that supports SSL.
This commit is contained in:
parent
a8ae2b1de0
commit
49baf385e1
25
darkhttpd.c
25
darkhttpd.c
@ -260,6 +260,8 @@ static struct forward_mapping *forward_map = NULL;
|
|||||||
static size_t forward_map_size = 0;
|
static size_t forward_map_size = 0;
|
||||||
static const char *forward_all_url = NULL;
|
static const char *forward_all_url = NULL;
|
||||||
|
|
||||||
|
static int forward_to_https = 0;
|
||||||
|
|
||||||
struct mime_mapping {
|
struct mime_mapping {
|
||||||
char *extension, *mimetype;
|
char *extension, *mimetype;
|
||||||
};
|
};
|
||||||
@ -939,6 +941,10 @@ static void usage(const char *argv0) {
|
|||||||
timeout_secs);
|
timeout_secs);
|
||||||
printf("\t--auth username:password\n"
|
printf("\t--auth username:password\n"
|
||||||
"\t\tEnable basic authentication.\n\n");
|
"\t\tEnable basic authentication.\n\n");
|
||||||
|
printf("\t--forward-https\n"
|
||||||
|
"\t\tIf the client requested HTTP, forward to HTTPS.\n"
|
||||||
|
"\t\tThis is useful if darkhttpd is behind a reverse proxy\n"
|
||||||
|
"\t\tthat supports SSL.\n\n");
|
||||||
#ifdef HAVE_INET6
|
#ifdef HAVE_INET6
|
||||||
printf("\t--ipv6\n"
|
printf("\t--ipv6\n"
|
||||||
"\t\tListen on IPv6 address.\n\n");
|
"\t\tListen on IPv6 address.\n\n");
|
||||||
@ -1152,6 +1158,9 @@ static void parse_commandline(const int argc, char *argv[]) {
|
|||||||
xasprintf(&auth_key, "Basic %s", key);
|
xasprintf(&auth_key, "Basic %s", key);
|
||||||
free(key);
|
free(key);
|
||||||
}
|
}
|
||||||
|
else if (strcmp(argv[i], "--forward-https") == 0) {
|
||||||
|
forward_to_https = 1;
|
||||||
|
}
|
||||||
#ifdef HAVE_INET6
|
#ifdef HAVE_INET6
|
||||||
else if (strcmp(argv[i], "--ipv6") == 0) {
|
else if (strcmp(argv[i], "--ipv6") == 0) {
|
||||||
inet6 = 1;
|
inet6 = 1;
|
||||||
@ -1998,6 +2007,22 @@ static void process_get(struct connection *conn) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (forward_to_https) {
|
||||||
|
char *proto = parse_field(conn, "X-Forwarded-Proto: ");
|
||||||
|
if (proto) {
|
||||||
|
if (strcmp(proto, "http") == 0) {
|
||||||
|
char *host = parse_field(conn, "Host: ");
|
||||||
|
if (host) {
|
||||||
|
redirect(conn, "https://%s%s", host, decoded_url);
|
||||||
|
free(host);
|
||||||
|
free(proto);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free(proto);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* test the host against web forward options */
|
/* test the host against web forward options */
|
||||||
if (forward_map) {
|
if (forward_map) {
|
||||||
char *host = parse_field(conn, "Host: ");
|
char *host = parse_field(conn, "Host: ");
|
||||||
|
Loading…
Reference in New Issue
Block a user