Drupal on nginx

After moving from apache to nginx, you might notice no matter what link you try to go to, you get what appears to be your home page. More than likely, clean urls are enabled and your .conf file isn’t set up to route them properly (since .htaccess rules are not used on nginx).

For D6

location / {


    root  /var/www/webroot/docroot;
    try_files $uri @rewrite; 
     autoindex off;
    index  index.html index.htm index.php;


  } 

  location @rewrite {
      rewrite ^/(.*)$ /index.php?q=$1;
}

For D8

location / {


    root  /var/www/webroot/docroot;
    try_files $uri $uri/ /index.php$query_string;
     autoindex off;
    index  index.html index.htm index.php;


  }

Reference
A more complete sample conf file with all the blocks defined, see here.

Drupal on nginx

server {
    server_name example.com;
    root /var/www/drupal8; ## <-- Your only path reference.

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    # Very rarely should these ever be accessed outside of your lan
    location ~* \.(txt|log)$ {
        allow 192.168.0.0/16;
        deny all;
    }

    location ~ \..*/.*\.php$ {
        return 403;
    }

    location ~ ^/sites/.*/private/ {
        return 403;
    }

    # Allow "Well-Known URIs" as per RFC 5785
    location ~* ^/.well-known/ {
        allow all;
    }

    # Block access to "hidden" files and directories whose names begin with a
    # period. This includes directories used by version control systems such
    # as Subversion or Git to store control files.
    location ~ (^|/)\. {
        return 403;
    }

    location / {
        # try_files $uri @rewrite; # For Drupal <= 6
        try_files $uri /index.php?$query_string; # For Drupal >= 7
    }

    location @rewrite {
        rewrite ^/(.*)$ /index.php?q=$1;
    }

    # Don't allow direct access to PHP files in the vendor directory.
    location ~ /vendor/.*\.php$ {
        deny all;
        return 404;
    }

    # In Drupal 8, we must also match new paths where the '.php' appears in
    # the middle, such as update.php/selection. The rule we use is strict,
    # and only allows this pattern with the update.php front controller.
    # This allows legacy path aliases in the form of
    # blog/index.php/legacy-path to continue to route to Drupal nodes. If
    # you do not have any paths like that, then you might prefer to use a
    # laxer rule, such as:
    #   location ~ \.php(/|$) {
    # The laxer rule will continue to work if Drupal uses this new URL
    # pattern with front controllers other than update.php in a future
    # release.
    location ~ '\.php$|^/update.php' {
        fastcgi_split_path_info ^(.+?\.php)(|/.*)$;
        # Security note: If you're running a version of PHP older than the
        # latest 5.3, you should have "cgi.fix_pathinfo = 0;" in php.ini.
        # See http://serverfault.com/q/627903/94922 for details.
        include fastcgi_params;
        # Block httpoxy attacks. See https://httpoxy.org/.
        fastcgi_param HTTP_PROXY "";
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_intercept_errors on;
        # PHP 5 socket location.
        #fastcgi_pass unix:/var/run/php5-fpm.sock;
        # PHP 7 socket location.
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
    }

    # Fighting with Styles? This little gem is amazing.
    # location ~ ^/sites/.*/files/imagecache/ { # For Drupal <= 6
    location ~ ^/sites/.*/files/styles/ { # For Drupal >= 7
        try_files $uri @rewrite;
    }

    # Handle private files through Drupal.
    location ~ ^/system/files/ { # For Drupal >= 7
        try_files $uri /index.php?$query_string;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires max;
        log_not_found off;
    }
}

Drupal 8 with Drush

Installing Drush for Drupal Development

 

=> assumes composer is installed

=> assumes Mac

=> assume you are ssh’d into your vagrant machine that hosts your website or a remote linux server

First, install drush binaries – go to any directory on your server, e.g. $HOME

