1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
* httpd
** ssl
Run httpd using inets. Tell inets what to start by configuring
'services' in a config file that you pass to erl(1) at startup:
$ cat httpd_inets.config
[{inets, [{services, [
{httpd, [{proplist_file, "httpd_inets_props.conf"}]}
]}]}].
$
Then start erl with `-config httpd_inets'.
In erl, start inets:
1> inets.start().
ok
There are two ways to configure the httpd server.
Either configure httpd using a props list with all the httpd arguments:
$ cat httpd_inets_props.conf
[
{port, 8080},
{bind_address, {127,0,0,1}},
{server_name, "httpd_inets_FQDN"},
{server_root, "/tmp/httpd_inets"},
{document_root, "/tmp/httpd_inets/docroot"},
{socket_type, essl},
{ssl_certificate_file, "/tmp/httpd_inets/02.pem"},
{ssl_certificate_key_file, "/tmp/httpd_inets/srv1.key"},
{ssl_ca_certificate_file, "/tmp/httpd_inets/01.pem"}
].
$
In the example config for inets above, this is what will be used.
Or configure httpd using an Apache like configuration file. Configure
inets to start httpd with {file, "httpd_config"} in
httpd_inets.config. Here's a config file equivalent to what's seen
above in the props list:
$ cat httpd_config.OFF
ServerName httpd_inets_FQDN
ServerRoot /tmp/httpd_inets
DocumentRoot /tmp/httpd_inets/docroot
Port 8080
SocketType essl
SSLCertificateFile /tmp/httpd_inets/02.pem
SSLCertificateKeyFile /tmp/httpd_inets/srv1.key
SSLCACertificateFile /tmp/httpd_inets/01.pem
$
** dynamic content
Configuring httpd with {erl_script_alias, {"/d", [httpd_inets]}} and
compiling httpd_inets.erl will make the following URL refer to
httpd_inets:hello/3:
https://localhost:8080/d/httpd_inets:hello
Here's an example of what http_inets.erl can look like:
$ cat httpd_inets.erl
-module('httpd_inets').
-export([hello/3]).
hello(SessionID, _Env, _Input) ->
mod_esi:deliver(SessionID, [
"Content-Type: text/html\r\n\r\n",
"<html><body>hello, erlang world</body></html>"
]).
$
httpd config 'modules' seems to be crucial to get right, including the
order of the modules listed. The mod_esi module is the one providing
the erl_script_alias functionality. Here's a configuration that's
working with Erlang R15B01 (erts-5.9.1):
{modules, [mod_alias,
mod_auth,
mod_esi,
mod_get,
mod_head,
mod_log,
mod_disk_log]},
|