Nginx konfigurace

1. Požadavky

  • FreeBSD 9.2.1.6+
  • Trvalé úložiště (nejlépe ZFS svazek)
  • DNS doména nebo statická IP adresa
  • Internetový přístup

2. Odkazy

3. Vytvoření Ngnix jail a instalace Nginx serveru

Vytvořte nový jail (s názvem např. www) a připojte k němu ZFS svazek, na který se budeme ukládat konfigurační soubory. V návodu připojujeme svazek jako '/mnt/www' uvnitř jail. Soubory popsané níže jsou pak symbolické odkazy na soubory uložené na připojeném svazku.

Připojte se pomocí SSH k FreeBSD serveru, připojte se k vytvořenému jail (jexec www tcsh) a nainstalujte Nginx balíček pomocí správce balíčků pkg.

pkg update && pkg upgrade
pkg install nginx
pkg autoremove
  • Poznámka: Při prvním spuštění se musí aktualizovat repositáře a nainstalované balíčky, takže nebuďte překvapení množstvím stahovaným dat.

4. Vytvoření konfigurařních souborů

Konfigurační soubory jsou uloženy v adresáři '/usr/local/etc/nginx/'. Jako první soubor si vytvoříme hlavní konfigurační soubor s následujícím obsahem:

file /usr/local/etc/nginx/nginx.conf

#user nobody;
worker_processes 3;

#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;

events {
    worker_connections 1024;
}

http {
    include mime.types;

    default_type application/octet-stream;
    server_names_hash_bucket_size 64;

    log_format apache
        '$remote_addr - $remote_user [$time_local] '
        '"$scheme://$host" '
        '"$request" $status $body_bytes_sent '
        '"$http_referer" "$http_user_agent" '
        '"$http_cookie"';
        access_log /var/log/nginx-access.log apache;

    # include SSL configuration
    server_tokens off;
    include /usr/local/etc/nginx/nginx.conf.ssl;

    sendfile on;
    #tcp_nopush on;
    #keepalive_timeout 0;
    keepalive_timeout 65;

    # Compression
    gzip on;
    gzip_buffers 256 8k;
    gzip_comp_level 2;
    gzip_http_version 1.0;
    gzip_min_length 0;
    gzip_types text/css text/javascript text/mathml text/plain text/xml application/x-javascript application/atom+xml application/rss+xml application/xhtml+xml image/svg+xml;
    gzip_vary on;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";

    # include domain server configuration
    include /usr/local/etc/nginx/nginx.conf.domain_name;
}

Doporučuji používání SSL certifikátů. Proto si vytvoříme konfiguraci SSL, kterou můžeme následně vložit do hlavního konfiguračního souboru.

file /usr/local/etc/nginx/nginx.conf.ssl

    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    #Disables all weak ciphers
    ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4:!DHE-RSA-AES256-GCM-SHA384:!DHE-RSA-AES128-GCM-SHA256:!DHE-RSA-AES256-SHA256:!DHE-RSA-AES128-SHA256:!DHE-RSA-AES256-SHA:!DHE-RSA-AES128-SHA";

    add_header Strict-Transport-Security "max-age=31536000";

Pokud používáte PHP pro více domén, je vhodnější vyčlenit tuto společnou konfiguraci do odděleného souboru. Pokud používáte pouze statický kód HTML, nemusíte vkládat tento soubor v souboru 'nginx.conf.domain_name'.

file /usr/local/etc/nginx/nginx.conf.php

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

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

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

    location / {
        # This is cool because no php is touched for static content
#        try_files $uri $uri/ /index.php?q=$uri&$args;
        try_files $uri $uri/ @rewrite; expires max;
    }

    location @rewrite {
        # 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$ {
        try_files $uri =404;
        include fastcgi_params;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_intercept_errors on;
        fastcgi_pass unix:/var/run/php-fpm.sock;
    }

    error_page 500 502 503 504 /50x.html;

    location = /50x.html {
        root /usr/local/www/nginx-dist;
    }

    location ~ ^/(README.md|INSTALL|LICENSE|CHANGELOG|UPGRADING)$ {
        deny all;
    }

    location ~ ^/(config|temp|logs)/ {
        deny all;
    }

    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }

A nakonec vytvoříme konfigurační soubor pro vaši doménu.

file /usr/local/etc/nginx/nginx.conf.domain_name

    server {
        listen       80;
        listen       443;
        # catch domain  without www prefix and all subdomain names
        server_name  domain_name *.domain_name;
        # and rewrite them with www prefix
        return 301   $scheme://www.domain_name$request_uri;
    }

    server {
        listen       80;
        server_name  www.domain_name;
        # comment line below to Roundcube work correctly
        add_header X-Frame-Options DENY;

        root   /usr/local/www/drupal;
        index  index.php;

        include /usr/local/etc/nginx/nginx.conf.php;

    }

    server {
        listen       443 ssl;
        server_name  www.domain_name;
        # comment line below to Roundcube work correctly
        add_header X-Frame-Options DENY;

        ssl                  on;
        ssl_certificate      /usr/local/etc/nginx/ssl/domain_name.crt;
        ssl_certificate_key  /usr/local/etc/nginx/ssl/domain_name.key;

        # where the WWW content is stored.
        root   /usr/local/www/domain_name;
        index index.php;

        access_log /var/log/domain_name_access.log;
        error_log /var/log/domain_name_error.log;

        # include PHP configuration
        include /usr/local/etc/nginx/nginx.conf.php;

        # for HTML static content comment out lines below
        # and comment lines above with "root", "index" and "include"
        # in both server section for 80 and 443 listen port
        # location / {
        # root /usr/local/www/domain_name;
        # index index.html index.htm
        # }
    }
  • Poznámka: Přepište 'domain_name' názvem vaší domény.

5. Dokončení konfigurace

Na konec musíme upravit soubor '/etc/rc.conf' tak, aby se Nginx server spouštěl automaticky při startu jail.

echo "nginx_enable=\"YES\"" >> /etc/rc.conf
  • Poznámka: Server Nginx samozřejmě můžete spustit manuálně pomocí příkazu 'service nginx start'.

6. Rotace logovacích souborů

Přidejte následující řádek do souboru '/etc/newsyslog.conf' pro automatickou rotaci logovacích souborů první den v měsíci o půlnoci. Více se dozvíte v manuálových stránkách 'man 5 newsyslog.conf'. Newsyslog je provoláván cronem každou hodinu.

 /var/log/domain_name_*.log  664  24  *  $M1D0 GJ  /var/run/nginx.pid 30

Komentáře