+44 (203) 695-03-80

How to configure a Virtual Host on Nginx for EspoCRM

In this guide, we will show how to configure a virtual host on Nginx for EspoCRM on Ubuntu server.

Create a server block file

To create this file, open a terminal and run the command:

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/espocrm.conf

Now, open this file (/etc/nginx/sites-available/espocrm.conf) and modify the code following the format printed below (some settings may be different based on your configuration):

server {
    listen 80;
    listen [::]:80;

    server_name espocrm.local; # Replace espocrm.local to your domain name
    root /var/www/html/espocrm; # Specify your EspoCRM document root

    index index.php index.html index.htm;

    client_max_body_size 50M;

    # SSL configuration
    #
    # listen 443 ssl;
    # listen [::]:443 ssl;
    # include snippets/snakeoil.conf;    

    # Specify your PHP (php-cgi or php-fpm) based on your configuration
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;

        # With php7.0-cgi alone:
        # fastcgi_pass 127.0.0.1:9000;

        # With php7.0-fpm:
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }    

    # Add rewrite rules
    location / {
        try_files $uri $uri/ =404;
    }

    location /api/v1/ {
        if (!-e $request_filename){
            rewrite ^/api/v1/(.*)$ /api/v1/index.php last; break;
        }
    }

    location ~ /reset/?$ {
        try_files /reset.html =404;
    }

    location ^~ (data|api)/ {
        if (-e $request_filename){
            return 403;
        }
    }
    location ^~ /data/logs/ {
        deny all;
    }
    location ^~ /data/\.backup/ {
        deny all;
    }
    location ^~ /data/config.php {
        deny all;
    }
    location ^~ /data/cache/ {
        deny all;
    }
    location ^~ /data/upload/ {
        deny all;
    }
    location ^~ /application/ {
        deny all;
    }
    location ^~ /custom/ {
        deny all;
    }
    location ^~ /vendor/ {
        deny all;
    }
    location ~ /\.ht {
        deny all;
    }
}

Enable this server block

Create a symbolic link:

sudo ln -s /etc/nginx/sites-available/espocrm.conf /etc/nginx/sites-enabled/

Run this command to check if everything is fine:

sudo nginx -t

And restart Nginx server:

sudo service nginx restart

Configure your local hosts (optional, for a local domain only)

If you added a local domain, you have to configure it on your local computer (not on the server). For Ubuntu, open the file /etc/hosts and add the line:

192.168.1.1 espocrm.local  # specify the IP address of your Nginx server

For Windows, please follow these instructions.