Applicable to:
- Plesk Onyx for Linux
Question
How to set up Magento 2.1.0 on Plesk with Nginx-only hosting option enabled?
Answer
Note: this article is dedicated to specific Magento subversion: Magento 2.1.0.
-
Ensure that server meets Magento 2.1 system requirements (PHP version, MySQL version).
-
If it is required, upgrade MariaDB / MySQL according to this guide.
-
If it is required install Plesk components: Nginx, PHP 7.0.
-
-
In Plesk create subscription or domain for Magento web site, e.g. example.com.
-
At Domains > example.com > PHP settings set PHP version to PHP 7.0, set run PHP as to FPM application served by nginx.
-
At Domains > example.com > Apache & Nginx settings enable option Proxy mode, enable option Serve static files directly by nginx and append the following extensions to already existing static file list:
js png
-
Install Magento v2.1.0 from Plesk APS catalog at Domains > example.com > Install applications > type Magento> select Magento in list > click install version > 2.1.0.
-
At Domains > example.com > PHP settings > Additional PHP directives add the following lines:
memory_limit = 2G
max_execution_time = 1800
zlib.output_compression = On
session.save_path = "/var/lib/php/session" -
At Domains > example.com > Apache & Nginx settings > Additional nginx directives add the following configuration directives.
Note: replace all occurrences of example.com with actual domain name in configuration directives provided below.
Click here to see the configuration directivesCONFIG_TEXT: set $MAGE_ROOT "/var/www/vhosts/example.com/httpdocs";
index index.php;
error_page 404 403 = /errors/404.php;
access_log "/var/www/vhosts/system/example.com/logs/proxy_access_ssl_log";
error_log "/var/www/vhosts/system/example.com/logs/proxy_error_log";
location ~ ^/setup {
root $MAGE_ROOT;
location ~ ^/setup/index.php(/.*)?$ {
fastcgi_pass "unix:///var/www/vhosts/system/example.com/php-fpm.sock";
fastcgi_param PHP_FLAG "session.auto_start=off \n suhosin.session.cryptua=off";
fastcgi_param PHP_VALUE "memory_limit=756M \n max_execution_time=600";
fastcgi_read_timeout 600s;
fastcgi_connect_timeout 600s;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ ^/setup/(?!pub/). {
deny all;
}
location ~ ^/setup/pub/ {
add_header X-Frame-Options "SAMEORIGIN";
}
}
# PHP entry point for update application
location ~ ^/update {
root $MAGE_ROOT;
location ~ ^/update/index.php(/.*)?$ {
fastcgi_pass "unix:///var/www/vhosts/system/example.com/php-fpm.sock";
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
# Deny everything but index.php
location ~ ^/update/(?!pub/). {
deny all;
}
location ~ ^/update/pub/ {
add_header X-Frame-Options "SAMEORIGIN";
}
if (!-e $request_filename){ rewrite ^(/.*)(/.+)$ /index.php$is_args$args last; }
}
location @fallback {
return 404;
}
#location / { try_files $uri $uri/ /index.php$is_args$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/ {
# Uncomment the following line in production mode
# expires max;
# Remove signature of the static files that is used to overcome the browser cache
location ~ ^/static/version { rewrite ^/static/(version[^/]+/)?(.*)$ /static/$2 last; }
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;
log_not_found off;
access_log off;
add_header ETag "";
add_header Access-Control-Allow-Origin "www.example.com, cdn.example.com";
if (!-f $request_filename) { rewrite ^/static/?(.*)$ /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;
log_not_found off;
access_log off;
add_header ETag "";
add_header Access-Control-Allow-Origin "www.example.com, cdn.example.com";
if (!-f $request_filename) { rewrite ^/static/?(.*)$ /static.php?resource=$1 last; }
}
if (!-f $request_filename) { rewrite ^/static/?(.*)$ /static.php?resource=$1 last; }
add_header X-Frame-Options "SAMEORIGIN";
}
location /media/ {
try_files $uri $uri/ /get.php$is_args$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;
log_not_found off;
access_log off;
add_header ETag "";
add_header Access-Control-Allow-Origin "www.example.com, cdn.example.com";
try_files $uri $uri/ /get.php$is_args$args;
}
location ~ ^/(.*\.(zip|gz|gzip|bz2|csv|xml))$ {
add_header Cache-Control "no-store";
add_header X-Frame-Options "SAMEORIGIN";
expires off;
log_not_found off;
access_log off;
add_header ETag "";
add_header Access-Control-Allow-Origin "www.example.com, cdn.example.com";
try_files $uri $uri/ /get.php$is_args$args;
}
add_header X-Frame-Options "SAMEORIGIN";
}
location /media/customer/ { deny all; }
location /media/downloadable/ { deny all; }
location /media/import/ { deny all; }
location ~ (index|get|static|report|404|503|health_check)\.php(/.*)?$ {
try_files $uri =404;
add_header X-Config-By 'ProTech' always;
add_header X-Processing-Time $request_time always;
add_header X-Request-ID $request_id always;
add_header X-UA-Compatible 'IE=Edge,chrome=1';
add_header Link "<$scheme://$http_host$request_uri>; rel=\"canonical\"" always;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass "unix:///var/www/vhosts/system//php-fpm.sock";
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
fastcgi_buffers 1024 4k;
fastcgi_param PHP_FLAG "session.auto_start=off \n suhosin.session.cryptua=off";
fastcgi_param PHP_VALUE "memory_limit=756M \n max_execution_time=18000";
fastcgi_read_timeout 1800s;
fastcgi_connect_timeout 1800s;
}
location ~ /$ {
if (!-e $request_filename){ rewrite ^(/.*)([^/]+/)$ /index.php$is_args$args last; }
}
Comments
8 comments
Hi, I'm getting the following error when trying to save the Additional nginx directives:
Invalid nginx configuration: nginx: [emerg] "alias" directive is not allowed here
I've got this error after step 7
Configuration Nginx non valide : nginx: [emerg] "alias" directive is not allowed here in /var/www/vhosts/system/kaiel-paris.com/conf/vhost_nginx.conf:38 nginx: configuration file /etc/nginx/nginx.conf test failed
Any help?
Hi @Mathilde Ferrier and @Imesh Liyanage!
There were some missing spaces and braces, thanks for pointing this out!
I have fixed it. so now it should be fine.
P.S. Just a tip: you can use notepad++ to replace all example.com with yourdomain.com with just one click!
Hi @Alexandr Shadrin, thanks that fixed the config issue.
But when I try to go to any page other than the homepage of the Magento install, I'm just shown a 'File not found' error.
Also I'm trying to set up a multi-store Magento with 2 domains, I put both these domains in 'add_header Access-Control-Allow-Origin' but when I try to go to the second domain it just redirects back to the first. Any idea why? I already have an alias setup in Plesk pointed to the same directory and it works fine with Apache.
Hi, @Imesh Liyanage.
I was not able to reproduce the issue on test server, added directives works properly for one Magento site. Maybe example.com was not fully replaced in the mentioned directives or virtual hosts are located not in /var/www/vhosts/?
As for the multi-store solution, I believe this directives are actual for one site only. I suggest getting in touch with Magento community in order to get the nginx directives for multi-store, and then convert them using the directives for one site provided in the article as an example.
@Imesh Liyanage: I have exactly the same issue. Homepage works fine, other pages I get the "File not found"
Do you have this solved already?
Is this solved?
Please sign in to leave a comment.