MyTetra Share
Делитесь знаниями!
Сервер nginx на Ubuntu
11.01.2019
18:43
Автор: alensav
Текстовые метки: server, nginx
Раздел: MyTetra - Ubuntu_Command

Установка веб сервера nginx на Ubuntu , linux

АвторNeoBLOGS

- 19.06.2013





Эта статья описывает то как поднять веб сервера на nginx без Apache. Так же описана   установка необходимых модулей PHP, и его же тонкая конфигурация. В общем самое основное что нужно для нормальной работы веб сервера

Исходим из того что у нас уже имеется установленный сервер на базе Ubuntu server , с чего начать?

Конечно же с обновления:

 

$ sudo apt-get update && sudo apt-get upgrade

 NginX

 Сборка и установка NginX

Для начала нам нужно установить следующие пакеты:

$ sudo apt-get install build-essential mc mysql-server php5-cgi php5-gd php5-mysql imagemagick php5-mcrypt libpcre3-dev libssl-dev libssl-dev libgd2-xpm-dev libgcrypt11-dev libperl-dev

Далее нам нужно скачать сам nginx — для этого выполняем команду:

  Установка php 7.1 на ubuntu. Настройка php7.1

 

$ cd /tmp && wget http://nginx.org/download/nginx-1.0.3.tar.gz && tar xvfz ./nginx-1.0.3.tar.gz && cd ./nginx-1.0.3

Далее собираем и устанавливаем веб сервер  nginx:

 

$ ./configure --prefix=/usr/local/nginx --with-pcre --with-ipv6 --with-http_flv_module --with-http_gzip_static_module --with-http_perl_module --with-http_image_filter_module --with-http_stub_status_module

 

$ make && sudo make install

Для любителей того чтобы все было в одном   месте создадим ссылку в /etc:

 

  1. $ sudo ln -s /usr/local/nginx/conf /etc/nginx

 

Запуск NginX

В /etc/init.d скидываем этот стартовый скрипт nginx  и выставляем права на запуск:

 

$ sudo chmod 755 /etc/init.d/nginx

Далее нам нужен  запуск nginx при старте нашей системы:

 

$ sudo update-rc.d nginx defaults

На этом этапе наш nginx готов к старту при загрузке и работе. Осталось всего — ничего , настроить ротацию логов.

  Шифрование на Ubuntu с помощью Truecrypt

Ротация логов NginX

Для создания ротации логов нам понадобится всего один файл с конфигурацией logrotate.d.

 

$ sudo wget https://neoblogs.net/wp-content/mods/nginx_logrotate -O /etc/logrotate.d/nginx

Теперь ваши логи будут «сворачиваться» ежедневно и не заполнять собой место на диске , что очень практично.

На этом с установкой nginx мы  закончили. Кому нужно, тот смело может вносить свои поправки в конфигурацию NginX (для опытных пользователей).

 PHP-Fastcgi

Установка и настройка

Основа PHP-CGI у нас уже установлена и нам осталось только «демонизировать» и корректно его настроить. Демоном мы поставим spawn-fcgi:

 

$ sudo apt-get install spawn-fcgi

Далее настроим сам запуск демона php5-cgi. ,  выше уже был написан стартовый скрипт для его запуска. Так что Вам необходимо только выполнить команду:

  Vavle не останавливается и портирует игры на Linux

 

$ sudo wget https://neoblogs.net/wp-content/mods/php-fastcgi -O /etc/init.d/php-fastcgi && chmod 755 /etc/init.d/php-fastcgi

Добавляем его в автозапуск:

$ sudo update-rc.d php-fastcgi defaults

Прямо в этом скрипте Вы можете править необходимые вам параметры. По умолчанию у нас использованы  сокеты, поэтому  все соединения должны быть настроены на /tmp/phpfcgi.socket. Но так же  предусмотрено и сетевое соединение, если к нему привыкли и не хотите ничего менять в своих привычках :) , то просто измените USE_SOCKET на 0.

