Tools Index

1. Nginx

1.1. Install Nginx

        $  prt-get depinst nginx
        

Allow minimal privileges via mount options, view /etc/fstab;

        UID=xxxxx-xxx-xxx-xxx-xxxxxxxx  /srv/www                ext4 defaults,nosuid,noexec,nodev,noatime       1 2
        

Remove nginx user or group, system defines www user and group;

        # userdel nginx
        # groupdel nginx
        

Change default home directory of www user;

        # usermod -m -d /srv/www www
        

Create configuration directory's for better organization;

        $ sudo mkdir /etc/nginx/conf.d
        $ sudo mkdir /etc/nginx/sites-enable
        $ sudo mkdir /etc/nginx/sites
        

1.2. Logs

        $ sudo grep "login" /var/log/nginx/access.log
        $ sudo grep "etc/passwd" /var/log/nginx/access.log
        $ sudo egrep -i "denied|error|warn" /var/log/nginx/error.log
        

1.3. User Directory

Nginx Wiki UserDir

         location ~ ^/~(.+?)(/.*)?$ {
            alias /home/$1/public_html$2;
            index  index.html index.htm;
            autoindex on;
         }
        

Directories should have 644 or 664 and files chmod 755 or 775;

        $ sudo find . -type f -print0 | xargs -0 chmod 644
        $ sudo find . -type d -print0 | xargs -0 chmod 755
        

1.4. Certificates

Certificates allow a more secure connection. Lets create self-signed certificate;

        $ sudo mkdir /etc/nginx/ssl
        $ sudo cd /etc/nginx/ssl
        

Create private key;

        $ sudo openssl genrsa -des3 -out /etc/ssl/keys/nginx.key 2048
        Password:
        Generating RSA private key, 2048 bit long modulus
        ..............................+++
        ............+++
        e is 65537 (0x10001)
        Enter pass phrase for /etc/ssl/keys/nginx.key:
        Verifying - Enter pass phrase for /etc/ssl/keys/nginx.key:
        

Create ceritificate signing request. For "Common Name" provide domain name or ip address, leave challange password and optional company name blank;

        $ sudo openssl req -new -key /etc/ssl/keys/nginx.key -out /etc/ssl/certs/nginx.csr
        Enter pass phrase for /etc/ssl/keys/nginx.key:
        You are about to be asked to enter information that will be incorporated
        into your certificate request.
        What you are about to enter is what is called a Distinguished Name or a DN.
        There are quite a few fields but you can leave some blank
        For some fields there will be a default value,
        If you enter '.', the field will be left blank.
        -----
        Country Name (2 letter code) [AU]:PT
        State or Province Name (full name) [Some-State]:Porto
        Locality Name (eg, city) []:
        Organization Name (eg, company) [Internet Widgits Pty Ltd]:
        Organizational Unit Name (eg, section) []:
        Common Name (e.g. server FQDN or YOUR name) []:c13.nark.biz.tm
        Email Address []:

        Please enter the following 'extra' attributes
        to be sent with your certificate request
        A challenge password []:
        An optional company name []:
        $
        

Sign SSL cetificate;

        $ sudo openssl x509 -req -days 365 -in /etc/ssl/certs/nginx.csr -signkey /etc/ssl/keys/nginx.key -out /etc/ssl/certs/nginx.crt
        Signature ok
        subject=/C=PT/ST=Porto/O=Internet Widgits Pty Ltd/CN=c13.nark.biz.tm
        Getting Private key
        Enter pass phrase for /etc/ssl/keys/nginx.key:
        $
        

Remove Password

Having password is a good idea, but requires it every time nginx is restarted. To remove;

        $ sudo cp /etc/ssl/keys/nginx.key /etc/ssl/keys/nginx.key.org
        $ sudo openssl rsa -in /etc/ssl/keys/nginx.key.org -out /etc/ssl/keys/nginx.key
        Enter pass phrase for /etc/ssl/keys/nginx.key.org:
        writing RSA key
        $
        

1.5. Nginx Configuration

READ NGINX PITFALLS, for more information about optimization digitalocean,

Number of worker_processes must be equal or less than the number of available cpu cores

        $ nproc
        2
        

Number of worker_connections must be equal or less than the number file-size writing limit, you can get it by;

        $ nlimit -n
        1024
        

Example of http block with ssl configured;

        #
        # /etc/nginx/nginx.conf
        #

        user www;
        worker_processes  2;

        error_log  /var/log/nginx/error.log  info;

        events {
            worker_connections  1024;
        }

        http {

            include             /etc/nginx/mime.types;
            default_type	application/octet-stream;

            sendfile        on;
            #tcp_nopush     on;

            #keepalive_timeout 620;
            keepalive_timeout  65;
            client_body_timeout 12;
            client_header_timeout 12;
            # send_timeout 620;
            send_timeout 65;

            ##
            # SSL Settings
            ##
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
            ssl_prefer_server_ciphers on;

            # ssl on;
            ssl_certificate /etc/ssl/certs/nginx.crt;
            ssl_certificate_key /etc/ssl/keys/nginx.key;

            ##
            # Logging Settings
            ##
            #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
            #                  '$status $body_bytes_sent "$http_referer" '
            #                  '"$http_user_agent" "$http_x_forwarded_for"';

            access_log		/var/log/nginx/access.log  combined;
            error_log		/var/log/nginx/error.log;

            ##
            # Gzip Settings
            ##

            gzip on;
            gzip_disable "msie6";

            gzip_vary on;
            gzip_proxied any;
            gzip_comp_level 9;
            # gzip_buffers 16 8k;
            # gzip_http_version 1.1;
            gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;


            ##
            # Virtual Host Configs
            ##
            server {
                listen         80 default_server;
                server_name _;
                return         301 https://$host$request_uri;
            }

            include /etc/nginx/conf.d/*.conf;
            include /etc/nginx/sites-enabled/*.conf;
        }
        # End of file        

1.6. Server with PHP

check configuration directory for more examples. Install php and composer that is required by Laravel;

1.6.1. Setup PHP

        $ prt-get depinst php php-fpm php-gd php-pdo-pgsql composer
        

Setup php ini in development mode;

        $ sudo cp /etc/php/php.ini-development php.ini
        $ php --ini
        Configuration File (php.ini) Path: /etc/php
        Loaded Configuration File:         /etc/php/php.ini
        Scan for additional .ini files in: /etc/php/conf.d
        Additional .ini files parsed:      /etc/php/conf.d/extensions.ini,
        /etc/php/conf.d/pdo_pgsql.ini

        $
        

1.6.2. Setup Virtual Host

Server (virtual host) with Laravel, /etc/nginx/sites/laravel.conf;

        server {
            listen 443 ssl;
            listen [::]:443 ssl;

            root /srv/www/atom/public;
            server_name c13.nark.biz.tm;
            index index.html index.htm index.php;

            charset utf-8;

            location / {
                try_files $uri $uri/ /index.php$is_args$args;
            }

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

            access_log off;
            error_log  /var/log/nginx/c13-nark-biz-tm-error.log error;

            sendfile off;

            client_max_body_size 100m;

            location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_intercept_errors off;
                fastcgi_buffer_size 16k;
                fastcgi_buffers 4 16k;
            }

            location ~ /\.ht {
                deny all;
            }
        }
        
Tools Index

This is part of the c9-doc Manual. Copyright (C) 2016 c9 team. See the file Gnu Free Documentation License for copying conditions.