6
\$\begingroup\$

The following code is an Nginx default conf file. The conf file itself includes another server block which holds a site's conf.

While this combination works and the sites appear fine on web, I have a feeling that my code doesn't follow the DRY standard.

server {
    server_name _;
    return 301 https://$host$request_uri;

    root /var/www/html;
    index index.php index.html index.htm;

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass 127.0.0.1:9000;
    }

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ /\.ht {
        deny all;
    }

    # notes {
        # 443 ssl http2;
        # [::]:443 ssl http2;
    # }
}

server {
    listen 80;
    listen [::]:80;
    server_name contfix.co.il www.contfix.co.il;

    ssl_certificate /etc/nginx/conf.d/ssl/contfix.co.il.crt;
    ssl_certificate_key /etc/nginx/conf.d/ssl/contfix.co.il.key;
    ssl_dhparam /etc/nginx/conf.d/ssl/dhparam.pem;

    root /var/www/html/contfix.co.il;

    location / {
        index index.php index.html index.htm;
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass 127.0.0.1:9000;
    }

    location ~*  \.(jpg|jpeg|png|gif|ico|css|js|ttf|woff)$ {
        expires 365d;
    }

    location ~*  \.(pdf)$ {
        expires 30d;
    }
}

Given my code seems to me a bit repetitive, I want to ask: Can it be made a bit less repetitive?

\$\endgroup\$
  • \$\begingroup\$ This works? Because your second server block is listening on port 80 and also using an SSL certificate. Either you mean to be listening on port 443 or you want to remove the lines about the SSL configuration (I think) \$\endgroup\$ – Conor Mancone Oct 23 '17 at 14:50
  • \$\begingroup\$ These are just comfortable comment because later I would have to use this syntax. \$\endgroup\$ – JohnDoea Oct 23 '17 at 15:03
  • \$\begingroup\$ Was there anything else you hoped my answer might suggest? \$\endgroup\$ – Sᴀᴍ Onᴇᴌᴀ Dec 6 '19 at 14:18
  • \$\begingroup\$ @SᴀᴍOnᴇᴌᴀ I didn't recall I putted two similar confs in one code block (maybe by mistake). I think there weren't other parts and the purpose at the time was to use just one big file for everything, something I later found out impossible with Nginx. \$\endgroup\$ – JohnDoea Dec 6 '19 at 17:44
2
+50
\$\begingroup\$

I compared the two server configurations and the only thing that appears to matches between the two is the location ~ \.php$ directive, as well as the index directive, though in the latter configuration that is under the directive location /

nginx config diff

Perhaps the common configurations could be put into the file included via include (i.e. fastcgi-php.conf).

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.