summaryrefslogtreecommitdiff
path: root/src/tools/README
blob: 3db5c009b628f8833b84a2f0a4cc50e8897e264d (plain)
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]},