Стартуем:

  1.  $ sudo /etc/init.d/nginx start

$ sudo /etc/init.d/php-fastcgi start

на этом все ,  можно начинать пользоваться

==========

Установка Nginx на Ubuntu. Свой веб сервер за 5 минут.

Авторvitamin

- 21.03.2017



https://neoblogs.net/2017/03/21/ustanovka-nginx-na-ubuntu-svoj-veb-server-za-5-minut/


Скопилось много информации в голове поэтому хочу рассказать происходит установка nginx на ubuntu, подробно и для новичков. Установка достаточно проста ее можно сделать всего 1 командой. Но нам этого не нужно нам нужны всегда свежие версии nginx я лично всегда пользуюсь ими.

Установка nginx на vps

Сейчас можно найти много дешевых VPS за 90 рублей в месяц!!! Почему бы и нет, спокойно выдерживают до 50 тыс хитов в сутки, но это если вы не используете движок на говнокоде. Так как я использую WordPress сегодня мы поговорим о нем. Настройка nginx будет проводится именно под этот движок. Ну что, поехали …
Загружаем и добавляем ключ от официального репозитория nginx

sudo wget https://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key

Вносим изменения в сорс лист.

sudo nano /etc/apt/sources.list

добавив в конец файла

deb http://nginx.org/packages/mainline/ubuntu/ xenial nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ xenial nginx

Для тех кто использует другую версию ubuntu вам нужно изменить кодовое имя os она выделено красным. Выберите свое, и замените если у вас не ubuntu 16.04

ubuntu 12.04          precise
ubuntu 14.04          trusty
ubuntu 16.04          xenial
ubuntu 16.10         yakkety

Все отредактировано, теперь приступим к установке

sudo apt update && apt install nginx

все готово веб сервер nginx установлен, теперь каждый месяц у вас будет новая версия.

  Бесплатный SSL сертификат для сайта от Let's Encrypt

Настройка nginx, wordpress.

sudo nano /etc/nginx/nginx.conf

Чистим от стандартной конфигурации и вставим ту что ниже:

user www-data www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
     worker_connections 1024;
}

