1

I want to install additional copy of Magento to subfolder. It should work with URL rewrites. Please, tel me what changes I should do in default config (could be found here also - http://www.magentocommerce.com/wiki/1_-_installation_and_configuration/configuring_nginx_for_magento):

server {
    listen 80;
    server_name DOMAIN.com;
    rewrite / $scheme://www.$host$request_uri permanent; ## Forcibly prepend a www
}

server {
    listen 80 default;
## SSL directives might go here
    server_name www.DOMAIN.com *.DOMAIN.com; ## Domain is here twice so server_name_in_redirect will favour the www
    root /var/www/vhosts/DOMAIN.com;

    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
        if (!-e $request_filename) { rewrite / /index.php last; } ## Catch 404s that try_files miss

        expires        off; ## Do not cache dynamic content
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_param  HTTPS $fastcgi_https;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param  MAGE_RUN_CODE default; ## Store code is defined in administration > Configuration > Manage Stores
        fastcgi_param  MAGE_RUN_TYPE store;
        include        fastcgi_params; ## See /etc/nginx/fastcgi_params
    }
}
4
  • will your other installation have a different domain? Or just /directory/ added to the main domain? Commented Apr 18, 2013 at 2:25
  • just /directory/ added to the main domain Commented Apr 18, 2013 at 8:59
  • Configuring this is going to be a headache. Could you explain why you want this? Commented Apr 19, 2013 at 6:30
  • I have Magento installed in my root folder (/var/www). I want to setup dev store in root/subcategory. Commented Apr 19, 2013 at 9:31

1 Answer 1

2

I've got a solution that's mostly working, outlined in more detail here:

Magento stores in subfolders using nginx proxy_pass

I use proxy_pass to rewrite the URL and send it to a separate Nginx server directive based on the URL subdirectory. The second server directive sets the store code, and Magento handles the rest. I'm not sure it's the most elegant solution, but it works.

server {
    listen 80 default;

    server_name www.DOMAIN.com *.DOMAIN.com;
    root /var/www/vhosts/DOMAIN.com;

    ## Serve static files from the server on 80
    location ^~ /media/ {}
    location ^~ /skin/ {}                                                      
    location ^~ /js/ {}                                                       
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|swf|fla)$ {                      
        expires 1y;                                                             
        log_not_found off;                                                      
    } 


    location /STORE_CODE {
        rewrite           ^/STORE_CODE/(.*) /$1 break;                               
        proxy_pass        http://localhost:82;                                  
        proxy_set_header  X-Real-IP  $remote_addr;
    }

    location / {
        proxy_pass        http://localhost:81;                                  
        proxy_set_header  X-Real-IP  $remote_addr;
    }
}

Then create server directives for port 81 and 82 using your existing configs like so:

server {
    listen localhost:81 default; # Make sure you change the port here!
... # Same configuration otherwise
}

server {
    listen localhost:82 default; # Make sure you change the port here!
... # Same configuration, except for:

    location ~ .php$ { ## Execute PHP scripts
        if (!-e $request_filename) { rewrite / /index.php last; } ## Catch 404s that try_files miss

        expires        off; ## Do not cache dynamic content
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_param  HTTPS $fastcgi_https;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param  MAGE_RUN_CODE store_code; ## CHANGE THIS TO YOUR STORE CODE!
        fastcgi_param  MAGE_RUN_TYPE store;
        include        fastcgi_params; ## See /etc/nginx/fastcgi_params
}

You'll want to set the base_url of your second store to http://www.DOMAIN.com/STORE_CODE/. Magento should take care of the rest.

Hope this helps!

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

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

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.