Configuring Virtual Hosts on Nginx Web Server

  1. Configuring nginx.conf

    user www-data;
    worker_processes auto;
    pid /run/nginx.pid;
    include /etc/nginx/modules-enabled/*.conf;
    
    events {
            worker_connections 768;
            # multi_accept on;
    }
    
    http {
    
            ##
            # Basic Settings
            ##
    
            sendfile on;
            tcp_nopush on;
            tcp_nodelay on;
            keepalive_timeout 65;
            types_hash_max_size 2048;
            # server_tokens off;
    
            # server_names_hash_bucket_size 64;
            # server_name_in_redirect off;
    
            include /etc/nginx/mime.types;
            default_type application/octet-stream;
    
            ##
            # SSL Settings
            ##​
    
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
            ssl_prefer_server_ciphers on;
    
            ##
            # Logging Settings
            ##
    
            access_log /var/log/nginx/access.log;
            error_log /var/log/nginx/error.log;
    
            ##
            # Gzip Settings
            ##
    
            gzip on;
    
    # gzip_vary on;
            # gzip_proxied any;
            # gzip_comp_level 6;
            # 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
            ##
    
            include /etc/nginx/conf.d/*.conf;
            include /etc/nginx/sites-enabled/*;
    }
    
  2. Config Example for Domain
    server {
            root /var/www/yourdomain.com/public/;
            index index.html index.htm index.php index.nginx-debian.html;
            server_name yourdomain.com www.yourdomain.com;
            client_max_body_size 128M;
            client_body_timeout 320s;
    
            error_log /var/log/nginx/yourdomain.com.error;
            access_log /var/log/nginx/yourdomain.com.access;
    
            location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ {
                    expires max;
                    log_not_found off;
            }
    
            location / {
                    try_files $uri $uri/ /index.php?$args;
                    #try_files $uri/ $uri.html $uri.php$is_args$query_string;
            }
    
            location /web {
                    try_files $uri $uri.html $uri/ @extensionless-php;
                    index  index.html index.htm index.php;
            }
            location @extensionless-php {
                    rewrite ^(.*)$ $1.php last;
            }
    
            location ~ /\.(?!well-known).* {
            deny all;
            }
    
    location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/run/php/php7.4-fpm.sock;
            fastcgi_read_timeout 300;
        }
    
        listen [::]:443 ssl; # managed by Certbot
        listen 443 ssl; # managed by Certbot
        ssl_certificate /etc/letsencrypt/live/dnymobile.com/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/dnymobile.com/privkey.pem; # managed by Certbot
        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
    
    }
    server {
        if ($host = dnymobile.com) {
            return 301 https://$host$request_uri;
        } # managed by Certbot
    
    
            listen 80;
            listen [::]:80;
    
            server_name dnymobile.com www.dnymobile.com;
        return 404; # managed by Certbot
    
    
    }
    ​

Related Articles

WhatsApp-Button