Предварительное исследование Nginx

Nginx
Предварительное исследование Nginx

Предварительное исследование Nginx

Nginx — это асинхронный веб-сервер, который также действует как обратный прокси-сервер, балансировщик нагрузки и кэш HTTP.

Особенности Nginx

  • Быстрее: ответ на один запрос будет быстрее, а среда с высокой степенью параллелизма будет иметь лучшую скорость ответа.
  • Высокая масштабируемость: Nginx основан на модульной конструкции, низкой связанности и имеет хорошую масштабируемость.
  • Высокая надежность: каждый рабочий процесс относительно независим, и главный процесс может быстро вызвать новый рабочий подпроцесс для предоставления услуг в случае сбоя рабочего процесса. (обратный прокси).
  • Низкое потребление памяти: в целом 10 000 неактивныхHTTP Keep-AliveСоединения потребляются только в Nginx2.5MBПамять. Nginx 伤的并发连接上限取决于内存大小。
  • Горячее развертывание: главный процесс отделен от рабочего процесса, так что Nginx поддерживает горячее развертывание, а исполняемый файл Nginx можно обновить в условиях бесперебойного обслуживания.

Функция обратного прокси Nginx

В эпоху Интернета сетевые приложения в основном относятся к структуре CS, то есть на стороне клиента и на стороне сервера. Прокси — это сервер (прокси-сервер), который добавляет слой между клиентом и сервером для определенных функций.

прямой прокси

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

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

ugPz1f.png

——Используйте изображение @ConardLi для интуитивно понятного отображения

обратный прокси

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

  • **Обратный прокси** предназначен для сервера. Обратный прокси-сервер помогает серверу принимать и пересылать запросы клиента, тем самым помогая серверу выполнять такие функции, как балансировка нагрузки.
  • обратный проксиЭто прозрачно для сервера, но не для нас.Мы не можем получить доступ к серверу напрямую через запросы.Мы должны сначала пройти через прокси-сервер, который также в определенной степени защищает безопасность контент-сервера.
  • обратный проксиПолученные клиентские запросы могут быть равномерно распределены по кластеру серверов для достижения балансировки нагрузки.При этом в Nginx есть функция проверки сердцебиения сервера.Если один сервер ненормальный, то входящий запрос прокси будет отправлен не на сервер, а на другой. не будет продолжать раздавать запросы на этот сервер, пока сервер не вернется в нормальное состояние, что в значительной степени обеспечивает стабильность работы сервиса.

When installing NGINX, it is highly recommended to use the mode installation of the source code compilation, so that the post-module is added, while the version of the configuration and program separation can be installed using the configuration and program separation due to the NGINX следовать за. Для получения подробной информации см.:Рекомендации по каталогу Nginx

Некоторые переменные Nginx

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

  • Связанный с сервером
    • $ Server_Port Номер порта сервера
    • $server_addr адрес сервера (ip-адрес)
    • $server_name имя сервера (обычно также IP-адрес)
    • $status Код состояния HTTP
  • Связанный с клиентом
    • $http_accept типы MIME, поддерживаемые браузером
    • $ Браузер Http_accept поддерживает кодирование со сжатием
    • $ Http_cache_control кэш браузера
    • $http_user_agent Идентификатор пользовательского устройства
  • Ссылки по теме
    • $ URI по запросу URI может отличаться от текущего​request_uri, через внутреннее перенаправление.
    • $request_uri Исходный URI параметра запроса клиента.
    • $request_method метод запроса
    • $args параметры запроса, то есть часть параметра после uri

Nginx - это некоторые регулярные правила сопоставления

~ чувствительное к регистру оборудовании | ~ * совпадение на случай

!~ регистронезависимое несоответствие | !~* регистронезависимое несоответствие

-d и !-d используются, чтобы определить, существует ли каталог

-f и !-f используются для определения существования файла

-e и !-e используются для определения существования файла или каталога.

-x и !-x используются для определения того, является ли файл исполняемым.

Базовая конфигурация Nginx

Базовая конфигурация Nginx (вы можете перейти к установленномуnginx.confдокумент)

events { 
	# 配置影响 Nginx 服务器与用户的网络连接
}

http # 可嵌套多个 server 配置代理,缓存,日志定义等绝大多数功能与第三方模块配置。
{
    server # 配置虚拟主机的相关参数
    { 	# location 配置请求的路由,以及页面的各种情况
        location path 
        {
            ...
        }
        location path
        {
            ...
        }
     }

    server # 一个http中可以有多个 server
    {
        ...
    }

}

разрешать междоменные

content.app.com, Пока серверserver.app.com, адрес интерфейса, данный нам/apiНа этом этапе мы начинаем с перехвата внешних междоменных запросов сервера Nginx на доступ через прокси.server.app.com.

server {
  #监听80端口
	listen 80; 
	server_name content.app.com;
	location /api {
		proxy_pass server.app.com;
	}
}

то есть мы просимcontent.app.com/apiбудет перенаправлен прокси-сервером наserver.app.com, пока мыcontent.app.comдоступ к прокси-серверуcontent.app.com, относится к доступу с одним и тем же источником, и междоменное явление отсутствует.

