RHEL7: Deploy an Apache basic CGI application.

Share this link

Note: This is an RHCE 7 exam objective.


First, follow the instructions to install an Apache web server.

Configuration Procedure

Create the /var/www/cgi-bin/hello.pl Perl script and insert the following lines:

print "Content-type: text/html\n\n";
print "Hello, World!";

Make this script executable:

# chmod 755 /var/www/cgi-bin/hello.pl

Restart the httpd service:

# systemctl restart httpd

Check the SELinux httpd_enable_cgi boolean is on (it is on by default):

# getsebool httpd_enable_cgi
httpd_enable_cgi --> on

Note: Another SELinux boolean useful to remember is httpd_can_sendmail: it allows the httpd server to send emails.

Check the httpd service:

# yum install -y elinks
# elinks http://localhost/cgi-bin/hello.pl

Alternatively, if you want to use a directory other than the /var/www/cgi-bin/ default (/webapp for example), you will have some additional steps.

Create the /webapp directory:

# mkdir /webapp

Move the hello.pl file into it:

# mv /var/www/cgi-bin/hello.pl /webapp

Set up SElinux configuration for the /webapp directory:

# yum install -y setroubleshoot-server
# semanage fcontext -a -t httpd_sys_script_exec_t "/webapp(/.*)?"
# restorecon -R /webappelinks /usr/share/httpd/manual/howto/cgi.html

Edit the /etc/httpd/conf/httpd.conf file and replace the ‘ScriptAlias‘ option with the following line:

ScriptAlias /cgi-bin/ "/webapp/"

In the same file, where the configuration of your website (or virtual host) is located, add the following lines:

<Directory "/webapp">
AllowOverride None
Options None
Require all granted

In the same stanza, you can optionally add the following lines (but it doesn’t seem mandatory):

Options ExecCGI
AddHandler cgi-script .pl

Check the configuration file:

# apachectl configtest
Syntax OK

Restart the httpd service:

# systemctl restart httpd

Testing Time

Check the execution of the Perl script:

# yum install -y elinks
# elinks http://localhost/cgi-bin/hello.pl

Useful Tip

If you don’t remember the syntax of any directive, type:

# yum -y install httpd-manual
# elinks /usr/share/httpd/manual/howto/cgi.html
1 Star2 Stars3 Stars4 Stars5 Stars (4 votes, average: 5.00 out of 5)
14 comments on “RHEL7: Deploy an Apache basic CGI application.
  1. codingberg says:

    “Options ExecCGI” and “AddHandler cgi-script .pl” should be added only if you don’t specify ScriptAlias directive within VirtualHost. Otherwise, if you use ScriptAlias you can indeed skip it.

  2. alexritm says:

    do I need to use particularly a Perl test script for this task? or it can be PHP or Python one? or it can be requested to deploy any of them on the exam?

  3. Jaz says:

    You should also include how to work on WSGI script followed by mod_wsgi package.

  4. twostep says:

    When the problem is with opening cgi page “500 Internal Server Error”, you have to verify also the httpd error log file, because when selinux is not set properly, the warning is not displaying in /var/log/audit/audit.log,
    but in /var/log/httpd/error_log only.

    According to http://selinuxproject.org/page/NB_AL:
    “…It is not mandatory for SELinux-aware applications to audit events or even log them in the audit log. The decision is made by the application designer.”

  5. jeromeza says:

    For examples on syntax it’s easier to check the httpd manual:

    yum -y install httpd-manual
    elinks /usr/share/httpd/manual/howto/cgi.html

  6. ehasbun says:

    How about wsgi scripts? Are those worth learning?

  7. jank says:

    I wonder, do you need to hardcode the cgi script into the apache configuration
    ScriptAlias /cgi-bin/ “/webapp/cgi.html”
    ScriptAlias /cgi-bin/ “/webapp/”

    The first one if you do a
    elinks http://localhost/cgi-bin/
    elinks http://localhost/cgi-bin/cgi.html

    Both are correct are but is there a best practice?

    • Sam says:

      Think about the problem this way: which is the most effective and gives you the more versatile options. If you are doing the exam, answer the question given.
      From a practical point of view, how would you access multiple script files?

Leave a Reply

Upcoming Events (Local Time)

There are no events.

RHCSA7: Task of the day

Allowed time: 10 minutes.
Boot and change the root password before the end of the boot process.

RHCE7: Task of the day

Allowed time: 15 minutes.
Configure a Samba server called MYSERVER, belonging to the MYGROUP group, sharing the /shared directory with the name "shared".

Follow me on Twitter

Poll for favorite RHEL 7 book

What is your favorite RHEL 7 book to prepare RHCSA & RHCE exams?

View Results

Loading ... Loading ...

Poll for most difficult RHCSA 7 topic

What do you think is the most difficult RHCSA 7 topic?

View Results

Loading ... Loading ...

Poll for most difficult RHCE 7 topic

What do you think is the most difficult RHCE 7 topic?

View Results

Loading ... Loading ...