summaryrefslogtreecommitdiffstats
path: root/roles/common-web
diff options
context:
space:
mode:
authorGuilhem Moulin <guilhem@fripost.org>2013-12-15 22:54:56 +0100
committerGuilhem Moulin <guilhem@fripost.org>2015-06-07 02:51:26 +0200
commit540779286a899dee846784a8ffd0fdab756ac1e3 (patch)
tree74aa5483d2e9215306f32d1425a539ecad36ab96 /roles/common-web
parentfaee1bbc276b63a81f3b81eae0f02bcaffabca6d (diff)
Common web configuration.
Diffstat (limited to 'roles/common-web')
-rw-r--r--roles/common-web/files/etc/nginx/fastcgi/params22
-rw-r--r--roles/common-web/files/etc/nginx/fastcgi/php10
-rw-r--r--roles/common-web/files/etc/nginx/fastcgi/php-ssl8
-rw-r--r--roles/common-web/files/etc/nginx/ssl/config19
-rw-r--r--roles/common-web/handlers/main.yml3
-rw-r--r--roles/common-web/tasks/main.yml60
6 files changed, 122 insertions, 0 deletions
diff --git a/roles/common-web/files/etc/nginx/fastcgi/params b/roles/common-web/files/etc/nginx/fastcgi/params
new file mode 100644
index 0000000..ba7b265
--- /dev/null
+++ b/roles/common-web/files/etc/nginx/fastcgi/params
@@ -0,0 +1,22 @@
+fastcgi_param QUERY_STRING $query_string;
+fastcgi_param REQUEST_METHOD $request_method;
+fastcgi_param CONTENT_TYPE $content_type;
+fastcgi_param CONTENT_LENGTH $content_length;
+
+fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+fastcgi_param SCRIPT_NAME $fastcgi_script_name;
+fastcgi_param REQUEST_URI $request_uri;
+fastcgi_param DOCUMENT_URI $document_uri;
+fastcgi_param DOCUMENT_ROOT $document_root;
+fastcgi_param SERVER_PROTOCOL $server_protocol;
+
+fastcgi_param GATEWAY_INTERFACE CGI/1.1;
+fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
+
+fastcgi_param REMOTE_ADDR $remote_addr;
+fastcgi_param REMOTE_PORT $remote_port;
+fastcgi_param SERVER_ADDR $server_addr;
+fastcgi_param SERVER_PORT $server_port;
+fastcgi_param SERVER_NAME $server_name;
+
+fastcgi_param HTTPS $https;
diff --git a/roles/common-web/files/etc/nginx/fastcgi/php b/roles/common-web/files/etc/nginx/fastcgi/php
new file mode 100644
index 0000000..1ba3937
--- /dev/null
+++ b/roles/common-web/files/etc/nginx/fastcgi/php
@@ -0,0 +1,10 @@
+# cf. http://wiki.nginx.org/Pitfalls#Passing_Uncontrolled_Requests_to_PHP
+try_files $uri $uri/ =404;
+
+include fastcgi/params;
+# required if PHP was built with --enable-force-cgi-redirect
+fastcgi_param REDIRECT_STATUS 200;
+
+fastcgi_intercept_errors on;
+fastcgi_read_timeout 14400;
+fastcgi_pass unix:/var/run/php5-fpm.sock;
diff --git a/roles/common-web/files/etc/nginx/fastcgi/php-ssl b/roles/common-web/files/etc/nginx/fastcgi/php-ssl
new file mode 100644
index 0000000..b2a419c
--- /dev/null
+++ b/roles/common-web/files/etc/nginx/fastcgi/php-ssl
@@ -0,0 +1,8 @@
+# PHP only.
+# Credits to http://claylo.com/post/7617674014/ssl-php-fpm-and-nginx
+
+fastcgi_param HTTPS on;
+fastcgi_param SSL_PROTOCOL $ssl_protocol;
+fastcgi_param SSL_CIPHER $ssl_cipher;
+fastcgi_param SSL_SESSION_ID $ssl_session_id;
+fastcgi_param SSL_CLIENT_VERIFY $ssl_client_verify;
diff --git a/roles/common-web/files/etc/nginx/ssl/config b/roles/common-web/files/etc/nginx/ssl/config
new file mode 100644
index 0000000..863961b
--- /dev/null
+++ b/roles/common-web/files/etc/nginx/ssl/config
@@ -0,0 +1,19 @@
+ssl on;
+
+# See http://nginx.org/en/docs/http/configuring_https_servers.html#optimization
+keepalive_timeout 75 75;
+ssl_session_timeout 5m;
+ssl_session_cache shared:SSL:5m;
+
+# XXX: Ideally we want to get rid of TLSv1, to be immune to the BEAST
+# attack. Sadly as of 2013 many clients don't support TLSv1.2, though.
+# The alternative would be to reject BEAST-vulnerable ciphers from TLSv1
+# in favor of RC4, but that's not satisfactory either since RC4 has
+# other weaknesses.
+ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
+ssl_ciphers HIGH:!SSLv2:!aNULL:!eNULL:!3DES:!MD5:@STRENGTH;
+ssl_prefer_server_ciphers on;
+
+# Strict Transport Security header for enhanced security. See
+# http://www.chromium.org/sts.
+add_header Strict-Transport-Security "max-age=12960000";
diff --git a/roles/common-web/handlers/main.yml b/roles/common-web/handlers/main.yml
new file mode 100644
index 0000000..159596e
--- /dev/null
+++ b/roles/common-web/handlers/main.yml
@@ -0,0 +1,3 @@
+---
+- name: Restart Nginx
+ service: name=nginx state=restarted
diff --git a/roles/common-web/tasks/main.yml b/roles/common-web/tasks/main.yml
new file mode 100644
index 0000000..ac42af3
--- /dev/null
+++ b/roles/common-web/tasks/main.yml
@@ -0,0 +1,60 @@
+- name: Install Nginx
+ apt: pkg=nginx
+
+- name: Limit Nginx logging
+ lineinfile: "dest=/etc/logrotate.d/nginx create=yes
+ regexp='^\\s*rotate\\s'
+ line='\trotate 3'"
+ tags:
+ - logrotate
+
+- name: Delete /etc/nginx/*_params
+ file: path=/etc/nginx/{{ item }}_params state=absent
+ with_items:
+ - fastcgi
+ - proxy
+ - scgi
+ - uwsgi
+
+- name: Delete /etc/nginx/sites-{available,enabled}/default
+ file: path=/etc/nginx/sites-{{ item }}/default state=absent
+ with_items:
+ - enabled
+ - available
+
+- name: Create directory /etc/nginx/{fastcgi,ssl}
+ file: path=/etc/nginx/{{ item }}
+ state=directory
+ owner=root group=root
+ mode=0755
+ with_items:
+ - fastcgi
+ - ssl
+
+- name: Copy fastcgi parameters
+ copy: src=etc/nginx/fastcgi/{{ item }}
+ dest=/etc/nginx/fastcgi/{{ item }}
+ owner=root group=root
+ mode=0644
+ register: r1
+ with_items:
+ - params
+ - php
+ - php-ssl
+ notify:
+ - Restart Nginx
+
+- name: Copy SSL configuration
+ copy: src=etc/nginx/ssl/config
+ dest=/etc/nginx/ssl/config
+ owner=root group=root
+ mode=0644
+ register: r2
+ notify:
+ - Restart Nginx
+
+- name: Start Nginx
+ service: name=nginx state=started
+ when: not (r1.changed or r2.changed)
+
+- meta: flush_handlers