Конфигурация Nginx для чайников

Aug 11, 2016 15:09 · 278 words · 2 minute read nginx

Основная причина некорректной работы web-сервера Nginx (и любых других систем) — бездумный копипаст конфигурационных файлов. Тем более, что подводных камней в настройке Nginx довольно много. Давайте разберемся с некоторыми из них!

Часто описание root-каталога размещают внутри контекста location, и это вполне допустимо. Но правильнее все же указывать его в секции server, например так:

server {
    server_name example.com;
    root /var/www/public/;
    location / {
        # some configuration
    }
    location /admin {
        # some configuration
    }
    location /upload {
        # some configuration
    }
}

Не стоит плодить директивы index в каждой секции server, достаточно один раз прописать их в блоке http:

http {
    index index.php index.htm index.html;
    server {
        server_name www.example.com;
        location / {
            # some configuration
        }
    }
    server {
        server_name example.com;
        location / {
            # some configuration
        }
        location /admin {
            # some configuration
        }
    }
}

Многие уже знают, что If = зло. По возможности, старайтесь обходиться без этой директивы, и не вздумайте использовать if для проверки наличия файлов — для этого есть try_files. Неправильно:

...
    location / {
        if (!-f $request_filename) {
            break;
        }
    }
...

Правильно:

...
    location / {
        try_files $uri $uri/ /index.html;
    }
...

Перенаправлять запросы на php тоже надо уметь. Вот так, например, делать не стоит:

server {
    server_name example.com
    root /var/www/public/;
    location / {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass unix:/run/php/phpcgi.socket;
    }
}

Намного лучше написать:

server {
    server_name example.com
    root /var/www/public/;
    location / {
        try_files $uri $uri/ /index.php;
    }
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass unix:/run/php/phpcgi.socket;
    }
}

Главное — читайте документацию, внимательно проверяйте конфигурационные файлы, используйте nginx -t. Не повредит также оставлять комментарии — так всегда можно вспомнить зачем в конфиге появился тот или иной параметр.

tweet Share