My two favourite CMSes and my two favourite web servers. Here are four config files for the same website. Let's assume we have a user devin with two directories in his public_html folder:
/home/devin/public_html/drupal /home/devin/public_html/wordpress
And then has already created the following logs folders (nginx and Apache have a habit of crashing when you try to specify a non-existent logging directory):
/home/devin/logs/apache/drupal /home/devin/logs/apache/wordpress /home/devin/logs/nginx/drupal /home/devin/logs/nginx/wordpress
And that you've got the following four domains:
WA.devinhoward.ca DA.devinhoward.ca WN.devinhoward.ca DN.devinhoward.ca
Then here are the configuration files that should work to host Drupal or Wordpress on Nginx or Apache:
Wordpress on Apache:
<VirtualHost *:80> ServerName WA.devinhoward.ca DocumentRoot /home/devin/public_html/wordpress ErrorLog /home/devin/logs/apache/wordpress/error.log CustomLog /home/devin/logs/apache/wordpress/access.log combined env=!justtesting <Directory /home/devin/public_html/wordpress> suPHP_Engine on AddHandler application/x-httpd-suphp .php .php3 .php4 .php5 suPHP_AddHandler application/x-httpd-suphp AllowOverride All <Limit GET POST OPTIONS PROPFIND> Order allow,deny Allow from all </Limit> <Limit PUT DELETE PATCH PROPPATCH MKCOL COPY MOVE LOCK UNLOCK> Order deny,allow Deny from all </Limit> </Directory> </VirtualHost>
Drupal on Apache:
<VirtualHost *:80> ServerName DA.devinhoward.ca DocumentRoot /home/devin/public_html/drupal ErrorLog /home/devin/logs/apache/drupal/error.log CustomLog /home/devin/logs/apache/drupal/access.log combined env=!justtesting <Directory /home/devin/public_html/drupal> suPHP_Engine on AddHandler application/x-httpd-suphp .php .php3 .php4 .php5 suPHP_AddHandler application/x-httpd-suphp AllowOverride All <Limit GET POST OPTIONS PROPFIND> Order allow,deny Allow from all </Limit> <Limit PUT DELETE PATCH PROPPATCH MKCOL COPY MOVE LOCK UNLOCK> Order deny,allow Deny from all </Limit> </Directory> </VirtualHost>
Wordpress on Nginx:
server { listen 80; ## Your website name goes here. server_name WN.devinhoward.ca; ## Your only path reference. root /home/devin/public_html/wordpress; access_log /home/devin/logs/nginx/wordpress/access.log; error_log /home/devin/logs/nginx/wordpress/error.log error; ## This should be in your http block and if it is, it's not needed here. index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?q=$uri&$args; } error_page 404 /404.html; # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 location ~ \.php$ { #fastcgi_pass 127.0.0.1:9000; # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; } location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { expires max; log_not_found off; } }
Drupal on Nginx:
server { server_name DN.devinhoward.ca; root /home/devin/public_html/drupal; access_log /home/devin/logs/apache/drupal/access.log; error_log /home/devin/logs/apache/drupal/error.log error; # Enable compression, this will help by serving Gzip versions of files. gzip_static on; 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)$ { deny all; } location ~ \..*/.*\.php$ { return 403; } # No no for private location ~ ^/sites/.*/private/ { return 403; } # 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 / { # This is cool because no php is touched for static content try_files $uri @rewrite; } location @rewrite { # You have 2 options here # For D7 and above: # Clean URLs are handled in drupal_environment_initialize(). rewrite ^ /index.php; # For Drupal 6 and bwlow: # 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; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $request_filename; fastcgi_intercept_errors on; fastcgi_pass unix:/var/run/php5-fpm.sock; } # Fighting with Styles? This little gem is amazing. # This is for D6 #location ~ ^/sites/.*/files/imagecache/ { # This is for D7 and D8 location ~ ^/sites/.*/files/styles/ { try_files $uri @rewrite; } location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { expires max; log_not_found off; } }
Note: the nginx stuff was plagiarized and adapted, here are my sources:
- https://www.digitalocean.com/community/articles/how-to-install-linux-ng…
- http://wiki.nginx.org/Drupal