Tracking Pixel Returning 404 Error on Nginx

After several attempts installing Mautic on a VPS with Aapanel and Nginx, and assembling my own configuration file since the ones found online were not working, I got everything functioning except for the tracking pixel. I believe there is an issue with my redirection configuration or something similar.

Request to: https://my.domain.com/email/pixel.gif Results in: 404 Not Found nginx

While: https://my.domain.com/index.php/email/pixel.gif Works perfectly.

I have already tried the following location blocks:

location ~ email/(.*).gif { try_files $uri /index.php?$args; }

location ~ mtc.js { try_files $uri /index.php?$args; }

location ~ mtracking.gif { try_files $uri /index.php?$args; }

location ~ ^/email/.+.gif$ { try_files /www/wwwroot/my.domain.com$uri /index.php?$args; access_log /var/log/nginx/pixel.log;
}

Note: I’m going to add my Nginx configuration in another post, so it looks better

Technical details:

  • 4.5GB KVM VPS
  • Cron jobs enabled
  • PHP 7.4
  • Panel: Aapanel
  • Nginx
  • No relevant error logs on the server related to this.

I would greatly appreciate any help in resolving this tracking pixel issue.

Here is my website’s Nginx configuration file:

server
{
    listen 80;
        listen 443 ssl http2;
    server_name my.domain.com;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/my.domain.com;

    #SSL-START SSL related configuration, do NOT delete or modify the next line of commented-out 404 rules
    #error_page 404/404.html;
    ssl_certificate    /www/server/panel/vhost/cert/my.domain.com/fullchain.pem;
    ssl_certificate_key    /www/server/panel/vhost/cert/my.domain.com/privkey.pem;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    add_header Strict-Transport-Security "max-age=31536000";
    error_page 497  https://$host$request_uri;
        #SSL-END

    #ERROR-PAGE-START  Error page configuration, allowed to be commented, deleted or modified
    #error_page 404 /404.html;
    #error_page 502 /502.html;
    #ERROR-PAGE-END

    #PHP-INFO-START  PHP reference configuration, allowed to be commented, deleted or modified
    
    include enable-php-74.conf;
    
    location ~ ^/index\.php {
    
      fastcgi_split_path_info ^(/index\.php)(/.+)$;
    
      fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    
      fastcgi_index index.php;
    
      include fastcgi_params;
    
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    
      fastcgi_buffer_size 128k;
      fastcgi_buffers 256 16k; 
      fastcgi_busy_buffers_size 256k;
      fastcgi_temp_file_write_size 256k;
    
    } 
    
    location ~ \.php$ {
    fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    }

    #PHP-INFO-END

    #REWRITE-START URL rewrite rule reference, any modification will invalidate the rewrite rules set by the panel
    include /www/server/panel/vhost/rewrite/my.domain.com.conf;
    #REWRITE-END

    # Forbidden files or directories
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md)
    {
        return 404;
    }

    # Directory verification related settings for one-click application for SSL certificate
    location ~ \.well-known{
        allow all;
    }

    #Prohibit putting sensitive files in certificate verification directory
    if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) {
        return 403;
    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires      30d;
        error_log /dev/null;
        access_log off;
    }

    location ~ .*\.(js|css)?$
    {
        expires      12h;
        error_log /dev/null;
        access_log off; 
    }
    access_log  /www/wwwlogs/my.domain.com.log;
    error_log  /www/wwwlogs/my.domain.com.error.log;
    
        location / {
      try_files $uri $uri/ /index.php?$args;
    }
    
    location ~ ^/s/dashboard$ {
      rewrite /s/dashboard /index.php last; 
    }

     # Solve email tracking pixel not found
    location ~ mtc.js{
        try_files $uri /index.php?$args;
    }
    location ~ mtracking.gif{
          try_files $uri /index.php?$args;
    }
        
    # Solve JS Loading 404 Error
    location ~ (.*).js {
        try_files $uri /index.php?$args;
    }
    
    #Bloquear accesso a archivos sensibles
    location ~ /\.ht {
    deny all; 
    }
    
    #Habilitar gzip compression
    gzip on; 
    gzip_types text/plain text/css text/xml application/json;
    
    
    location ~*  \.(jpg|jpeg|png|ico|pdf)$ {
                expires 15d;
    }

    # Don't log favicon
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }
    
}

Hi,

 location ~ focus/(.*).gif {
        try_files $uri /index.php?$args;
    }

    location ~ email/(.*).gif {
        try_files $uri /index.php?$args;
    }

Try these two.

Regards, M.

1 Like

It worked perfectly, although not directly in the config file but in a special section that Aapanel has for URL rewriter, a complete guide on what the config file for Aapanel with Nignix should be like is definitely missing, since it has a very different structure

Thanks very much buddy

1 Like

This topic was automatically closed 36 hours after the last reply. New replies are no longer allowed.