WTServer - Nginx MariaDB Redis Php development stack for Windows

A lightweight, fast and stable server stack for developing php mysql applications on windows, based on the excellent webserver Nginx. A lighter alternative to XAMPP and WAMP.

How to install Magento 2 on Windows

1. Install WTServer Stack

2. Create a new Magento Project

New Project

3. Download Magento

4. Setup Nginx

    server {
        #! listen       127.0.0.1:80;
        #! server_name  MyMagento.test;

        ## Magento Vars
        set $MAGE_ROOT "c:/WTServer/www/MyMagento";
        set $MAGE_MODE default; # or production or developer

        ## Access Restrictions
        allow       127.0.0.1;
        deny        all;

        root $MAGE_ROOT/pub; # locked

        index index.php;
        autoindex off;
        charset off;

        add_header 'X-Content-Type-Options' 'nosniff';
        add_header 'X-XSS-Protection' '1; mode=block';

        location /setup {
            root $MAGE_ROOT;
            fastcgi_read_timeout    18000s;
            location ~ ^/setup/index.php {
                include     nginx.fastcgi.conf;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                fastcgi_pass    php_farm;
            }

            location ~ ^/setup/(?!pub/). {
                deny all;
            }

            location ~ ^/setup/pub/ {
                add_header X-Frame-Options "SAMEORIGIN";
            }
        }

        location /update {
            root $MAGE_ROOT;

            location ~ ^/update/index.php {
                include     nginx.fastcgi.conf;
                fastcgi_split_path_info ^(/update/index.php)(/.+)$;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                fastcgi_param  PATH_INFO        $fastcgi_path_info;
                fastcgi_pass    php_farm;
            }

            # deny everything but index.php
            location ~ ^/update/(?!pub/). {
                deny all;
            }

            location ~ ^/update/pub/ {
                add_header X-Frame-Options "SAMEORIGIN";
            }
        }

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

        location /pub {
            location ~ ^/pub/media/(downloadable|customer|import|theme_customization/.*\.xml) {
                deny all;
            }
            alias $MAGE_ROOT/pub;
            add_header X-Frame-Options "SAMEORIGIN";
        }

        location /static/ {
            if ($MAGE_MODE = "production") {
                expires max;
            }
            location ~* \.(ico|jpg|jpeg|png|gif|svg|js|css|swf|eot|ttf|otf|woff|woff2)$ {
                add_header Cache-Control "public";
                add_header X-Frame-Options "SAMEORIGIN";
                expires +1w;
                #expires    off;

                if (!-f $request_filename) {
                    rewrite ^/static/(.*)$ /static.php?resource=$1 last;
                    rewrite ^/static/version\d*/(.*)$ /static.php?resource=$1 last;
                }
            }
            location ~* \.(zip|gz|gzip|bz2|csv|xml)$ {
                add_header Cache-Control "no-store";
                add_header X-Frame-Options "SAMEORIGIN";
                expires    off;

                if (!-f $request_filename) {
                    rewrite ^/static/(.*)$ /static.php?resource=$1 last;
                    rewrite ^/static/version\d*/(.*)$ /static.php?resource=$1 last;
                }
            }
            if (!-f $request_filename) {
                rewrite ^/static/(.*)$ /static.php?resource=$1 last;
                rewrite ^/static/version\d*/(.*)$ /static.php?resource=$1 last;
            }
            add_header X-Frame-Options "SAMEORIGIN";
        }

        location /media/ {
            try_files $uri $uri/ /get.php?$args;

            location ~ ^/media/theme_customization/.*\.xml {
                deny all;
            }

            location ~* \.(ico|jpg|jpeg|png|gif|svg|js|css|swf|eot|ttf|otf|woff|woff2)$ {
                add_header Cache-Control "public";
                add_header X-Frame-Options "SAMEORIGIN";
                expires +1y;
                try_files $uri $uri/ /get.php?$args;
            }
            location ~* \.(zip|gz|gzip|bz2|csv|xml)$ {
                add_header Cache-Control "no-store";
                add_header X-Frame-Options "SAMEORIGIN";
                expires    off;
                try_files $uri $uri/ /get.php?$args;
            }
            add_header X-Frame-Options "SAMEORIGIN";
        }

        location /media/customer/ {
            deny all;
        }

        location /media/downloadable/ {
            deny all;
        }

        location /media/import/ {
            deny all;
        }

        location ~ cron\.php {
            deny all;
        }

        location ~ (index|get|static|report|404|503)\.php$ {
            try_files $uri =404;

            fastcgi_param  PHP_FLAG  "session.auto_start=off \n suhosin.session.cryptua=off";
            fastcgi_param  PHP_VALUE "memory_limit=256M \n max_execution_time=600";
            fastcgi_read_timeout 600s;
            fastcgi_connect_timeout 600s;
            fastcgi_param  MAGE_MODE $MAGE_MODE;

            include     nginx.fastcgi.conf;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            fastcgi_pass    php_farm;
        }
    }

5. Setup PHP

7. Apply Changes

7. Magento Setup Wizard