##
#  File:
#    virtual_hosts
#  Description:
#    This file is meant to deliver a basic understanding of server blocks.
##

##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# http://wiki.nginx.org/Pitfalls
# http://wiki.nginx.org/Configuration
##

##
# Every "virtual host" that you serve will need to be in its own server block.
#
# server {
#	...
# }
#
# After reading this file, you should understand the structure of server blocks
# and be able to understand how to modify them to your needs.
##

server {

	# The listen directive is only needed if this server block:
	#   needs to listen for IPv6
	#   needs to listen on another port
	# If you need to listen for IPv6 then both of the following lines can
	# be included.
	# DO NOT listen for both SSL and non-SSL in the same server block.
	#listen 80; ## listen for ipv4; this line is default and implied
	#listen [::]:80 default ipv6only=on; ## listen for ipv6

	# root specifies the document root for the requests
	root /usr/share/nginx/www;

	# index specifies the list of files (in order) to be tried in the event
	# no file is requested in the URI.
	index index.html index.htm;

	# Make site accessible from http://localhost/
	server_name localhost;

	# Unless you run everything as a proxy, you will want to have a root
	# location block. This example controls how files are requested.
	location / {
		# First attempt to serve request as file, then as directory,
		# then fall back to index.html. /index.html would normally be
		# front end controller pattern for handling "clean url's" in
		# a CMS such as Drupal or Wordpress.
		try_files $uri $uri/ /index.html;
	}

	# This location block would server any requests for /doc as well
	# as anything below it.
	location /doc {
		# root changes the root directory for these requests
		root /usr/share;
		# autoindex on allows these request to display directory listings
		# if a directory was requested
		autoindex on;
		# We'll allow these requests for localhost
		allow 127.0.0.1;
		# Anyone outside is forbidden
		deny all;
	}

	# This location block would serve any requests for /images as well
	# as anything below it.
	location /images {
		# This is the same as /doc except we don't allow indexes
		root /usr/share;
		autoindex off;
		allow 127.0.0.1;
		deny all;
	}

	# This will serve the file 404.html in the event the request is not found.
	error_page 404 /404.html;

	# redirect server error pages to the static page /50x.html
	# This will hit if the server generates a 500, 502, 503, or 504 status code
	error_page 500 502 503 504 /50x.html;

	# This location block isn't actually needed because our root for the
	# server block is the same directory. However, this could be used to
	# have a central directory for all error html files.
	location = /50x.html {
		root /usr/share/nginx/www;
	}

	# proxy the PHP scripts to Apache listening on 127.0.0.1:80
	# If you're going to proxy to Apache, then just push the whole
	# request to it. You'll generally have better performance with
	# a dedicated php listener (fastcgi: php-cgi, php-fpm).
	#location ~ \.php$ {
	#	proxy_pass http://127.0.0.1;
	#}

	# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
	# This is used for passing to php-cgi and php-fpm.
	# For more information see /usr/share/doc/nginx/examples/php
	location ~ \.php$ {
		# This is where the php socket is listening.
		fastcgi_pass 127.0.0.1:9000;
		fastcgi_index index.php;
		include fastcgi_params;
	}

	# deny access to .htaccess, .htpasswd, and .htgroup files
	location ~ /\.ht {
		deny all;
	}
}


# another virtual host using mix of IP-, name-, and port-based configuration
server {
	listen 8000;
	listen somename:8080;
	server_name somename alias another.alias;
	root html;
	index index.html index.htm;

	location / {
		try_files $uri $uri/ /index.html;
	}
}


# HTTPS server
server {
	listen 443;
	server_name localhost;

	root html;
	index index.html index.htm;

	ssl on;
	ssl_certificate cert.pem;
	ssl_certificate_key cert.key;

	ssl_session_timeout 5m;

	ssl_protocols SSLv3 TLSv1;
	ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
	ssl_prefer_server_ciphers on;

	location / {
		try_files $uri $uri/ /index.html;
	}
}
