Search code examples
phpdrupalnginxdrupal-7

Two drupal installs in nginx


Im trying to have 2 websites set up on a CENTOS 7, Digital Ocean server.

One site is to be served from /srv/http/eventadvisor.in/public_html and the other from /srv/http/eventadvisor.in/public_html.

I installed drupal seccessfully in the first directory. Now when I repeat the steps in the second, it automatically takes the settings from the first site's settings.php and gives the following error:

Drupal Already Installed
To start over, you must empty your existing database.
To install to a different database, edit the appropriate settings.php file in the sites folder.
To upgrade an existing installation, proceed to the update script.
View your existing site.

I am running a nginx server with the following conf file:

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*.conf;
}

And each sites configuration file is:

server {
    listen       80;
    server_name sanjayshitole.com www.sanjayshitole.com *.sanjayshitole.com;

    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;

#    location / {
        root   /srv/http/sanjayshitole.com/public_html;
        index  index.php index.html index.htm;
#    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        root           /srv/http/eventadvisor.in/public_html;
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

Solution

  • I managed to solve the issue by using a modification of the configuration shown in this blog: Lelutin

    This is my configuration file that worked well (slight centOS specific modifications were made):

    server {
        server_name sanjayshitole.com;
        root /srv/http/sanjayshitole.com/public_html;
    
        index index.html index.htm index.php;
    
        access_log /var/log/nginx/sanjayshitole.comaccess.log;
        error_log /var/log/nginx/sanjayshitole.org.error.log;
    
        location = /favicon.ico {
                log_not_found off;
                access_log off;
        }
    
        location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
        }
    
        # For drush
        location = /backup {
                deny all;
        }
    
        # Prevent user from accessing settings.php directly
        location ~ ^/sites/[^/]+/settings.php$ {
                deny all;
        }
    
        ## Replicate the Apache <FilesMatch> directive of Drupal standard
        ## .htaccess. Disable access to any code files. Return a 404 to curtail
        ## information disclosure. Hide also the text files.
        location ~* ^(?:.+\.(?:htaccess|make|txt|log|engine|inc|info|install|module|profile|po|sh|.*sql|theme|tpl(?:\.php)?|xtmpl)|code-style\.pl|/Entries.*|/Repository|/Root|/Tag|/Template)$ {
                return 404;
        }
    
        location ~ \..*/.*\.php$ {
                return 403;
        }
    
        location / {
                # This is cool because no php is touched for static content
                try_files $uri @rewrite;
        }
    
        location @rewrite {
                # Some modules enforce no slash (/) at the end of the URL
                # Else this rewrite block wouldn't be needed (GlobalRedirect)
                #rewrite ^/(.*)$ /index.php?q=$1&$args;
                rewrite ^ /index.php last;
        }
    
        # Use an SSH tunnel to access those pages. They shouldn't be visible to
        # external peeping eyes.
        location = /install.php {
                allow 127.0.0.1;
                deny all;
        }
    
        location = /update.php {
                allow 127.0.0.1;
                deny all;
        }
    
     location ~ \.php$ {
                root /srv/http/sanjayshitole.com/public_html;
                fastcgi_index index.php;
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_intercept_errors on;
                fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        }
    
    
        ## Drupal 7 generated image handling, i.e., imagecache in core. See:
        ## https://drupal.org/node/371374
        location ~* /sites/.*/files/styles/ {
                access_log off;
                expires 30d;
                try_files $uri @rewrite;
        }
    
        # Fighting with ImageCache? This little gem is amazing.
        location ~ ^/sites/.*/files/imagecache/ {
                try_files $uri @rewrite;
        }
    
        location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                expires max;
                log_not_found off;
        }
    }
    

    I would still like an explanation of why the default conf that ships with nginx did not work, so please feel free to answer this question.

    SD