Как узнать, где установлен Nginx, и найти файл Nginx.conf, который на самом деле использует Nginx

NGINX — программное обеспечение, написанное для UNIX-систем. Основное назначение — самостоятельный HTTP-сервер, или, как его используют чаще, фронтенд для высоконагруженных проектов. Возможно использование NGINX как почтового SMTP/IMAP/POP3-сервера, а также обратного TCP прокси-сервера.

In this article I will tell you where Nginx server is installed and how to find out it’s configuration file after installation. It is very useful when you jump into an existing Nginx server and just want to find and modify it’s configuration files.

Содержание
  1. 1. How To Find Nginx Install Path And Configuration Files.
  2. 2. Some Nginx Useful Commands.
  3. Основные ошибки nginx и их устранение
  4. 502 Bad Gateway
  5. 504 Gateway Time-out
  6. Upstream timed out (110: Connection timed out) while reading response header from upstream
  7. 413 Request Entity Too Large
  8. 304 Not Modified не устанавливается
  9. Client intended to send too large body
  10. Nginx basics: config location and terminology
  11. Nginx.conf directives
  12. Nginx server blocks
  13. Location blocks
  14. Server name and virtual hosting
  15. Полезные материалы и ссылки
  16. Настройка NGINX под WP Super Cache
  17. Конвертер правил .htaccess (Apache) в NGINX
  18. Добавление модулей NGINX в Linux (Debian/CentOS/Ubuntu)
  19. Как установить NGINX
  20. Как используется и работает nginx
  21. Как в NGINX сделать редирект на мобильную версию сайта
  22. Как вместо 404 ошибки делать 301 редирект на главную
  23. Где расположен nginx
  24. Как проверить, установлен ли NGINX
  25. Как правильно составить правила nginx. conf
  26. Мультисайт NGINX WordPress
  27. Как заблокировать по IP в NGINX
  28. Как в NGINX указать размер и время
  29. Настройка отладки в NGINX
  30. Как перезагрузить nginx
  31. В чём разница между reload и restart
  32. Как в NGINX включить поддержку WebP


1. How To Find Nginx Install Path And Configuration Files.

There are several commands that you can use to find Nginx installation path and it’s configuration files path.

  1. Open a terminal and run whereis nginx

    command to return where the Nginx binary file is. But the Nginx bin directory path should exist in PATH
    system environment.
     $ whereis nginx
    nginx: /usr/bin/nginx /usr/local/nginx
    $ echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin 
  2. If there are multiple Nginx binary file path records in above command result, you can run which nginx

    to show the currently used Nginx binary file path.

     $ which nginx
    /usr/bin/nginx 
  3. You can run command ls -al /usr/bin/nginx

    to get the Nginx binary file linked real Nginx server binary file as below.

     $ ls -al /usr/bin/nginx
    lrwxrwxrwx. 1 root root 28 Dec 21 08:30 /usr/bin/nginx -> /www/server/nginx/sbin/nginx 
  4. If the Nginx binary file path do not exist in environment variable PATH
    value, you can run ps -ef | grep nginx

    command to list currently running Nginx process information.

     $ ps -ef|grep nginx
    root 1412 1 0 Dec21 ? 00:00:00 nginx: master process /www/server/nginx/sbin/nginx -c /www/server/nginx/conf/nginx.conf 
  5. From above ps -ef|grep nginx

    command, we can see Nginx binary file is  located at /www/server/nginx/sbin/nginx

    , and Nginx configuration file is located at /www/server/nginx/conf/nginx.conf

    .
  6. If the Nginx server is running now, you can also run command nginx -t

    to get and test the Nginx server configuration file.

     $ nginx -t
    nginx: the configuration file /www/server/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /www/server/nginx/conf/nginx.conf test is successful 


