Installation

NGINX and HTTPS

Configure TLS and NGINX for the Southactyl panel.

NGINX and HTTPS

This example uses NGINX with Let's Encrypt.

Install Certbot

Terminal
apt update
apt -y install certbot python3-certbot-nginx

Request a certificate

Terminal
certbot certonly --nginx -d panel.example.com

Your domain must point to the server, and port 80 must be reachable.

Do not enable the SSL NGINX config before the certificate exists. NGINX will fail to start if the certificate paths are missing.

Remove the default NGINX site

Terminal
rm -f /etc/nginx/sites-enabled/default

Create the Southactyl NGINX config

Terminal
nano /etc/nginx/sites-available/southactyl.conf

Paste this config and replace panel.example.com:

/etc/nginx/sites-available/southactyl.conf
server {
    listen 80;
    server_name panel.example.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name panel.example.com;

    root /var/www/southactyl/public;
    index index.php;

    access_log /var/log/nginx/southactyl-access.log;
    error_log  /var/log/nginx/southactyl-error.log error;

    client_max_body_size 100m;
    client_body_timeout 120s;

    sendfile off;

    ssl_certificate /etc/letsencrypt/live/panel.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/panel.example.com/privkey.pem;
    ssl_session_cache shared:SSL:10m;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;

    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header Content-Security-Policy "frame-ancestors 'self'";
    add_header X-Frame-Options DENY;
    add_header Referrer-Policy same-origin;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;

        fastcgi_param PHP_VALUE "upload_max_filesize = 100M \n post_max_size=100M";
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param HTTP_PROXY "";

        fastcgi_intercept_errors off;
        fastcgi_buffer_size 16k;
        fastcgi_buffers 4 16k;
        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
    }

    location ~ /\.ht {
        deny all;
    }
}

Enable the site

Terminal
ln -s /etc/nginx/sites-available/southactyl.conf /etc/nginx/sites-enabled/southactyl.conf
nginx -t
systemctl restart nginx

PHP 8.2 socket

If you installed PHP 8.2, change this line:

fastcgi_pass unix:/run/php/php8.3-fpm.sock;

to:

fastcgi_pass unix:/run/php/php8.2-fpm.sock;
Copyright © 2026