Коды состояния и неправильные конфигурации

server {
		# 访问私密文件时报 403 错误
		location /secret.js {
			return 403;
		}
  
  	# 指定不同状态码转到特别的文件
  	error_page 404 /404.html;
    error_page 500 501 502 503 /error.html;
  	# 此时的响应码为 400
  	error_page 404 = 400 /400.html; 
}

Примечание. Если значение = знак добавляется после ERROR_Page, ответ - это указанный код ответа, по умолчанию используется 200, а исходный код состояния ошибки не добавлен.

Настроить службу HTTPS

Чтобы настроить HTTPS, нам нужно разрешить Nginx открывать модуль http_ssl_module на этапе компиляции, мы можем использоватьnginx -Vкоманда для просмотра

Если результатTLS SNI support enabledЭто доказывает, что он был открыт.

После этого нам нужно скачать сертификат.Как правило, после загрузки и распаковки сертификата будет несколько форматов.Используется формат Nginx, т.е.crtа такжеkeyВот и все.

# 配置 HTTPS

# 配置个http的站点,用来做重定向,当然如果你不需要把 HTTP->HTTPS 可以把这个配置删了
server {
    listen       80;

    # 配置域名
    server_name www.safe.com safe.com;

    # 添加 STS, 并让所有子域支持, 开启需慎重
    add_header strict-transport-security 'max-age=31536000; includeSubDomains; preload';

    # 配置让这些 HTTP 的访问全部 301 重定向到 HTTPS 的,
    rewrite ^(.*) https://www.safe.com$1 permanent;
    # rewrite 后若为 break,即url重写后直接使用当前资源,不再执行location中其他语句,url地址栏不变。
    # rewrite 后若为 last,即url重写后,马上发起一个新的请求,再次进入server 快,完成location匹配,url地址栏不变
    # rewrite 后若为 redirect,则返回302临时重定向,地址栏url显示重定向后的,爬虫不更新url
    # rewrite 后若为 permanent,则进行301永久重定向,地址栏显示重定向后的url,爬虫更新url。
}

# 配置 HTTPS
server {
    # 配置域名
    server_name www.safe.com safe.com;

    # https默认端口
    listen 443;

    # 添加STS, 并让所有子域支持, 开启需慎重
    add_header strict-transport-security 'max-age=31536000; includeSubDomains; preload';

    # https配置
    ssl on;
    ssl_certificate /ssl/ssl.crt;
    ssl_certificate_key /ssl/ssl.key;

    # 其他按正常配置处理即可...
}

Адаптация к ПК и мобильной среде

Несмотря на то, что многие межсетевые приложения становятся все более и более адаптивными, по-прежнему существует множество веб-сайтов, на которых одновременно есть сайты для ПК и H5, поэтому также часто требуется переключать сайты в зависимости от устройства пользователя. Затем нам нужно использовать встроенные переменныеhttp_user_agentдля получения информации об устройстве пользователя, чтобы возвращать разные узлы в соответствии с устройством.

location / {
	# 移动端设备匹配
  if ($http_user_agent ~* '(Android|webOS|iPhone|iPad|BlackBerry)') {
    set $mobile_request '1';
  }
  if ($mobile_request = '1') {
    rewrite ^.+ https://mobile.com 
  }
}

Обработка изображения

ngx_http_image_filter_moduleреализовать.

    # 图片缩放处理
    # 这里约定的图片处理url格式:以 mysite-base.com/img/路径访问
    location ~* /img/(.+)$ {
        alias /Users/cc/Desktop/server/static/image/$1; #图片服务端储存地址
        set $width -; #图片宽度默认值
        set $height -; #图片高度默认值
        if ($arg_width != "") {
            set $width $arg_width;
        }
        if ($arg_height != "") {
            set $height $arg_height;
        }
        image_filter resize $width $height; #设置图片宽高
        image_filter_buffer 10M;   #设置Nginx读取图片的最大buffer。
        image_filter_interlace on; #是否开启图片图像隔行扫描
        error_page 415 = 415.png; #图片处理错误提示图,例如缩放参数不是数字
    }

Противоугонный цепной процесс

Nuggets также включили анти-личную обработку из-за использования картинок при бессмысленном хотлинкинге.Анти-личная обработка — это способ, который нам нужен для защиты сервера.

server {
  # 匹配所有图片
  location ~* \.(gif|jpg|png|bmp)$ {
    # 验证是否为没有来路,或者有来路与域名或白名单进行匹配,也可以写正则,若匹配到字段为0,否则为1
    valid_referers none blocked server_names www.reaper.com;
    # 如果验证不通过则返回403错误
    if ($invalid_referer) {
      return 403; 
    }
  }
}

Суммировать

Для настройки Nginx обучения в вашем личном блогеReaper LeeЯ изучил конфигурацию одновременно, надеясь помочь некоторым студентам, которые готовились к участию или просто начать работу с Nginx, но для постепенного интерфейса для полной стеки, изучение конфигурации сервера, похоже, стало требуемым навыком Отказ Вы также можете следовать за мнойGitHub, учитесь вместе и добивайтесь успехов вместе!

Ссылка на ссылку: