Magento – More than one magento virtual hosts and nginx configuration

magento-1.7magento-enterprisemultistorenginx

I am trying to set up a VM with different magento versions so it can be used for testing,

They are in the following paths :

/var/www/magento1
/var/www/magento2
/var/www/magento3

I would like to access them as https://dev.magento.com/magento1, https://dev.magento.com/magento2 and https://dev.magento.com/magento3 respectively. The configuration in my enabled site is as follows :

server {
 #listen 80 default;
 listen 443;
 server_name mage; ## Domain is here twice so server_name_in_redirect will favour the www
 ssl on;
 ssl_certificate    /etc/ssl/certs/self-signed.crt;
 ssl_certificate_key        /etc/ssl/private/self-signed.nopass.key;

root /var/www/;

location = /magento1{
    alias /var/www/magento1/;
}

location = /magento2{
    alias /var/www/magento2/;
}

location = /magento3{
    alias /var/www/magento3/;
}

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 ~ .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
}

}

So now I am able to access the front end fine…However I have the following issues:

  • If I set configuration to add "store code to URL" I get a 500 internal server error.
  • When I try to access the admin as "https://dev.magento.com/magento1/admin"(on all three) I get a 500 internal server error too…However, https://dev.magento.com/magento1/index.php/admin works fine. I would like to have it without "index.php".
  • Images, media files,js shows a lot of 404 🙁

    I am stuck here any help would be greatly appreciated. Thanks a lot for your time

Best Answer

I think you need a handler to work with the index.php change:

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

I am no expert with nginx having only used it once, but a good source of information can be found on the Magento Wiki

Related Topic