2. Some Nginx Useful Commands.

  1. Command nginx -V/v

    can get current executing Nginx server version. The -V will return more detail version information.

     $ nginx -V
    nginx version: nginx/1.18.0
    built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
    built with OpenSSL 1.1.1i 8 Dec 2020
    .
    $ nginx -v
    nginx version: nginx/1.18.0 
  2. Start / stop / restart / reload Nginx server.
     $ sudo systemctl start nginx
    $ sudo systemctl stop nginx
    $ sudo systemctl restart nginx
    $ sudo systemctl reload nginx 
  3. Get Nginx running status.
     $ sudo systemctl status nginx 
  4. Enable / Disable launch Nginx server when Linux server is started.
     $ sudo systemctl enable nginx
    $ sudo systemctl disable nginx 
  5. Display Nginx command line help information.
     $ sudo systemctl -h nginx
    systemctl [OPTIONS.] {COMMAND} .
    Query or send control commands to the systemd manager. -h --help Show this help --version Show package version --system Connect to system manager -H --host=[USER@]HOST Operate on remote host -M --machine=CONTAINER Operate on local container -t --type=TYPE List units of a particular type --state=STATE List units with particular LOAD or SUB or ACTIVE state
    .
    . 

Читайте также:  Повысьте производительность веб-сайта и устраните ошибки для обеспечения беспрепятственного просмотра

Основные ошибки nginx и их устранение

502 Bad Gateway

Ошибка означает, что NGINX не может получить ответ от одного из сервисов на сервере. Довольно часто эта ошибка появляется, когда NGINX работает в связке с Apache
, Varnish, Memcached
или иным сервисом, а также обрабатывает запросы PHP-FPM.

Как правило, проблема возникает из-за отключенного сервиса (в этом случае нужно проверить состояние напарника и при необходимости перезапустить его) либо, если они находятся на разных серверах, проверить пинг между ними, так как, возможно, отсутствует связь между ними.

Также, для PHP-FPM нужно проверить права доступа к сокету.

Для этого убедитесь, что в /etc/php-fpm.d/www.conf
прописаны правильные права

 listen = /tmp/php5-fpm.sock
listen.group = www-data
listen.owner = www-data 

504 Gateway Time-out

Ошибка означает, что nginx долгое время не может получить ответ от какого-то сервиса. Такое происходит, если Apache
, с которым NGINX работает в связке, отдаёт ответ слишком медленно.

Проблему можно устранить с помощью увеличения времени таймаута.

При работе в связке NGINX+Apache в конфигурационный файл можно внести изменения:

 server {
. send_timeout 800; proxy_send_timeout 800; proxy_connect_timeout 800; proxy_read_timeout 800;
.
} 

Тут мы выставили ожидание таймаута в 800 секунд.

Upstream timed out (110: Connection timed out) while reading response header from upstream

Причиной может быть сложная и потому долгая обработка php в работе PHP-FPM.

Здесь тоже можно увеличить время ожидания таймаута

 location ~ \.php$ { include fastcgi_params; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass unix:/tmp/php5-fpm.sock; fastcgi_read_timeout 800;
} 

800 секунд на ожидание ответа от бекенда.

Это лишь временные меры, так как при увеличении нагрузки на сайт ошибка снова станет появляться. Устраните узкие места, оптимизируйте работу скриптов php

413 Request Entity Too Large

Ошибка означает, что вы пытались загрузить слишком большой файл. В настройках nginx по умолчанию стоит ограничение в 1Mb.

Читайте также:  Как выбрать хостинг для интернет магазина на wordpress

Для устранения ошибки в nginx.conf нужно найти строку

 client_max_body_size 1m; 

и заменить значение на нужное. Например, мы увеличим размер загружаемых файлов до 100Mb

 client_max_body_size 100m; 

Также, можно отключить проверку размера тела ответа полностью значением ноль:

 client_max_body_size 0; 

Следует помнить, зачем ввели это ограничение: если любой пользователь может загружать файлы на неподготовленный сайт, можно сравнительно легко провести DDOS-атаку на него, перегружая входной поток большими файлами.

После каждого внесённого изменения в конфигурационный файл необходимо перезагружать nginx

304 Not Modified не устанавливается

Если возникает проблема с правильным отображением ответного заголовка сервера 304 Not Modified
, то проблема, скорее всего, в пунктах:

  • В секции server
    конкретного сайта включен ssi on
    ( Подробнее в документации
    ). По умолчанию, ssi
    отключен, но некоторые хостеры и ISPManager
    любят его прописывать в дефолтную конфигурацию сайта включенным. Его нужно обязательно отключить, закомментировав или удалив эту строку;
  • if_modified_since
    установить в before
    , то есть на уровне http
    или конкретного server
    прописать: if_modified_since before;