http {
         upstream php { 
         # Выберите вашу версию php fpm ту что не нужна удалите
         # server unix:/run/php/php7.1-fpm.sock; 
         server unix:/run/php/php7.0-fpm.sock;
         }

         reset_timedout_connection   on;
         keepalive_requests 100;
         tcp_nodelay on;
         tcp_nopush on;
         sendfile on;
         send_timeout 10;
         client_header_timeout 10;
         client_body_timeout 10;         
         keepalive_timeout 35 10; 



	 types_hash_max_size 2048;
	 server_tokens off;

	 include /etc/nginx/mime.types;
         default_type  application/octet-stream;
	 access_log /var/log/nginx/access.log;
         error_log /var/log/nginx/error.log;
	 include /etc/nginx/conf.d/*.conf;                                         
}

Это был основной файл конфигурации nginx настройка под слабенький vps.
Теперь отредактируем конфигурационный файл для вашего сайта, при желании на основе этого конфига вы можете запустить еще 1 сайт добавив еще 1 файл конфигурации

sudo nano //etc/nginx/conf.d/my_site.conf

Вставим конфигурацию в файл и сохраним файл. Предварительно изменив имя вашего домена ( в конфиге это my.site.ru ), и директорию сайта если она отличается от стандартной /var/www/html

server {
       # Порт сервера
       listen 80;
       # Доменное имя с www или без него
       server_name my.site.ru;
       # директория сайта
       root /var/www/html;
       # Кодировка сайта
       charset utf-8; 
       # index.php - Для того чтобы была возможность работать сайту на php
       index index.html index.php;
        # Максимально допустимы размер файла при загрузке на сайт
       client_max_body_size 100m;
       # Таймаут при работе скрипта
       fastcgi_read_timeout 300; 

# Кеширование статики
location ~* \.(?:ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf|css|js|woff2)$ {
expires max;
add_header Cache-Control "public";
access_log off;
log_not_found   off;
}

# Серверная компрессия файлов для уменьшения их размера и трафика сайта
gzip on;
gzip_min_length 128;
gzip_buffers 128 32k;
gzip_types
 text/css
 text/javascript
 text/xml
 text/plain
 text/x-component
 application/javascript
 application/x-javascript
 application/json
 application/xml
 application/rss+xml
 application/atom+xml
 font/truetype
 font/opentype
 application/vnd.ms-fontobject
 image/svg+xml;
gzip_proxied expired no-cache no-store private auth;
gzip_disable "msie6";
gzip_vary on;
gzip_comp_level 1;

# Для работы чпу в wordpress
location / {
            try_files $uri $uri/ /index.php?$args; 
}

# php 
location ~ \.php$ {
           include fastcgi_params;
           fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
           fastcgi_pass php;
           fastcgi_intercept_errors on;
           }
}

Все готово. Теперь можно приступить к установке php7.1 — wordpress прекрасно работает с этой версией php, все плагины которые ежемесячно обновляются будут прекрасно взаимодействовать с ней, даря вам приятные ощущения при использовании cms.

=============================

https://sheensay.ru/nginx

NGINX

12.11.2018

Бесплатный хостинг без звёздочек и рекламы

Что такое nginx

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

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

У сайта sheensay.ru есть свой канал в Telegram - @sheensayru.
В нём публикуются ссылки на новые материалы сайта и интересные, по моему мнению, публикации.
Подписывайтесь и будьте в курсе последних событий.
Спасибо, уже подписался

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

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

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


1

nginx -v

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

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

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

  1. Обновляем порты (не обязательно)

  2. 1

    apt-get update && apt-get upgrade

  3. Установка NGINX

  4. 1

    apt-get install nginx

  5. Проверим, установлен ли NGINX


1

nginx -v

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

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

Во FreeBSD NGINX располагается в /usr/local/etc/nginx.
В Ubuntu, Debian NGINX располагается тут:
/etc/nginx. В ней располагается конфигурационный файл nginx.conf — основной конфигурационный файл nginx.
Чтобы добраться до него, выполняем команду в консоли


1

nano /etc/nginx/nginx.conf

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


1

cd /etc/nginx/sites-enabled/

или в /etc/nginx/vhosts/


1

cd /etc/nginx/vhosts/

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

Идём изучать мануалы на официальный сайт.
Пример рабочей конфигурации NGINX в роли кеширующего проксирующего сервера с Apache в бекенде


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

# Определяем пользователя, под которым работает 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;

    # В этом случае сервер не будет принимать запросы размером более 1Мб

    client_max_body_size 1m;

    # Если клиент прекратит чтение ответа, 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 в бекенде:


Apache

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

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:


PHP-FPM

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

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 @php;

    }

    # 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 $uri $uri/ @php;

    }

  }

  location @php {

    try_files $uri =404;

    include fastcgi_params;

    fastcgi_index index.php;

    fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f webmaster@example.com";

    # Путь к сокету php-fpm сайта

    fastcgi_pass unix:/var/www/php-fpm/example.sock;

    fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;

  }

}

NGINX WordPress Multisite

Ниже конфигурация под WordPress Multisite с сайтами в поддиректориях:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

#user 'example' virtual host 'example.com' configuration file

server {

  server_name example.com www.example.com;

  charset off;

  disable_symlinks if_not_owner from=$root_path;

  index index.html index.php;

  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;

  listen 1.2.3.4:80;

  include /etc/nginx/vhosts-includes/*.conf;

 

  # А вот тут блок специально для MU subdirectories

  if (!-e $request_filename) {

      rewrite /wp-admin$ $scheme://$host$uri/ permanent;

      rewrite ^(/[^/]+)?(/wp-.*) $2 last;

      rewrite ^(/[^/]+)?(/.*\.php) $2 last;

  }

 

  location / {

      try_files $uri $uri/ /index.php?$args ;

  }

 

  location ~ \.php {

    try_files $uri =404;

    include fastcgi_params;

    fastcgi_index index.php;

    fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f webmaster@example.com";

    fastcgi_pass unix:/var/www/php-fpm/example.sock;

    fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;

  }

}

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

Блокировать можно с помощью директив allow и deny.

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


1

2

3

4

deny 1.2.3.4 ; # Здесь мы вводим IP нарушителя

deny 192.168.1.1/23 ; # А это пример того, как можно добавить подсеть в бан

deny 2001:0db8::/32 ; # Пример заблокированного IPv6

allow all ; # Всем остальным разрешаем доступ

Приведу пример конфигурации, как можно закрыть доступ к панели администратора WordPress по IP:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

### https://sheensay.ru/?p=408

################################

 

location = /wp-admin/admin-ajax.php { # Открываем доступ к admin-ajax.php. Это нужно, чтобы проходили ajax запросы в WordPress

  try_files $uri/ @php ;

}

  

location = /adminer.php { # Закрываем Adminer, если он есть

  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 пропускать, а какие забанить

 

  allow 1.2.3.4 ; # Здесь мы вводим свой IP из белого списка

  allow 192.168.1.1/23 ; # А это пример того, как можно добавить подсеть IP

  allow 2001:0db8::/32 ; # Пример IPv6

 

  deny all ; # Закрываем доступ всем, кто не попал в белый список

  

  try_files /does_not_exists @php; # Отправляем на обработку php в бекенд

}

  

location ~ \.php$ { ### Файлы PHP обрабатываем в location @php

    try_files /does_not_exist @php; 

}

 

location @php{

    ### Обработчик php, PHP-FPM или Apache

}

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


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

     

### Задаём таблицу соответсткий

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 указать размер и время

Размеры:

  • Байты указываются без суффикса. Пример:

  • 1

    directio_alignment 512;

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

  • 1

    client_header_buffer_size 1k;

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

  • 1

    client_max_body_size 100M;

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


1

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 обрабатывается правило:


1

2

3

4

5

6

7

8

9

10

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 в Linux (Debian/CentOS/Ubuntu)

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

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


  1. 1

    nginx -V

    В результате увидите что-то навроде


    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    nginx version: nginx/1.8.0

    built by gcc 4.9.1 (Debian 4.9.1-19)

    built with OpenSSL 1.0.1k 8 Jan 2015

    TLS SNI support enabled

    configure arguments: --prefix=/etc/nginx --sbin-path=/etc/nginx/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/ngin

    x/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/p

    roxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=ng

    inx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-htt

    p_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-htt

    p_auth_request_module --with-mail --with-mail_ssl_module --with-file-aio --with-http_spdy_module --with-cc-opt='-g -O2 -fstack-protector-strong -Wformat -Werror=format-securi

    ty' --with-ld-opt=-Wl,-z,relro --with-ipv6

    Результат запишем в блокнот, пригодится при компиляции


  2. 1

    wget http://nginx.org/download/nginx-1.8.0.tar.gz


    1

    tar xvf nginx-1.8.0.tar.gz


    1

    rm -rf nginx-1.8.0.tar.gz


    1

    cd nginx-1.8.0

    Тут мы скачиваем нужную версию NGINX.


  3. 1

    wget https://github.com/openresty/headers-more-nginx-module/archive/v0.29.tar.gz


    1

    tar xvf v0.29.tar.gz

    Скачиваем и распаковываем последнюю версию модуля из источника, в моём случае, с GitHub


  4. 1

    aptitude install build-essential

    Установим дополнительные пакеты.
    Если выходит ошибка
    aptitude: команда не найдена, нужно предварительно установить aptitude:


    1

    apt-get install aptitude

  5. Теперь приступаем к конфигурированию NGINX с модулем headers-more-nginx-module
    Ещё раз запускаем nginx -V и копируем, начиная с —prefix= и до первого —add-module= (все присутствующие в результате —add_module= нам не нужны). После чего пишем в консоли ./configure и вставляем скопированное из редактора:

  6. 1

    ./configure --prefix=/etc/nginx --sbin-path=/etc/nginx/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-mail --with-mail_ssl_module --with-file-aio --with-http_spdy_module --with-cc-opt='-g -O2 -fstack-protector-strong -Wformat -Werror=format-security' --with-ld-opt=-Wl,-z,relro --with-ipv6 --add-module=./headers-more-nginx-module-0.29

    —add-module={Тут надо добавить путь до распакованного модуля, абсолютный или относительный}

  7. Во время конфигурирования могут возникнуть ошибки
    • Ошибка

    • 1

      2

      3

      4

      ./configure: error: the HTTP rewrite module requires the PCRE library.

      You can either disable the module by using --without-http_rewrite_module

      option, or install the PCRE library into the system, or build the PCRE library

      statically from the source with nginx by using --with-pcre=<path> option.

      Эта проблема решается установкой libpcre++-dev:


      1

      aptitude install libpcre++-dev

    • Ошибка


    1

    2

    3

    4

    ./configure: error: SSL modules require the OpenSSL library.

    You can either do not enable the modules, or install the OpenSSL library

    into the system, or build the OpenSSL library statically from the source

    with nginx by using --with-openssl=<path> option.

    Эта проблема решается так:


    1

    aptitude install libssl-dev

  8. В случае успеха, вы увидите что-то навроде

  9. 1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    Configuration summary

      + using system PCRE library

      + using system OpenSSL library

      + md5: using OpenSSL library

      + sha1: using OpenSSL library

      + using system zlib library

     

      nginx path prefix: "/etc/nginx"

      nginx binary file: "/etc/nginx/sbin/nginx"

      nginx configuration prefix: "/etc/nginx"

      nginx configuration file: "/etc/nginx/nginx.conf"

      nginx pid file: "/var/run/nginx.pid"

      nginx error log file: "/var/log/nginx/error.log"

      nginx http access log file: "/var/log/nginx/access.log"

      nginx http client request body temporary files: "/var/cache/nginx/client_temp"

      nginx http proxy temporary files: "/var/cache/nginx/proxy_temp"

      nginx http fastcgi temporary files: "/var/cache/nginx/fastcgi_temp"

      nginx http uwsgi temporary files: "/var/cache/nginx/uwsgi_temp"

      nginx http scgi temporary files: "/var/cache/nginx/scgi_temp"

  10. Пришло время собрать бинарный файл nginx

  11. 1

    make install clean

  12. Теперь нужно проверить, собрался ли бинарник с нужным модулем.

  13. 1

    /usr/sbin/nginx -V

    В результате должны увидеть модуль на месте


    1

    2

    3

    4

    5

    nginx version: nginx/1.8.0

    built by gcc 4.9.2 (Debian 4.9.2-10)

    built with OpenSSL 1.0.1k 8 Jan 2015

    TLS SNI support enabled

    configure arguments: --prefix=/etc/nginx --sbin-path=/etc/nginx/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-mail --with-mail_ssl_module --with-file-aio --with-http_spdy_module --with-cc-opt='-g -O2 -fstack-protector-strong -Wformat -Werror=format-security' --with-ld-opt=-Wl,-z,relro --with-ipv6 --add-module=./headers-more-nginx-module-0.29

  14. Останавливаем nginx

  15. 1

    service nginx stop

  16. Сделаем бекап текущего бинарника nginx на всякий случай, чтобы откатить его назад при необходимости

  17. 1

    mv /usr/sbin/nginx /usr/sbin/nginx_back

  18. Свежесобранный бинарник nginx ставим на место старого

  19. 1

    mv /etc/nginx/sbin/nginx /usr/sbin/nginx

  20. Проверяем, что вышло в итоге, что ничего не перепутано, и нужные модули на месте

  21. 1

    nginx -V

  22. Запускаем NGINX

  23. 1

    service nginx start

  24. Подчищаем за собой


1

cd ../


1

rm -rf nginx-1.8.0


1

rm -rf /etc/nginx/sbin

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

502 Bad Gateway

Ошибка означает, что NGINX не может получить ответ от одного из сервисов на сервере. Довольно часто эта ошибка появляется, когда NGINX работает в связке с Apache, Varnish, Memcached или иным сервисом, а также обрабатывает запросы PHP-FPM.
Как правило, проблема возникает из-за отключенного сервиса (в этом случае нужно проверить состояние напарника и при необходимости перезапустить его) либо, если они находятся на разных серверах, проверить пинг между ними, так как, возможно, отсутствует связь между ними.
Также, для PHP-FPM нужно проверить права доступа к сокету.
Для этого убедитесь, что в
/etc/php-fpm.d/www.conf прописаны правильные права


1

2

3

listen = /tmp/php5-fpm.sock

listen.group = www-data

listen.owner = www-data

504 Gateway Time-out

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


1

2

3

4

5

6

7

8

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.
Здесь тоже можно увеличить время ожидания таймаута


1

2

3

4

5

6

7

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.
Для устранения ошибки в nginx.conf нужно найти строку


1

client_max_body_size 1m;

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


1

client_max_body_size 100m;

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


1

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еть) (не забываем перезагружать страницу);
  • Сторонних сервисов, например last-modified.com.

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

Для перезагрузки NGINX используйте restart или reload.
Команда в консоли:


1

service nginx reload

либо


1

/etc/init.d/nginx reload

либо


1

nginx -s reload

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

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


1

nginx -s reload

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


1

nginx -t

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

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

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

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

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


1

nginx -t && service nginx reload

или


1

nginx -t && nginx -s reload

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


1

2

3

4

5

error_page 404 = @gotomain;

 

location @gotomain {

  return 301 /;

}

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

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


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

### Устанавливаем переменную в 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;

}

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

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


1

2

3

4

5

# Прописываем маппинг для WebP, если он поддерживается браузером

map $http_accept $webp_ext {

    default "";

    "~*webp" ".webp";

}

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


1

2

3

4

5

location ~* ^.+\.(png|jpg)$ {

    expires 365d; # Включаем браузерный кеш на год для изображений

    add_header Vary Accept; # Даём заголовок, что акцептируем запрос

    try_files $uri$webp_ext $uri =404; # Пробуем сначала искать версию изображения .webp

}

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

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

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

Весьма полезный сервис, который поможет cконвертировать правила из .htaccess в NGINX. Результат, возможно, придётся донастроить вручную, но, в целом, он весьма удобен в применении.
Вот как описывают сервис сами авторы:

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

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

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

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

Результат перевода следует обязательно проверить вручную, а затем разместить в секции server {} конфигурационного файла nginx.

Замечания и предложения по улучшению ждем, как обычно, на mail@winginx.com ;)

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

Хостинг, который я рекомендую:

  • Beget - виртуальный хостинг. Отличный вариант для тех, кто не хочет отвлекаться на настройку хостинга и полностью полагается на качественный сервис. Есть полностью бесплатный тариф для новичков.
  • IHOR - VDS VPS с дата-центром в Москве - крайне низкий пинг для Рунета. Подойдёт тем, кто хочет контролировать свой сервер и не переплачивать за это. От 100 рублей в месяц. Бесплатный ISPmanager на тарифах от 600 рублей в месяц.
  • DigitalOcean - зарубежный облачный хостинг. Самый качественный сервис из существующих с аптаймом 99,9%. Для тех, кому важно качество, стабильность и скорость работы. $10 на счёт, хватает на 2 бесплатных месяца
  • Contabo - очень дешёвые VDS: 2 ядра Xeon, 4 Гб оперативки и 300 Гб SSD+HDD за 3,99 евро в месяц!

Спасибо, не интересует

Так же в этом разделе:
 
MyTetra Share v.0.52
Яндекс индекс цитирования