Skip to content

Cgi

CGI (Common Gateway Interface). It is a way to communicate between browser and server. Simple scripts used to do simple tasks.

Docs and References

You'll want to consult the httpd and [httpd.conf man pages to know about httpd config blocks. You'll want to consult the httpd and [httpd.conf man pages to know about httpd config blocks.

Writing the script

We will use C language to create the script.

Create the script at your home directory /home/username/hello.c

#include <stdio.h>
int main(void)
{
   puts("Status: 200 OK\r");
   puts("Content-Type: text/html\r");
   puts("\r");
   puts("Hello, world!\n");
   return 0;
}

Your script is ready, but you still need to compile it.

$ cd /home/username
$ cc hello.c -o hello.cgi
$ doas mv hello.cgi /var/www/htdocs/yoursite/cgi-bin/

Make the script executable

$ doas chmod +x /var/www/htdocs/yoursite/cgi-bin/hello.cgi

Configuring httpd.conf

Add the cgi block to your /etc/httpd.conf block for your website. It should look like this:

server "example.com" {
        listen on * port 80
        root "/htdocs/yoursite"
        connection max request body 104857600
        location "/cgi-bin/*"{
                root "/htdocs/yoursite/"
                fastcgi
        }
        location "/.well-known/acme-challenge/*" {
                root "/acme"
                request strip 2
        }
}

NOTE: You must replace example.com with your own domain

Now any scripts that you add in ##STARTCODEBLOCK## /var/www/htdocs/yoursite/cgi-bin ##ENDCODEBLOCK## directory will be accessible by ##STARTCODEBLOCK## http://example.com/cgi-bin/scriptname ##ENDCODEBLOCK##

Make sure you edit the block accordingly if you are using TLS.

enable the server to run the script, we will use Slowcgi .

Enable and start slowcgi

$ doas rcctl enable slowcgi
$ doas rcctl start slowcgi

Enable and start httpd if you haven't already

$ doas rcctl enable httpd
$ doas rcctl start httpd

Go to http://example.com/cgi-bin/hello.cgi and you will see "Hello world" printed on your screen!