Webserver Configuration
Configure NGINX, Apache, or Caddy to serve the Panel.
Introduction
The web server passes requests to PHP and serves /var/www/aquadactyl/public. Pick your web server and enter your Panel's domain or IP address; the configuration below fills them in.
SSL configurations need a certificate for your domain first, or the web server will not start. Caddy with automatic SSL creates its own.
Your setup
Commands and configuration files on this site update to match. Saved in this browser only.
Remove the default NGINX site:
rm /etc/nginx/sites-enabled/defaultCreate /etc/nginx/sites-available/aquadactyl.conf:
# Ubuntu / Debian: /etc/nginx/sites-available/
# CentOS / RHEL: /etc/nginx/conf.d/
server {
listen 80;
server_name <domain>;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name <domain>;
root /var/www/aquadactyl/public;
index index.php;
access_log /var/log/nginx/aquadactyl.app-access.log;
error_log /var/log/nginx/aquadactyl.app-error.log error;
# allow larger file uploads and longer script runtimes
client_max_body_size 100m;
client_body_timeout 120s;
sendfile on;
location ^~ /build/assets/ {
try_files $uri =404;
expires 1y;
add_header Cache-Control "public, immutable";
# Location headers replace the server headers, so preserve them here.
add_header Strict-Transport-Security "max-age=15768000; preload;";
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'";
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/css application/javascript image/svg+xml;
}
# strengthen ssl security
ssl_certificate /etc/letsencrypt/live/<domain>/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/<domain>/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
# See the link below for more SSL information:
# https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html
#
# ssl_dhparam /etc/ssl/certs/dhparam.pem;
# Add headers to serve security related headers
add_header Strict-Transport-Security "max-age=15768000; preload;";
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'";
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { rewrite ^ /index.php last; }
location ~ ^/favicons/(favicon\.ico|manifest\.json|browserconfig\.xml)$ { rewrite ^ /index.php last; }
location ^~ /storage/avatars/ {
try_files $uri =404;
}
location ^~ /storage/branding/ {
try_files $uri =404;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# On CentOS / RHEL using TCP socket, use: fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/run/php/php8.5-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 and restart NGINX:
ln -s /etc/nginx/sites-available/aquadactyl.conf /etc/nginx/sites-enabled/aquadactyl.conf
systemctl restart nginxAfter Configuring Your Web Server
Open your Panel's address and sign in with the user you created. If you switched from HTTP to HTTPS, make sure APP_URL in /var/www/aquadactyl/.env starts with https://, then run:
cd /var/www/aquadactyl
php artisan config:clear
php artisan cache:clear