-
-
Save sashka/4f52795933d3b5a30025 to your computer and use it in GitHub Desktop.
| server { | |
| listen 80; | |
| server_name www.{{name}}; | |
| access_log off; | |
| rewrite ^(.*)$ http://{{name}}$1; | |
| } | |
| server { | |
| listen 80; | |
| server_name {{name}}; | |
| # access_log off; | |
| access_log {{home}}/{{name}}/logs/access.log mokote; | |
| error_log {{home}}/{{name}}/logs/error.log; | |
| location / { | |
| root {{home}}/{{name}}/site; | |
| index index.html; | |
| expires 10m; | |
| add_header Cache-Control private; | |
| # add_header Content-Type "text/html; charset=UTF-8"; | |
| } | |
| location ~ /\.ht { | |
| deny all; | |
| } | |
| } |
| server { | |
| listen 80; | |
| server_name www.{{name}} {{name}}; | |
| access_log {{home}}/{{name}}/logs/redirect.log mokote; | |
| rewrite ^(.*)$ https://{{name}}$1 permanent; | |
| } | |
| server { | |
| listen 443 ssl; | |
| server_name {{name}}; | |
| ssl on; | |
| ssl_certificate {{home}}/{{name}}/ssl/{{name}}.chained.crt; | |
| ssl_certificate_key {{home}}/{{name}}/ssl/{{name}}.key; | |
| ssl_session_cache shared:ssl_session_cache:5m; | |
| ssl_prefer_server_ciphers on; | |
| ssl_protocols TLSv1 TLSv1.1 TLSv1.2; | |
| ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS; | |
| add_header Strict-Transport-Security "max-age=31536000"; | |
| access_log {{home}}/{{name}}/logs/access.log mokote; | |
| error_log {{home}}/{{name}}/logs/error.log; | |
| error_page 403 404 /404.html; | |
| location / { | |
| root {{home}}/{{name}}/site; | |
| index index.html; | |
| } | |
| } |
| --- | |
| - hosts: m1.mokote.com | |
| gather_facts: no | |
| sudo: yes | |
| vars: | |
| locale: en_US.UTF-8 | |
| timezone: Europe/Moscow | |
| roles: | |
| # - apt | |
| # - locale | |
| # - timezone | |
| # - svnbackup | |
| # - firewall | |
| # - exim | |
| # - svnbackup | |
| tasks: | |
| - include: site.yml | |
| vars: | |
| home: /mokote/www | |
| name: blabla.com | |
| active: yes | |
| --- | |
| - debug: msg="name:{{name}} active:{{active}}" | |
| - name: look for ssl cert and keys for {{name}} | |
| local_action: command ls files/ssl/{{name}} | |
| register: ssl | |
| ignore_errors: True | |
| - debug: msg="{{ssl}}" | |
| - name: create site directories | |
| file: state=directory path={{item.path}} owner={{item.owner}} group={{item.group}} mode={{item.mode}} | |
| with_items: | |
| - { path: "{{home}}/{{name}}", owner: "root", group: "root", "mode": 755 } | |
| - { path: "{{home}}/{{name}}/logs", owner: "www-data", group: "adm", "mode": 755 } | |
| - { path: "{{home}}/{{name}}/site", owner: "www-data", group: "adm", "mode": 755 } | |
| - name: create a directory for ssl credentials | |
| file: state="directory" path="{{home}}/{{name}}/ssl" owner="www-data" group="www-data" mode=750 | |
| when: ssl.stdout_lines | |
| - name: deploy ssl credentials | |
| copy: dest="{{home}}/{{name}}/ssl/{{item}}" src="files/ssl/{{name}}/{{item}}" owner="www-data" group="www-data" mode=440 | |
| when: ssl.stdout_lines | |
| with_items: ssl.stdout_lines | |
| - name: deploy non-ssl template nginx.conf | |
| template: dest="{{home}}/{{name}}/nginx.conf" src="nginx.conf" owner="www-data" group="www-data" mode=664 | |
| when: not ssl.stdout_lines | |
| - name: deploy ssl template nginx.conf | |
| template: dest="{{home}}/{{name}}/nginx.conf" src="nginx_ssl.conf" owner="www-data" group="www-data" mode=664 | |
| when: ssl.stdout_lines | |
| - name: activate nginx site | |
| file: state=link src="{{home}}/{{name}}/nginx.conf" dest="/etc/nginx/sites-enabled/{{name}}.conf" | |
| when: active | |
| - name: inactivate nginx site | |
| file: state=absent path="/etc/nginx/sites-enabled/{{name}}.conf" | |
| when: not active |
access_log {{home}}/{{name}}/logs/access.log mokote; - тут не видно, вероятно ротация автомагически где-то приделана
Да, так и есть, это правило прописывается один раз, когда ставится нгинкс:
/var/log/nginx/*.log /srv/www/*/logs/*.log {
daily
missingok
rotate 1000
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
run-parts /etc/logrotate.d/httpd-prerotate; \
fi \
endscript
postrotate
[ -s /run/nginx.pid ] && kill -USR1 `cat /run/nginx.pid`
endscript
}
а вот доступ на запись к файлам (логам, исходникам, сертификатам) считается не очень хорошо по секурити.
What's the best practice?
из интересного - when: ssl.stdout_lines
Это простой способ понять, были ли файлики в каталоге files/blabla.com или не было. Если не было, то SSL-шаблон не нужен.
Еще я не увидал как site specific nginx конфиг класть, но это я может плохо смотрел.
Не, этого просто нет в шаблоне.
Этот playbook нужен был мне только в процессе переноса всего с m2 на m1, а сами сайты раскладываются рсинком, в силу своей статической природы. Поэтому мне было достаточно только задать единую структуру для них для всех:
/data/www/blabla.com
nginx.conf
site/
logs/
ssl/
Шаблон умеет создавать симлинк на nginx.conf в /etc/nginx/sites-enabled (или удалять, если он уже не нужен).
access_log {{home}}/{{name}}/logs/access.log mokote; - тут не видно, вероятно ротация автомагически где-то приделана
тута
file: state=directory path={{item.path}} owner={{item.owner}} group={{item.group}} mode={{item.mode}}
with_items:
file: state="directory" path="{{home}}/{{name}}/ssl" owner="www-data" group="www-data" mode=750
when: ssl.stdout_lines
из интересного - when: ssl.stdout_lines , а вот доступ на запись к файлам (логам, исходникам, сертификатам) считается не очень хорошо по секурити.
Еще я не увидал как site specific nginx конфиг класть, но это я может плохо смотрел.
В целом ансибл забавный :)