====== Use Apache HTTP Server with Synchronet ======
The Apache HTTP Server (httpd) supports dynamic content via external executables called [[wp>CGI]] programs.
===== MOD_PROXY =====
Probably the best way to integrate Synchronet behind Apache is to [[http://www.google.com/search?q=apache+mod_proxy+reverse+proxy|configure MOD_PROXY on Apache]] to reverse-proxy calls for .ssjs files to Synchronet's HTTP server running on a different port. It's worth noting that the current SBBS web interface is setup to use HTTP Authentication, and would need to be adjusted to support a cookie based authentication scheme. By configuring Apache to use the same directory as SBBS, you can rely on Apache to perform caching and compression of non-dynamic content to be delivered directly.
===== IIS =====
[[http://www.roughneckbbs.com/|Roughneck BBS]] is currently using a custom reverse proxy for use with IIS. You may email the sysop for a copy.
===== JSexec =====
The easiest way to get dynamic Synchronet content (e.g. users, messages, files) served by the Apache HTTP Server is by using [[util:JSexec]] as a CGI program to execute JavaScript (e.g. ''.js'' or ''.ssjs'') files that generate dynamic HTML (on ''stdout'').
==== CGI JavaScript ====
JavaScript code that generates dynamic CGI content must first send one or more headers, followed by a blank-line, followed by the actual content (e.g. HTML).
=== Example ===
As an example, the following generates a very basic one-line header (declaring the content to be plain-text), followed by a blank line, followed by one line of text (the ubiquitous ''Hello, World!''):
print("Content-Type: text/plain");
print();
print("Hello, world!");
:!: If the content is going to contain HTML, then you would want to declare the ''Content-Type'' to be ''text/html'' instead.
==== Unix Examples ====
For example, to execute the ''[[dir:exec]]/nodelist-html.js'' script to display to a web client a dynamically-generated BBS node list in HTML, create a file named ''nodelist'' in your Apache content ''cgi-bin'' directory containing the following 2 lines:
#!/bin/sh
exec /sbbs/exec/jsexec -c/sbbs/ctrl nodelist-html.js
:!: Don't forget to make the file executable: ''chmod a+x nodelist''
Now when a web client requests the URL ''%%http://yourbbs.com/cgi-bin/nodelist%%'' from your Apache HTTP Server, they'll get the dynamic Synchronet node-list in HTML.
Another option is to embed the JavaScript code in the CGI executable file itself. As an example, creating the file ''cgi-bin/test.cgi'' containing the following 4 lines:
#!/usr/sbin/jsexec -c/sbbs/ctrl
print("Content-Type: text/plain");
print();
print("Hello, world!");
:!: Don't forget to make the file executable: ''chmod a+x test.cgi''
Now when a web client requests the URL ''%%http://yourbbs.com/cgi-bin/test.cgi%%'' from your Apache HTTP Server, they'll get the "Hello, world!" message.
===== See Also =====
* [[custom:javascript|JavaScript]]
* [[util:JSexec]]
* [[:howto:|HowTo index]]
{{tag>apache http web cgi javascript jsexec unix}}