php -r “readfile(‘https://s3.amazonaws.com/files.drush.org/drush.phar’);” > drush

change up one directory for permissions reasons (see http://drupal.stackexchange.com/questions/201060/does-drush-need-to-be-installed-as-root)

php <whateverdiryouarein>/drush core-status (this should output some stuff if it’s installed right)

chmod +x <whateverdiryouarein>/drush

sudo mv <whateverdiryouarein>/drush /usr/local/bin

drush init

Next, follow instructions at http://docs.drush.org/en/7.x/install/

only use

composer global require drush/drush:8.* instead of composer global require drush/drush:dev-master

Go to your webroot to type the command (composer global require drush/drush:8.*) – for example, mine is /var/www/somedrupal8site and my docroot is /var/www/somedrupal8site/docroot

Next go to your site’s docroot and use the command

drush status

in all the stuff that spits out, you should see your database name/connection – if so, it’s connected to your drupal – yay

from here,

drush uli (generates a one time login in link)

drush upwd —password=“somepwstring” “admin” (reset admin account pw)

Command Line Output

[05:32 PM]-[vagrant@local]-[~]

$ php -r “readfile(‘https://s3.amazonaws.com/files.drush.org/drush.phar’);” > drush

[05:33 PM]-[vagrant@local]-[~]

$ php drush core-status

PHP Warning:  pcntl_exec(): Error has occurred: (errno 13) Permission denied in phar:///home/vagrant/drush/includes/startup.inc on line 359

Warning: pcntl_exec(): Error has occurred: (errno 13) Permission denied in phar:///home/vagrant/drush/includes/startup.inc on line 359

Error has occurred executing the Drush script found at /home/vagrant/drush

(errno 13) Permission denied

[05:33 PM]-[vagrant@local]-[~]

$ sudo php drush core-status

PHP Warning:  pcntl_exec(): Error has occurred: (errno 13) Permission denied in phar:///home/vagrant/drush/includes/startup.inc on line 359

Warning: pcntl_exec(): Error has occurred: (errno 13) Permission denied in phar:///home/vagrant/drush/includes/startup.inc on line 359

Error has occurred executing the Drush script found at /home/vagrant/drush

(errno 13) Permission denied

[05:33 PM]-[vagrant@local]-[~]

$ cd ..

[05:34 PM]-[vagrant@local]-[/home]

$ ls

vagrant/

[05:34 PM]-[vagrant@local]-[/home]

$ php vagrant/drush core-status

PHP configuration      :  /etc/php/5.6/cli/php.ini

PHP OS                 :  Linux                    

Drush script           :  /home/vagrant/drush      

Drush version          :  8.1.3                    

Drush temp directory   :  /tmp                     

Drush configuration    :                           

Drush alias files      :                           

[05:34 PM]-[vagrant@local]-[/home]

$ chmod +x vagrant/drush

[05:35 PM]-[vagrant@local]-[/home]

$ sudo mv vagrant/drush /usr/local/bin

[05:36 PM]-[vagrant@local]-[/home]

$ drush init

Copied example Drush configuration file to                           [ok]

/home/vagrant/.drush/drushrc.php

Copied example Drush bash configuration file to                      [ok]

/home/vagrant/.drush/drush.bashrc

Copied Drush completion file to                                      [ok]

/home/vagrant/.drush/drush.complete.sh

Copied example Drush prompt file to                                  [ok]

/home/vagrant/.drush/drush.prompt.sh

# Include Drush bash customizations.

if [ -f “/home/vagrant/.drush/drush.bashrc” ] ; then

  source /home/vagrant/.drush/drush.bashrc

fi

# Include Drush completion.

if [ -f “/home/vagrant/.drush/drush.complete.sh” ] ; then

  source /home/vagrant/.drush/drush.complete.sh

fi

# Include Drush prompt customizations.

if [ -f “/home/vagrant/.drush/drush.prompt.sh” ] ; then

  source /home/vagrant/.drush/drush.prompt.sh

fi

Append the above code to /home/vagrant/.bashrc? (y/n): y

Updated bash configuration file /home/vagrant/.bashrc                [ok]

Start a new shell in order to experience the improvements (e.g.      [ok]

`bash`).

[05:36 PM]-[vagrant@local]-[/home]

$ cd /var/www/safro

[05:44 PM]-[vagrant@local]-[/var/www/safro]

$ ls

awi_d6/  awi_d8/  drupal/

[05:44 PM]-[vagrant@local]-[/var/www/safro]

$ cd awi_d8

[05:44 PM]-[vagrant@local]-[/var/www/safro/awi_d8]-[git master]

$ ls

composer.json*  composer.lock*  database/  docroot/

[05:44 PM]-[vagrant@local]-[/var/www/safro/awi_d8]-[git master]

$ composer global require drush/drush:dev-master

Changed current directory to /home/vagrant/.composer

./composer.json has been created

Loading composer repositories with package information

Updating dependencies (including require-dev)

Your requirements could not be resolved to an installable set of packages.

  Problem 1

    – Installation request for drush/drush dev-master -> satisfiable by drush/drush[dev-master].

    – drush/drush dev-master requires consolidation/robo dev-master -> satisfiable by consolidation/robo[dev-master] but these conflict with your requirements or minimum-stability.

Installation failed, deleting ./composer.json.

[05:45 PM]-[vagrant@local]-[/var/www/safro/awi_d8]-[git master]

$ composer global require drush/drush:8.*

Changed current directory to /home/vagrant/.composer

./composer.json has been created

Loading composer repositories with package information

Updating dependencies (including require-dev)

  – Installing pear/console_table (v1.3.0)

    Downloading: 100%         

  – Installing symfony/finder (v2.8.9)

    Downloading: 100%         

  – Installing symfony/polyfill-mbstring (v1.2.0)

    Downloading: 100%         

  – Installing symfony/console (v2.8.9)

    Downloading: 100%         

  – Installing symfony/var-dumper (v2.8.9)

    Downloading: 100%         

  – Installing symfony/yaml (v2.8.9)

    Loading from cache

  – Installing consolidation/output-formatters (1.0.0)

    Downloading: 100%         

  – Installing psr/log (1.0.0)

    Loading from cache

  – Installing phpdocumentor/reflection-docblock (2.0.4)

    Downloading: 100%         

  – Installing consolidation/annotated-command (1.0.1)

    Downloading: 100%         

  – Installing jakub-onderka/php-console-color (0.1)

    Downloading: 100%         

  – Installing jakub-onderka/php-console-highlighter (v0.3.2)

    Downloading: 100%         

  – Installing dnoegel/php-xdg-base-dir (0.1)

    Downloading: 100%         

  – Installing nikic/php-parser (v2.1.0)

    Downloading: 100%         

  – Installing psy/psysh (v0.7.2)

    Downloading: 100%         

  – Installing drush/drush (8.1.3)

    Downloading: 100%         

pear/console_table suggests installing pear/Console_Color2 (>=0.1.2)

symfony/console suggests installing symfony/event-dispatcher ()

symfony/console suggests installing symfony/process ()

symfony/var-dumper suggests installing ext-symfony_debug ()

phpdocumentor/reflection-docblock suggests installing dflydev/markdown (~1.0)

phpdocumentor/reflection-docblock suggests installing erusev/parsedown (~1.0)

psy/psysh suggests installing ext-pdo-sqlite (The doc command requires SQLite to work.)

drush/drush suggests installing drush/config-extra (Provides configuration workflow commands, such as config-merge.)

Writing lock file

Generating autoload files

[05:46 PM]-[vagrant@local]-[/var/www/safro/awi_d8]-[git master]

$ vi ~/.bash_profile

[05:47 PM]-[vagrant@local]-[/var/www/safro/awi_d8]-[git master]

$ drush status

PHP configuration      :  /etc/php/5.6/cli/php.ini

PHP OS                 :  Linux                    

Drush script           :  /usr/local/bin/drush     

Drush version          :  8.1.3                    

Drush temp directory   :  /tmp                     

Drush configuration    :                           

Drush alias files      :                           

[05:49 PM]-[vagrant@local]-[/var/www/safro/awi_d8]-[git master]

$ cd docroot

[05:50 PM]-[vagrant@local]-[/var/www/safro/awi_d8/docroot]-[git master]

$ drush status

Drupal version                  :  8.1.7                                       

Site URI                        :  http://default                              

Database driver                 :  mysql                                       

Database hostname               :  localhost                                   

Database port                   :  3306                                        

Database username               :  root                                        

Database name                   :  awi_d8_dev                                  

Drupal bootstrap                :  Successful                                  

Drupal user                     :                                              

Default theme                   :  awi                                         

Administration theme            :  seven                                       

PHP configuration               :  /etc/php/5.6/cli/php.ini                    

PHP OS                          :  Linux                                       

Drush script                    :  /usr/local/bin/drush                        

Drush version                   :  8.1.3                                       

Drush temp directory            :  /tmp                                        

Drush configuration             :                                              

Drush alias files               :                                              

Install profile                 :  standard                                    

Drupal root                     :  /var/www/safro/awi_d8/docroot               

Drupal Settings File            :  sites/default/settings.php                  

Site path                       :  sites/default                               

File directory path             :  sites/default/files                         

Temporary file directory path   :  C:\xampp\tmp                                

Sync config path                :  sites/default/files/config_KzpmwHqnglNTnzMK

                                    Xs5fMRtEmDanpn1hd8CTN5cCvvFpoRUnO-c7dUhqe9R

                                    R01R-ywA6HSOxdA/sync                        

[05:51 PM]-[vagrant@local]-[/var/www/safro/awi_d8/docroot]-[git master]

$ drush upwd –password=”jennifer” “admin”

Changed password for admin                                           [success]

[06:28 PM]-[vagrant@local]-[/var/www/safro/awi_d8/docroot]-[git master]

$ drush uli

http://default/user/reset/1/1472668113/DB1i9GitwmkzG6dqF1TS42qE50tLnHEMqkhQPKoqOEE

[06:28 PM]-[vagrant@local]-[/var/www/safro/awi_d8/docroot]-[git master]

$