Правильность ответа 304 Not Modified
можно проверить с помощью:

  • Консоли разработчика браузера ( F12
    ) в разделе Network (Cеть)
    (не забываем перезагружать страницу);

    Как проверить заголовки сервера NGINX

  • Или сторонних сервисов, например last-modified.com
    .

Client intended to send too large body

Решается с помощью увеличения параметра client_max_body_size

 client_max_body_size 200m; 
How to configure Nginx

Sign up
for BitLaunch and learn how to configure Nginx today.

The idea of this tutorial isn’t to show you how to configure Nginx for your specific situation, but to give a better understanding of basic parameters and conventions so you have the flexibility to utilize it for various use cases in the future. Either way, you’ll want to be aware of a few pre-requisites if you want to explore the Nginx config files for yourself while we explain them:

  • A Linux install, preferably on a VPS (we’ll be using Ubuntu 20.04)
  • Your VPS credentials, found in your hosts’ control panel
  • A pre-existing Nginx install on your VPS or local machine
  • An SSH tool like PuTTy, to connect to your VPS
  • A secured VPS server
    to avoid breaches
Читайте также:  Register xml error тормозилки

How to Connect to SSH with PuTTY

When connecting to your Linux-based VPS from a Windows system, the most common way of doing that is via SSH, using PuTTY. PuTTY is a free utility which will allow command-line access to your server.

Как узнать, где установлен Nginx, и найти файл Nginx.conf, который на самом деле использует Nginx


Nginx basics: config location and terminology

A #
, also known as a comment, usually precedes text and forces Nginx to ignore that line. This is typically used to explain options, but it can also be utilized to temporarily remove a troublesome value from the document for troubleshooting purposes. Commenting a line is different from removing the semi-colon from the end of it – Nginx will still try to run lines without a semi-colon and will report an error.

Nginx.conf directives

Open your Nginx configuration file with with sudo nano /etc/nginx/nginx.conf
. You’ll see similar output to our Nginx test config below:

The nginx.conf file, opened in nano

Nginx server blocks

If you installed Nginx via apt-get
, the line will point to /etc/nginx/sites-enabled*
. Insides the sites-enabled directory will be symlinks to Nginx config files in /etc/nginx/sites-available
. You can therefore remove sites from sites-available by removing the symlink. You can view symlinks in a folder with ls -l
, then remove them with rm symlink_name
.

