VPS și DedicatedLinux

Configurarea Nginx

Găzduiește un site PHP sau pune o aplicație în proxy în spatele Nginx, cu certificat SSL gratuit.

Ghidul configurează Nginx pentru un site sau ca proxy spre o aplicație și pune totul online cu un certificat SSL gratuit de la Let's Encrypt.

  1. Instalează Nginx și Certbot

    bash
    apt update && apt upgrade -y && apt install -y nginx certbot
  2. Creează o configurare nouă în Nginx

    bash
    nano /etc/nginx/sites-available/<numeconfig>.conf

    Înlocuiește <numeconfig> cu numele site-ului sau cu orice nume dorești.

  3. Lipește configurarea de care ai nevoie

    Alege configurarea potrivită de mai jos și lipește-o în editor (click dreapta în terminal).

    nginx-php-web.conf
    nginx
    server_tokens off;
     
    server {
        listen 80;
        listen [::]:80;
        server_name exemplu.dns;
        return 301 https://$server_name$request_uri;
    }
     
    server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        server_name exemplu.dns;
     
        root /var/www/path_site;
        index index.php;
     
        # allow larger file uploads and longer script runtimes
        client_max_body_size 100m;
        client_body_timeout 120s;
     
        sendfile off;
     
        # Configurare SSL - înlocuiește exemplu.dns cu domeniul tău
        ssl_certificate /etc/letsencrypt/live/exemplu.dns/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/exemplu.dns/privkey.pem;
        ssl_session_cache shared:SSL:10m;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";
        ssl_prefer_server_ciphers on;
     
        # See https://hstspreload.org/ before uncommenting the line below.
        # add_header Strict-Transport-Security "max-age=15768000; preload;";
        add_header X-Content-Type-Options nosniff;
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Robots-Tag none;
        add_header Content-Security-Policy "frame-ancestors 'self'";
        add_header X-Frame-Options DENY;
        add_header Referrer-Policy same-origin;
     
        location / {
            try_files $uri $uri/ /index.php?$query_string;
        }
     
        location ~ \.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/run/php/php8.1-fpm.sock; # Modifică cu versiunea de PHP pe care o ai instalată (ex: 7.4, 8.0, 8.1, 8.2, 8.3)
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param PHP_VALUE "upload_max_filesize=256M \n post_max_size=40M"; # Mărimea maximă a unui fișier încărcat (upload_max_filesize) și a unui request pe webserver (post_max_size)
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param HTTP_PROXY "";
            fastcgi_intercept_errors off;
            fastcgi_buffer_size 16k;
            fastcgi_buffers 4 16k;
            fastcgi_connect_timeout 300;
            fastcgi_send_timeout 300;
            fastcgi_read_timeout 300;
            include /etc/nginx/fastcgi_params;
        }
     
        set_real_ip_from 173.245.48.0/20;
        set_real_ip_from 103.21.244.0/22;
        set_real_ip_from 103.22.200.0/22;
        set_real_ip_from 103.31.4.0/22;
        set_real_ip_from 141.101.64.0/18;
        set_real_ip_from 108.162.192.0/18;
        set_real_ip_from 190.93.240.0/20;
        set_real_ip_from 188.114.96.0/20;
        set_real_ip_from 197.234.240.0/22;
        set_real_ip_from 198.41.128.0/17;
        set_real_ip_from 162.158.0.0/15;
        set_real_ip_from 104.16.0.0/13;
        set_real_ip_from 104.24.0.0/14;
        set_real_ip_from 172.64.0.0/13;
        set_real_ip_from 131.0.72.0/22;
        set_real_ip_from 2400:cb00::/32;
        set_real_ip_from 2606:4700::/32;
        set_real_ip_from 2803:f800::/32;
        set_real_ip_from 2405:b500::/32;
        set_real_ip_from 2405:8100::/32;
        set_real_ip_from 2a06:98c0::/29;
        set_real_ip_from 2c0f:f248::/32;
        real_ip_header CF-Connecting-IP;
     
        location ~ /\.ht {
            deny all;
        }
    }

    Înlocuiește path_site cu folderul site-ului din /var/www/ și exemplu.dns cu domeniul tău.

    Apoi apasă CTRL + X, Y și ENTER ca să salvezi.

  4. Creează certificatul SSL și activează site-ul

    1. Oprește mai întâi Nginx, ca să se poată crea certificatele:

      bash
      systemctl stop nginx
    2. Creează certificatul SSL cu Certbot (înlocuiește exemplu.dns cu domeniul site-ului tău):

      bash
      certbot certonly --standalone -d exemplu.dns
    3. Dă-i lui Nginx permisiunile potrivite pe site (înlocuiește path_site cu locația site-ului în /var/www/):

      bash
      chown -R www-data:www-data /var/www/path_site/*
    4. Activează configurarea site-ului (înlocuiește <numeconfig> cu numele folosit la pasul anterior):

      bash
      rm /etc/nginx/sites-enabled/default && sudo ln -s /etc/nginx/sites-available/<numeconfig>.conf /etc/nginx/sites-enabled/<numeconfig>.conf
  5. Pornește Nginx

    bash
    systemctl enable nginx && systemctl start nginx