[TEMPLATE] Nginx configuration template (nginx.conf) (LNMP + SSL + CDN version)

worker_processes  auto;


events {
    worker_connections  10000;
}


http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  60;
    client_body_timeout 20s;
    client_header_timeout 10s;
    send_timeout 30s;


    server {
        listen       80;
        limit_req zone=one burst=5;
        server_name www.eternalcenter.com;
        return 301 https://eternalcenter.com$request_uri;
        }


    server {
        listen       80;
        limit_req zone=one burst=5;
        server_name eternalcenter.com;
        return 301 https://eternalcenter.com$request_uri;
        }


    server {
        listen       443 ssl;
        server_name www.eternalcenter.com;

        ssl_certificate      /etc/nginx/ssl/eternalcenter.com.crt;
        ssl_certificate_key  /etc/nginx/ssl/eternalcenter.com.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        if ($request_method !~ ^(GET|POST)$){
        return 444;
        }

        root /usr/share/nginx/html;
        index index.php index.html;

        location ~ ^/\.user\.ini {
        deny all;
        }

        location ~*\.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
        expires 30d;
        access_log off;
        try_files $uri =404;
        }

        location ~ \.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_param HTTP_HOST $http_host;
        }

        location ~* ^/(wp-login\.php|admin-ajax\.php|wp-admin|wp-json|wp-includes|wp-content/plugins|wp-content/themes|wp-content/uploads) {
        set $cache_control_policy "no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0";
        set $pragma_policy "no-cache";
        set $expires_policy "0";
        add_header Cache-Control $cache_control_policy always;
        add_header Pragma $pragma_policy always;
        add_header Expires $expires_policy always;

        try_files $uri $uri/ /index.php?$query_string;
        }

        location / {
             return 302 $scheme://eternalcenter.com$request_uri;
        }

        error_page  404              /404.html;
    }


    server {
        listen       443 ssl;
        server_name eternalcenter.com;

        ssl_certificate      /etc/nginx/ssl/eternalcenter.com.crt;
        ssl_certificate_key  /etc/nginx/ssl/eternalcenter.com.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        if ($request_method !~ ^(GET|POST)$){
        return 444;
        }

        root /usr/share/nginx/html/;
        index index.php index.html index.htm;

        location ~ ^/\.user\.ini {
        deny all;
        }
    
        location ~*\.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
        expires 30d;
        access_log off;
        try_files $uri =404;
        }

        location ~ \.php$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            include fastcgi.conf;
            fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html/$fastcgi_script_name;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param HTTP_HOST $http_host;
        } 

        location ~ ^/index\.php$ {

        set $cache_control_policy "no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0";
        set $pragma_policy "no-cache";
        set $expires_policy "0";

        add_header Cache-Control $cache_control_policy always;
        add_header Pragma $pragma_policy always;
        add_header Expires $expires_policy always;
        }

        location / {
        try_files $uri $uri/ /index.php?$query_string;
        }

        error_page  404              /404.html;
        }


    gzip on;
    gzip_min_length 1000;
    gzip_comp_level 4;

    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    client_header_buffer_size 1k;
    large_client_header_buffers 4 4k;

    open_file_cache max=2000 inactive=20s;
    open_file_cache_valid  60s;
    open_file_cache_min_uses 5;
    open_file_cache_errors off;

}