3

When I go to the categories admin page the the page keeps loading over and over again.

I use NGINX on ubuntu 14.04. How do I fix?

I checked the server log and each iframe reload get a 200.

enter image description here

It keeps on reloading a div in an iframe in an endless loop.

enter image description here

2
  • Are you sure, the request hits magento and is not cached somewhere? Oct 26, 2014 at 13:42
  • yes, first thing I checked. Cleared the browser cached and rm -rf * magento/var/cache. It' constantly reloads the page. The access log returns a 200 status. Strangest thing...
    – jwogrady
    Oct 26, 2014 at 17:37

3 Answers 3

3

It was an NGINX configuration issue... {surprise, surprise}.

This config file work on Ubuntu 14.04 LTS in a development environment. Don't forget to set the server_name and root variables for your environment.

NGINX.CONF

user              www-data;
worker_processes  1;
error_log         /var/log/nginx/error.log;
pid               /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request "'
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    autoindex off;
    map $scheme $fastcgi_https { ## Detect when HTTPS is used
        default off;
        https on;
    }

    keepalive_timeout  10;

    gzip  on;
    gzip_comp_level 2;
    gzip_proxied any;
    gzip_types      text/plain text/html text/css application/x-javascript
text/xml application/xml application/xml+rss text/ja$

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;

}

VHOST.CONFIG

server {
    listen 80;
    server_name YOURDOMAIN.com;  #<--- edit this
    rewrite / $scheme://dev.$host$request_uri permanent;
}

server {
    listen 80 default;
## SSL directives might go here
    server_name SUBDOMAIN.DOMAIN.com;  #<---edit this too.
    root /usr/share/nginx/magento;

    location / {
        index index.html index.php; ## Allow a static html file to be shown first
        try_files $uri $uri/ @handler; ## If missing pass the URI to Magento's front handler
        expires 30d; ## Assume all files are cachable
    }

    ## These locations would be hidden by .htaccess normally
    location ^~ /app/                { deny all; }
    location ^~ /includes/           { deny all; }
    location ^~ /lib/                { deny all; }
    location ^~ /media/downloadable/ { deny all; }
    location ^~ /pkginfo/            { deny all; }
    location ^~ /report/config.xml   { deny all; }
    location ^~ /var/                { deny all; }

    location /var/export/ { ## Allow admins only to view export folder
        auth_basic           "Restricted"; ## Message shown in login window
        auth_basic_user_file htpasswd; ## See /etc/nginx/htpassword
        autoindex            on;
    }

    location  /. { ## Disable .htaccess and other hidden files
        return 404;
    }

    location @handler { ## Magento uses a common front handler
        rewrite / /index.php;
    }

    location ~ .php/ { ## Forward paths like /js/index.php/x.js to relevant handler
        rewrite ^(.*.php)/ $1 last;
    }

    location ~ .php$ { ## Execute PHP scripts
        ## Catch 404s that try_files miss
        if (!-e $request_filename) { rewrite / /index.php last; }
        expires        off; ## Do not cache dynamic content
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_param  HTTPS $fastcgi_https;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param  MAGE_RUN_CODE default;
        fastcgi_param  MAGE_RUN_TYPE store;
        include        fastcgi_params; ## See /etc/nginx/fastcgi_params
    }
}
2
2

Just ran into similar issue, except we have Magento setup in a subpath (/store). Every server{} has a root and server_name, every location has an alias(due to mandated directory structure.)

Turned out I didn't have the complete Nginx config setup for Magento specifically.

server {
    listen 80;
    server_name www.domain.com *.domain.com domain.com domain.com.dev;
    access_log /var/www/domain.com/log/access-80.log;
    error_log /var/www/domain.com/log/error-80.log;

    index index.htm index.html index.php;

    root /var/www/domain.com;

location / {
    root /var/www/domain.com/joomla;

    try_files $uri $uri/ /index.php$is_args$args;

    location ~ \.php$ {
            include rewrites/php5.conf;
    }
}

location /store {
    alias /var/www/domain.com/magento;
    try_files $uri $uri/ /store/index.php;

    # Was missing this | START
    location ~ ^/store/(app|includes|lib|media/downloadable|pkginfo|report/config.xml|var)/ { internal; }
    location /store/var/export/ { internal; }
    location ~ ^/store(.*).php/ { ## Forward paths like /js/index.php/x.js to relevant handler
            rewrite ^(.*.php)/ $1 last;
    }
    location  /store/. { ## Disable .htaccess and other hidden files
    return 404;
    }
    # Was missing this | End
    location ~ \.php$ {
            include rewrites/php5.conf;
    }

}
}

The specific part of the missing code that affected everything in my environment was

location ~ ^/store(.*).php/ { ## Forward paths like /js/index.php/x.js to relevant handler
    rewrite ^(.*.php)/ $1 last;
}

Which took me a minute to figure out since all sample code I find for that is purely with the store at root.

2

For people who's problem didn't get fixed by the accepted answer.

location ~ .php/ {
    rewrite ^(.*.php)/ $1 last;
}

Adding this to a default nginx conf file did the trick for me!

1
  • I needed this for the /js/index.php/x.js requests to work on admin password reset pages. Thanks!
    – Corgalore
    Jul 9, 2019 at 13:07

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.