Those who installed Nginx via the official repository will instead see include etc/nginx/conf.d/*.conf;
. Exploring the folder, you’ll notice that each site hosted with Nginx will have its own .conf file here with its url at as the name.

Nginx example config, opened in nano

Ours looks like the above, but a real site may have some additional Nginx directives and will point to the server URL, rather than localhost. You’ll also note the listen directive, which is 80 by default, and defines the port at which Nginx should listen for HTTP connections. You’ll likely have two of these, one of IPv4 and one for IPv6, and they may or may not contain the argument default_server
.

“The default_server
parameter, if present, will cause the server to become the default server for the specified address:port pair,” explains Nginx
. “ If none of the directives have the default_server
parameter then the first server with the address:port pair will be the default server for this pair.”

Location blocks

 location /about/ { }
location /about/education { }
location /education/ { }
location /education/about { } 

A location block example

You may have also noticed a location setting like this in your config:

 location / {
root /usr/share/nginx/html;
index index.html index.htm;
} 

Server name and virtual hosting

 server {
server_name yourwebsite.com http://www.yourwebsite.com;
} 

It’s best to create one Nginx config file for each site you want to host on your server, rather than defining server_name
for bitlaunch.io and example.com in the same .conf.

To save time, you can use wildcards to indicate that Nginx should process requests for all subdomains, or even for request from all domain names beginning with a certain string:

  • For subdomains:
  • server_name *.yourwebsite.com;
  • For all domains beginning with yourwebsite.:
  • server_name yourwebsite.*;

If your server is over LAN, server_name
also lets you define server names that don’t exist. One instance of this is in our example default.conf file, where you’ll notice server_name localhost
.

Полезные материалы и ссылки

Настройка NGINX под WP Super Cache

Конвертер правил .htaccess (Apache) в NGINX

Сервис предназначен для перевода конфигурационного файла Apache .htaccess в инструкции конфигурационного файла nginx.

В первую очередь, сервис задумывался как переводчик инструкций mod_rewrite с htaccess на nginx. Однако, он позволяет переводить другие инструкции, которые можно и резонно перевести из Apache в nginx.

Инструкции, не относящиеся к настройке сервера (например, php_value), игнорируются.

Переводчик не проверяет правильность входящего конфига, в том числе регулярные выражения и логические ошибки.

Перейти в конвертер из .htaccess Apache в NGINX

Добавление модулей NGINX в Linux (Debian/CentOS/Ubuntu)

Функционал NGINX возможно расширить с помощью модулей. С их списком и возможным функционалом можно ознакомиться на официальном сайте http://nginx.org/ru/docs/
. Также, существуют интересные сторонние модули, например, модуль NGINX для защиты от DDoS

Приведу пример установки модуля ngx_headers_more
.

Все команды выполняются в консоли, используйте Putty или Far Manager
с NetBox/WinSCP. Установка будет происходить под Debian

Как установить NGINX

Если вы сидите не под root
, предваряйте команды apt-get
префиксом sudo
, например sudo apt-get install nginx

  1. Обновляем порты (не обязательно)
     apt-get update && apt-get upgrade 
  2. Установка NGINX
     apt-get install nginx 
  3. Проверим, установлен ли NGINX
     nginx -v 

    Команда должна показать версию сервера, что-то подобное:

    nginx version: nginx/1.10.3

Как используется и работает nginx

NGINX является широко используемым продуктом в мире IT, по популярности уступая лишь Apache
.

Как правило, его используют либо как самостоятельный HTTP-сервер, используя в бекенде PHP-FPM, либо в связке с Apache, где NGINX используется во фронтэнде как кеширующий сервер, принимая на себя основную нагрузку, отдавая статику из кеша, обрабатывая и отфильтровывая входящие запросы от клиента и отправляя их дальше к Apache. Apache работает в бекэнде, работая уже с динамической составляющей проекта, собирая страницу для передачи её в кеш NGINX и запрашивающему её клиенту. Это если в общих чертах, чтобы понимать суть работы, так-то внутри всё сложнее.

Как в NGINX сделать редирект на мобильную версию сайта

Данный код вставляется на уровне server
в самое начало файла (не обязательно в самое начало, но главное, чтобы перед определением обработчика скриптов php, иначе редирект может не сработать).

 ### Устанавливаем переменную в 0. В неё пишем 1, если обнаружили мобильную версию браузера
set $mobile_rewrite 0;
if ($http_user_agent ~* "(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino") { set $mobile_rewrite 1;
}
if ($http_user_agent ~* "^(1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-)") { set $mobile_rewrite 1;
}
### Мобильный барузер обнаружен, редиректим на мобильный поддомен, в моём случае, m.example.com
if ($mobile_rewrite = 1) { rewrite ^ http://m.example.com/$request_uri redirect; break;
} 

Как вместо 404 ошибки делать 301 редирект на главную

 error_page 404 = @gotomain;
location @gotomain { return 301 /;
} 

Где расположен nginx

Во FreeBSD NGINX располагается в /usr/local/etc/nginx
.

В Ubuntu, Debian NGINX располагается тут: /etc/nginx
. В ней располагается конфигурационный файл nginx.conf
— основной конфигурационный файл nginx.

Чтобы добраться до него, выполняем команду в консоли

 nano /etc/nginx/nginx.conf 

По умолчанию, файлы конфигураций конкретных сайтов располагаются в /etc/nginx/sites-enabled/

 cd /etc/nginx/sites-enabled/ 

или в /etc/nginx/vhosts/

 cd /etc/nginx/vhosts/ 

Как проверить, установлен ли NGINX

Пишете в консоль SSH
следующую команду, она покажет версию NGINX

 nginx -v 

Если видите что-то навроде

nginx version: nginx/1.10.3

Значит, всё в порядке, установлен NGINX версии 1.10.3
. Если нет, установим его.

Как правильно составить правила nginx. conf

Идём изучать мануалы на официальный сайт
.

Пример рабочей конфигурации NGINX в роли кеширующего проксирующего сервера с Apache в бекенде

 # Определяем пользователя, под которым работает nginx
user www-data; # Определяем количество рабочих процессов автоматически # Параметр auto поддерживается только начиная с версий 1.3.8 и 1.2.5.
worker_processes auto; # Определяем, куда писать лог ошибок и уровень логирования
error_log /var/log/nginx/error.log warn; # Задаём файл, в котором будет храниться номер (PID) основного процесса
pid /var/run/nginx.pid;
events { # Устанавливает максимальное количество соединений одного рабочего процесса. Следует выбирать значения от 1024 до 4096. # Как правило, число устанавливают в зависимости от числа ядер процессора по принципу n * 1024. Например, 2 ядра дадут worker_connections 2048. worker_connections 1024; # Метод обработки соединений. Наличие того или иного метода определяется платформой. # Как правило, NGINX сам умеет определять оптимальный метод, однако, его можно указать явно. # use epoll - используется в Linux 2.6+ # use kqueue - FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 и Mac OS X use epoll; # Будет принимать максимально возможное количество соединений multi_accept on;
}
http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; # Куда писать лог доступа и уровень логирования access_log /var/log/nginx/access.log main; # Для нормального ответа 304 Not Modified; if_modified_since before; # Включаем поддержку WebP map $http_accept $webp_ext { default ""; "~*webp" ".webp"; } ## # Basic Settings ## # Используется, если количество имен серверов большое #server_names_hash_max_size 1200; #server_names_hash_bucket_size 64; ### Обработка запросов ### # Метод отправки данных sendfile более эффективен, чем стандартный метод read+write sendfile on; # Будет отправлять заголовки и и начало файла в одном пакете tcp_nopush on; tcp_nodelay on; ### Информация о файлах ### # Максимальное количество файлов, информация о которых будет содержаться в кеше open_file_cache max=200000 inactive=20s; # Через какое время информация будет удалена из кеша open_file_cache_valid 30s; # Кеширование информации о тех файлах, которые были использованы хотя бы 2 раза open_file_cache_min_uses 2; # Кеширование информации об отсутствующих файлах open_file_cache_errors on; # Удаляем информацию об nginx в headers server_tokens off; # Будет ждать 30 секунд перед закрытием keepalive соединения keepalive_timeout 30s; ## Максимальное количество keepalive запросов от одного клиента keepalive_requests 100; # Разрешает или запрещает сброс соединений по таймауту reset_timedout_connection on; # Будет ждать 30 секунд тело запроса от клиента, после чего сбросит соединение client_body_timeout 30s; # В этом случае сервер не будет принимать запросы размером более 200Мб client_max_body_size 200m; # Если клиент прекратит чтение ответа, Nginx подождет 30 секунд и сбросит соединение send_timeout 30s; # Proxy # # Задаёт таймаут для установления соединения с проксированным сервером. # Необходимо иметь в виду, что этот таймаут обычно не может превышать 75 секунд. proxy_connect_timeout 30s; # Задаёт таймаут при передаче запроса проксированному серверу. # Таймаут устанавливается не на всю передачу запроса, а только между двумя операциями записи. # Если по истечении этого времени проксируемый сервер не примет новых данных, соединение закрывается. proxy_send_timeout 30s; # Задаёт таймаут при чтении ответа проксированного сервера. # Таймаут устанавливается не на всю передачу ответа, а только между двумя операциями чтения. # Если по истечении этого времени проксируемый сервер ничего не передаст, соединение закрывается. proxy_read_timeout 30s; ## # Gzip Settings ## # Включаем сжатие gzip gzip on; # Для IE6 отключить gzip_disable "msie6"; # Добавляет Vary: Accept-Encoding в Headers gzip_vary on; # Cжатие для всех проксированных запросов (для работы NGINX+Apache) gzip_proxied any; # Устанавливает степень сжатия ответа методом gzip. Допустимые значения находятся в диапазоне от 1 до 9 gzip_comp_level 6; # Задаёт число и размер буферов, в которые будет сжиматься ответ gzip_buffers 16 8k; # Устанавливает минимальную HTTP-версию запроса, необходимую для сжатия ответа. Значение по умолчанию gzip_http_version 1.1; # MIME-типы файлов в дополнение к text/html, которые нужно сжимать gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml; # Минимальная длина файла, которую нужно сжимать gzip_min_length 10; # Подключаем конфиги конкретных сайтов include /etc/nginx/conf.d/*.conf; include /etc/nginx/vhosts/*/*; ### Далее определяем localhost ### Сюда отправляются запросы, для которых не был найден свой конкретный блок server в /vhosts/ server { server_name localhost; # Тут можно ввести IP сервера disable_symlinks if_not_owner; listen 80 default_server; # Указываем, что это сервер по умолчанию на порту 80 ### Возможно, понадобится чётко указать IP сервера # listen 192.168.1.1:80 default_server; ### Можно сбрасывать соединения с сервером по умолчанию, а не отправлять запросы в бекенд #return 444; include /etc/nginx/vhosts-includes/*.conf; location @fallback { error_log /dev/null crit; proxy_pass http://127.0.0.1:8080; proxy_redirect http://127.0.0.1:8080 /; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; access_log off ; } }
} 

