This article explains how Nginx can be configured to run CGI scripts on Ubuntu 24.04.
A CGI (Common Gateway Interface) script is a standard protocol that allows web servers to interact with executable programs, often written in languages like Perl, Python, or PHP, to generate dynamic web content.
CGI enables generating dynamic web content that responds to user input or other factors.
Enabling CGI on a Nginx server supports dynamic interactions and allows for functionalities like search features, login systems, and other interactive elements on websites.
Install FastCGI
To use and run CGI script on Nginx, you must first install and configure FastCGI. With Nginx installed, run the command below to install FastCGI.
sudo apt install fcgiwrap
After installing the FastCGI package, we’ll define a location to store our CGI scripts. We’ll create a new /cgi-bin folder in the Nginx root directory for this post.
The URL to the CGI scripts directory will be [/var/www/cgi-bin/].
First, create the CGI directory by running the command below. Then, adjust the directory permissions as needed.
sudo mkdir /var/www/cgi-bin
sudo chmod 755 /var/www/cgi-bin
Next, run the command below to create an Nginx configuration file and define our CGI script location and other settings.
sudo nano /etc/nginx/fcgiwrap.conf
Then, copy the block below, paste it into the file, and save.
location /cgi-bin/ {
gzip off;
root /var/www;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
After creating the FastCGI config above, include it in your Nginx server block. We’ll use the default server block for this post, but you can create new ones.
Open Nginx default server block.
sudo nano /etc/nginx/sites-available/default
Then, include the configuration file created above in the server {} section.
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name example.com;
include fcgiwrap.conf;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
............
............
Save and exit the file.
Next, enable FastCGI and reload Nginx services by running the command below.
sudo systemctl enable fcgiwrap
sudo systemctl reload nginx
Test Apache CGI execution
You should be ready to get your CGI settings in Apache.
Run the command below to create a blank CGI index file.
sudo nano /var/www/cgi-bin/index.cgi
Copy the script below, paste it into the file, and save.
#!/usr/bin/python3
print("Content-type: text/html\n")
print("<html>\n<body>")
print("<p style=\"width: 100%; font-size: 60px; font-weight: bold; text-align: center;\">")
print("CGI is Enabled!!!")
print("</p>")
print("</body>\n</html>")
Make the file executable by running the command below.
sudo chmod 705 /var/www/cgi-bin/index.cgi
Now, open your browser and browse the script.
http://example.com/cgi-bin/index.cgi

That should do it!
Conclusion:
- Configuring Nginx to run CGI scripts on Ubuntu 24.04 enhances the server’s capability to deliver dynamic web content.
- FastCGI plays a crucial role in handling CGI requests efficiently and effectively.
- Setting up the
/cgi-bin
directory allows for organized management of your CGI scripts. - Testing the configuration through a simple Python script ensures the setup works correctly.
- Overall, this configuration opens up possibilities for interactive web features, improving user experience on your website.
Leave a Reply