View source for Optimizing WackoWiki for Nginx

{{toc numerate=1}}

Nginx is an excellent, lightweight, and high-performance choice for running **WackoWiki** locally or in production. It excels in static file serving and concurrency compared to Apache.

=== Enable Clean URLs (Rewrite Mode) ===

WackoWiki supports pretty URLs via its internal router. In the installer or ##config.php##, set:

%%php
'rewrite_mode' => true,
%%

==== Recommended Nginx Rewrite Configuration ====

Add this inside your ##server {}## block (tested and recommended from WackoWiki docs):

%%nginx
server {
    listen 80;
    listen 443 ssl;
    server_name wackowiki.test;   # or localhost, your custom domain

    root /path/to/your/wackowiki;   # Point to the folder containing index.php
    index index.php index.html;

    # Security: Deny access to sensitive files
    location ~* /\.(ht|git|svn|log|env|bak|config)$ {
        deny all;
    }

    # Static files - serve directly with caching
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|webp|woff2?|ttf|eot)$ {
        expires 30d;
        add_header Cache-Control "public";
        try_files $uri =404;
    }

    # PHP handling via FastCGI (PHP-FPM)
    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;   # Adjust version/socket path
        # fastcgi_pass 127.0.0.1:9000;                # TCP alternative
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        
        # Recommended timeouts and buffers for better performance
        fastcgi_read_timeout 120;
        fastcgi_send_timeout 120;
        fastcgi_connect_timeout 60;
    }

    # Main rewrite rules for WackoWiki
    if (-f $request_filename/index.html) {
        rewrite (.*) $1/index.html break;
    }
    if (-f $request_filename/index.php) {
        rewrite (.*) $1/index.php break;
    }
    if (!-f $request_filename) {
        rewrite (.*) /index.php break;
    }

    # Fallback
    location / {
        try_files $uri $uri/ /index.php?$args;
    }
}
%%

**Note**: The ##if## conditions are the official recommendation from WackoWiki for handling the router and admin panel correctly.

=== FlyEnv-Specific Setup (Nginx)===
In FlyEnv:
  1. Install **Nginx** module.
  2. Install desired **PHP** version (8.1–8.4 recommended) + **PHP-FPM**.
  3. Create a new **Host**:
    - Host name: ##wackowiki.test## (or ##localhost##)
    - Document root: path to your WackoWiki files
    - Enable SSL + Auto Certificates

FlyEnv usually generates a basic config. Replace or edit the site’s Nginx config file (FlyEnv shows the path) with the optimized block above.

=== Performance Optimizations ===

#|
*| Area | Recommendation | Benefit |*
|| **Gzip** | ##gzip on; gzip_types text/plain text/css application/javascript;## | Smaller responses ||
|| **Static Caching** | Add ##expires## + ##Cache-Control## for images/CSS/JS | Faster repeat visits ||
|| **PHP-FPM** | Use ##pm = dynamic## or ##ondemand##; tune ##pm.max_children## | Better resource usage ||
|| **Open File Cache** | ##open_file_cache max=10000 inactive=30s;## | Reduced disk I/O ||
|| **Client Limits** | ##client_max_body_size 20m;## (match ##upload_max_filesize##) | Larger file uploads ||
|| **Buffering** | ##fastcgi_buffering on;## + reasonable buffer sizes | Smoother PHP responses ||
|#

Example additions to ##http {}## or ##server {}##:

%%nginx
http {
    gzip on;
    gzip_min_length 1024;
    gzip_types text/plain text/css text/javascript application/json application/javascript;

    open_file_cache max=5000 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
}
%%

=== Security Hardening (Local + Production) ===
  - Deny access to ##.htaccess##, ##.git##, config backups.
  - Use HTTPS (FlyEnv auto-SSL makes this easy).
  - Set proper file permissions: ##config.php## should be ##644##, directories ##755##.
  - Limit PHP exposure: ##expose_php = Off## in ##php.ini##.

=== Troubleshooting Common Issues ===
  - **Admin panel / pages broken after enabling rewrite** → Use the exact rewrite rules above.
  - **White page / 500 errors** → Check PHP-FPM socket path and error logs (FlyEnv shows them easily).
  - **CSS/JS not loading** → Verify rewrite rules and that static location block is before the PHP one.
  - **Installer stuck** → Temporarily disable rewrite_mode, finish install, then re-enable.

=== Resources ===
  - Official WackoWiki ModRewrite page (includes Nginx section)
  - FlyEnv documentation for Nginx hosts
  - Nginx beginner’s guide + rewrite module docs

Nginx + PHP-FPM + WackoWiki is a very efficient and snappy combination. Once configured, it typically feels faster than Apache, especially for serving wiki pages and attachments. Test thoroughly with rewrite mode enabled.