Magento 2 - Configure multiple magento sites in your local setup with Nginx for multiple php versions
Tags: magento2, nginx, multiple, php
Published: 2021-07-22 05:45:00

Hi there, 

This post is about configuring Nginx for multiple Magento 2 versions (Ex: M2.4.2, M2.3.2) with multiple php versions (PHP 7.4, 7.2) to run without switching php versions.

It took me a while to get the settings correct so thought to write it down for someone who could save his time.

My setup was like this; 
I wanted to run a Magento 2.4.2 and a 2.3.2 at the same time, and had to switch the php versions everytime when I wanted to check either of the sites. I had 2 virtual host files configured at default nginx location as below;
`/etc/nginx/sites-enabled/m232`, `/etc/nginx/sites-enabled/m242`

I added the following directive in each virtual host file 
as below:

```
upstream fastcgi_backend_74 {
        server  unix:/run/php/php7.4-fpm.sock;
}
```

So `/etc/nginx/sites-enabled/m242` now looks like below:


```
upstream fastcgi_backend_74 {
        server  unix:/run/php/php7.4-fpm.sock;
}

server {
        listen 80;
        server_name dev.m242.com;
        set $MAGE_ROOT /home/djbravo/projects/m242;

        include /home/djbravo/projects/m242/nginx.conf.sample;

        access_log      /var/log/nginx/m242.access;
        error_log       /var/log/nginx/m242.error;
}
```

Then I changed the value for following directive inside the default magento nginx.conf.sample under the project root.

`<magento 2.4.2 project root>/nginx.conf.sample` (in our case `/home/djbravo/projects/m242`)

Search for the `fastcgi_pass` directive (there were 3 places) inside above file and replace `fastcgi_backend` with `fastcgi_backend_74` (configured for PHP 7.4) which was configured in our virtual host file for m242 project above.


Then, do the same for M2.3.2 project like below in the following default location: 

`/etc/nginx/sites-enabled/m232`


Note the `fastcgi_backend_72` this time for PHP 7.2

```
upstream fastcgi_backend_72 {
        server  unix:/run/php/php7.2-fpm.sock;
}

server {
        listen 80;
        server_name dev.m232.com;
        set $MAGE_ROOT /home/djbravo/projects/m232;

        include /home/djbravo/projects/m232/nginx.conf.sample;

        access_log      /var/log/nginx/m232.access;
        error_log       /var/log/nginx/m232.error;
}
```

Then do the same as we did for M2.4.2 project for the default magento nginx.conf.sample under the project root for M2.3.2 project.

`<magento 2.3.2 project root>/nginx.conf.sample` (in our case `/home/djbravo/projects/m232`)

Search for the `fastcgi_pass` directive (there were 3 places) inside above file and replace 'fastcgi_backend' with 'fastcgi_backend_72' (configured for PHP 7.2) which was configured in our virtual host file for m232 project above.

Make sure you don't have the same fastcgi_backend_72 or fastcgi_backend_74 configured inside `/etc/nginx/sites-enabled/default` virtual host.

Then do a `sudo nginx -t` to check the syntax of virtual host files, and if all okay, do a 'sudo service nginx restart'

Hope I didn't miss anything. If you have any issues pls let me know, I will try my best to help you. Btw, I'm not a Pro, so I may not able to answer all your questions.

Cheers