Строка include /etc/nginx/vhosts/*;
указывает на поддиректорию vhosts
, в которой содержатся файлы конфигураций конкретно под каждый домен.

Пример того, что может содержаться там — example.com.conf

Ниже пример для Apache в бекенде:

 server { # Домен сайта и его алиасы через пробел server_name example.com www.example.com; # Кодировка сайта. Содержимое заголовка "Content-Type". off отключает этот заголовок. Можно указать стандартные uft-8, windows-1251, koi8-r, либо же использовать свою. charset off; disable_symlinks if_not_owner from=$root_path; index index.html; root $root_path; set $root_path /var/www/example/data/www/example.com; access_log /var/www/httpd-logs/example.com.access.log ; error_log /var/www/httpd-logs/example.com.error.log notice; #IP:Port сервера NGINX listen 192.168.1.1:80; include /etc/nginx/vhosts-includes/*.conf; location / { location ~ [^/]\.ph(p\d*|tml)$ { try_files /does_not_exists @fallback; } # WebP location ~* ^.+\.(png|jpe?g)$ { expires 365d; add_header Vary Accept; try_files $uri$webp_ext $uri =404; } location ~* ^.+\.(gif|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ { expires 365d; try_files $uri =404; } location / { try_files /does_not_exists @fallback; } } location @fallback { proxy_pass http://127.0.0.1:8080; proxy_redirect http://127.0.0.1:8080 /; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; access_log off ; }
} 

А вот вариант для PHP-FPM:

 server { # Домен сайта и его алиасы через пробел server_name example.com www.example.com; # Кодировка сайта. Содержимое заголовка "Content-Type". off отключает этот заголовок. Можно указать стандартные uft-8, windows-1251, koi8-r, либо использовать же свою. кодировка выключена; disable_symlinks if_not_owner from=$root_path; индекс index.html; корень $root_path; установить $root_path /var/www/example/data/www/example.com; журнал_доступа /var/www/httpd-logs/example.com.access.log ; error_log /var/www/httpd-logs/example.com.error.log уведомление; #IP:Порт сервера NGINX слушать 192.168.1.1:80; включить /etc/nginx/vhosts-includes/*.conf; расположение / { расположение ~ [^/]\.ph(p\d*|tml)$ { try_files /does_not_exists @php; } # Веб-сайт расположение ~* ^.+\.(png|jpe?g)$ { истекает через 365 дней; add_header Варьировать Принять; try_files $uri$webp_ext $uri =404; } location ~* ^.+\.(gif|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ { истекает через 365 дней; try_files $uri = 404; } расположение / { try_files $uri $uri/ @php; } } местоположение @php { try_files $uri = 404; включить fastcgi_params; fastcgi_index index.php; fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f  [электронная почта защищена] "; # Путь к сокету php-fpm сайта fastcgi_pass unix:/var/www/php-fpm/example.sock; fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?+)$; }
} 

Мультисайт NGINX WordPress

Ниже размеры под WordPress Multisite с сайтами в поддиректориях:

 #user 'example' файл конфигурации виртуального хоста 'example.com'
сервер { имя_сервера example.com www.example.com; кодировка выключена; disable_symlinks if_not_owner from=$root_path; индекс index.html index.php; корень $root_path; установить $root_path /var/www/example/data/www/example.com; журнал_доступа /var/www/httpd-logs/example.com.access.log ; error_log /var/www/httpd-logs/example.com.error.log уведомление; слушать 1.2.3.4:80; включить /etc/nginx/vhosts-includes/*.conf; # А вот тут блок специально для подкаталогов MU если (!-e $request_filename) { переписать /wp-admin$ $scheme://$host$uri/ на постоянный; переписать ^(/[^/]+)?(/wp-.*) $2 последним; переписать ^(/[^/]+)?(/.*\.php) $2 последним; } расположение / { try_files $uri $uri/ /index.php?$args ; } расположение ~ \.php { try_files $uri = 404; включить fastcgi_params; fastcgi_index index.php; fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f  [электронная почта защищена] "; fastcgi_pass unix:/var/www/php-fpm/example.sock; fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?+)$; }
} 

Как заблокировать по IP в NGINX

Блокировать можно с помощью директивы разрешить
и отрицать
.

Правила обработки таковы, что поиск идёт сверху вниз. Если IP-адрес используется с правилами, поиск исчезает.

Таким образом, вы можете как забанить все ИС, кроме своих, так и заблокировать определенный ИС:

 отрицать 1.2.3.4 ; # Здесь мы вводим IP нарушителя запретить 192.168.1.1/23 ; # А это пример того, как можно добавить подсеть в бан отрицать 2001:0db8::/32 ; # Пример заблокированного IPv6 позволять все ; # Всем доступным разрешенным доступом 

Приведу пример сборки, как можно закрыть доступ к панели администратора WordPress
по ИП:

 ### https://sheensay.ru/?p=408
#################################
location = /wp-admin/admin-ajax.php { # Открываем доступ к admin-ajax.php. Это необходимо для прохождения запросов ajax в WordPress пробные_файлы $uri/ @php ;
}
location = /adminer.php { # Закрываем Администратора, если он есть try_files /does_not_exists @deny ;
}
location = /wp-login.php { # Закрываем /wp-login.php try_files /does_not_exists @deny ;
}
location ~* /wp-admin/.+\.php$ { # Закрываем каталог /wp-admin/ try_files /does_not_exists @deny ;
}
location @deny { # В этом location мы наблюдаем, правила какие IP запускать, а какие запретить разрешить 1.2.3.4 ; # Здесь мы вводим свой IP из списка белого разрешить 192.168.1.1/23 ; # А это пример того, как можно добавить подсеть IP разрешить 2001:0db8::/32 ; # Пример IPv6 отрицать все; # Закрываем доступ всем, кто не попал в белый список try_files /does_not_exists @php; # Отправляем на обработку php в бекенд
}
location ~ \.php$ { ### Файлы PHP, передаваемые в location @php try_files /does_not_exist @php;
}
местоположение @php{ ### Обработчик php, PHP-FPM или Apache
} 

Правда, по умолчанию только статичные IP. А чтобы разрешить подсеть, придётся использовать дополнительный модуль GEO
:

### Задаём таблицу соответсткий
map $remote_addr $allowed_ip { ### Перечисляете разрешённые IP 1.2.3.4 1; ### 1.2.3.4 - это разрешённый IP 4.3.2.1 1; ### 4.3.2.1 - это ещё один разрешённый IP default 0; ### По умолчанию, запрещаем доступ
}
server { ### Объявляем переменную, по которой будем проводить проверку доступа set $check ''; ### Если IP не входит в список разрешённых, отмечаем это if ( $allowed_ip = 0 ) { set $check "A"; } ### Если доступ идёт к wp-login.php, отмечаем это if ( $request_uri ~ ^/wp-login\.php ) { set $check "${check}B"; } ### Если совпали правила запрета доступа - отправляем соответствующий заголовок ответа if ( $check = "AB" ) { return 444; ### Вместо 444 можно использовать стандартный 403 Forbidden, чтобы отслеживать попытки доступа в логах ### Остальные правила server ####
} 

Как в NGINX указать размер и время

  • Байты указываются без суффикса. Пример:
     directio_alignment 512; 
  • Килобайты указываются с суффиксом k
    или K
    . Пример:

     client_header_buffer_size 1k; 
  • Мегабайты указываются с суффиксом m
    или M
    . Пример:

     client_max_body_size 100M; 
  • Гигабайты указываются с суффиксом g
    или G
    . Пример:

     client_max_body_size 1G; 

Время задаётся в следующих суффиксах:

  • ms
    — миллисекунды
  • s
    — секунды
  • m
    — минуты
  • h
    — часы
  • d
    — дни
  • w
    — недели
  • M
    — месяцы, 30 дней
  • Y
    — годы, 365 дней

В одном значении можно комбинировать различные единицы, указывая их в порядке от более к менее значащим, и по желанию отделяя их пробелами. Например, 1h 30m
задаёт то же время, что и 90m
или 5400s
. Значение без суффикса задаёт секунды.

Рекомендуется всегда указывать суффикс

Некоторые интервалы времени можно задать лишь с точностью до секунд.

Настройка отладки в NGINX

В целях отладки настройки NGINX вы можете писать данные в логи, но я советую воспользоваться директивой add_header
. С её помощью вы можете выводить различные данные в http headers
.

Пример, как можно определить, в каком location
обрабатывается правило:

 location ~ [^/]\.ph(p\d*|tml)$ { try_files /does_not_exists @fallback; add_header X-debug-message "This is php" always; } location ~* ^.+\.(jpe?g|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ { expires 365d; log_not_found off; access_log off; try_files $uri $uri/ @fallback; add_header X-debug-message "This is static file" always; } 

Теперь, если проверить, какие заголовки отдаёт статичный файл, например https://sheensay.ru/wp-content/uploads/2015/06/nginx.png
, то вы увидите среди них и наш X-debug-message

Отладочная информация NGINX в заголовках HTTP headers

Отладочная информация NGINX в заголовках HTTP headers

Вместо статичной строки можно выводить данные различных переменных, что очень удобно для правильной настройки сервера и поиска узких мест.

Как перезагрузить nginx

Для перезагрузки NGINX используйте restart
или reload
.

Команда в консоли:

 service nginx reload 
 /etc/init.d/nginx reload 
 nginx -s reload 

Эти команды остановят и перезапустят сервер NGINX.

Перезагрузить конфигурационный файл без перезагрузки NGINX можно так:

 nginx -s reload 

Проверить правильность конфигурации можно командой

 nginx -t 

В чём разница между reload и restart

Как происходит перезагрузка в NGINX:

  1. Команда посылается серверу
  2. Сервер анализирует конфигурационный файл
  3. Если конфигурация не содержит ошибок, новые процессы открываются с новой конфигурацией сервера, а старые плавно прекращают свою работу
  4. Если конфигурация содержит ошибки, то при использовании
    1. restart
      процесс перезагрузки сервера прерывается, сервер не запускается
    2. reload
      сервер откатывается назад к старой конфигурации, работа продолжается

Короче говоря, restart
обрывает работу резко, reload
делает это плавно.

Restart
рекомендуется использовать, только когда внесены глобальные изменения, например, заменено ядро сервера, либо нужно увидеть результат внесённых изменений прямо здесь и сейчас. В остальных случаях используйте reload.

Ещё лучше, если вы будете предварительно проверять правильность конфигурации командой nginx -t
, например:

 nginx -t && service nginx reload 
 nginx -t && nginx -s reload 

Как в NGINX включить поддержку WebP

Чтобы включить поддержку WebP, нужно прописать в секции http
:

 # Прописываем маппинг для WebP, если он поддерживается браузером map $http_accept $webp_ext { default ""; "~*webp" ".webp"; } 

Теперь, в секции server
можно использовать:

 location ~* ^.+\.(png|jpe?g)$ { expires 365d; # Включаем браузерный кеш на год для изображений add_header Vary Accept; # Даём заголовок, что акцептируем запрос try_files $uri$webp_ext $uri =404; # Пробуем сначала искать версию изображения .webp
} 

Оцените статью
Хостинги