Подробный nginx — подробная инструкция по настройке

задняя часть сервер Nginx

Эта статья представляет собой исследовательскую заметку, обобщенную после просмотра видеоролика «Приступая к работе с Nginx».

1. Базовая конфигурация сервера

сервер удаленных подключений

ssh 用户名@公网ip

Имя пользователя по умолчанию — root, если общедоступный IP-адрес — a.b.c.d, имя ссылки —

ssh root@a.b.c.d

Скачайте и установите базовую библиотеку

yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake
yum -y install wget httpd-tools vim

закрыть iptables

Посмотреть правила iptables

iptables -L
或
iptables -t nat -L

отключить правила iptables

iptables -F
或
iptables -t nat -F

Выключите SELinux

Проверьте, открыт ли он

getenforce

закрытие

setenforce 0

2. Введение и установка Nginx

Nginx — это высокопроизводительное и надежное ПО промежуточного слоя HTTP и прокси-сервис с открытым исходным кодом.

Установите Nginx

Откройте официальный сайтNginx.org/En/Linux_Afraid…

To set up the yum repository for RHEL/CentOS, create the file named /etc/yum.repos.d/nginx.repo with the following contents:

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/
gpgcheck=0
enabled=1

Заменять "OS"с участием"rhel" или "centos", в зависимости от используемого дистрибутива, и "OSRELEASE"с участием"6" или "7», для версий 6.x или 7.x соответственно.

3. Каталог установки и описание конфигурации

3.1 Объяснение каталога установки

Посмотреть все каталоги установки nginx

rpm -ql nginx

Затем получите следующую конфигурацию

[root@ ~]# rpm -ql nginx

nginx日志轮转,用于logrotate服务的日志切割
/etc/logrotate.d/nginx

nginx主配置文件
/etc/nginx/nginx.conf
/etc/nginx
/etc/nginx/conf.d
/etc/nginx/conf.d/default.conf

cgi配置相关,fastcgi配置
/etc/nginx/fastcgi_params
/etc/nginx/scgi_params
/etc/nginx/uwsgi_params

编码转换映射转化文件
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/win-utf

设置http协议的 Content-Type 与扩展名对应关系
/etc/nginx/mime.types


用于配置出系统守护进程管理器管理方式
/etc/sysconfig/nginx
/etc/sysconfig/nginx-debug
/usr/lib/systemd/system/nginx-debug.service
/usr/lib/systemd/system/nginx.service

nginx模块目录
/etc/nginx/modules
/usr/lib64/nginx/modules


/usr/lib64/nginx

/usr/libexec/initscripts/legacy-actions/nginx
/usr/libexec/initscripts/legacy-actions/nginx/check-reload
/usr/libexec/initscripts/legacy-actions/nginx/upgrade

nginx服务的启动管理的终端命令
/usr/sbin/nginx
/usr/sbin/nginx-debug

nginx的手册和帮助文件
/usr/share/doc/nginx-1.14.0
/usr/share/doc/nginx-1.14.0/COPYRIGHT
/usr/share/man/man8/nginx.8.gz


/usr/share/nginx
/usr/share/nginx/html
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/index.html

nginx 的缓存目录
/var/cache/nginx

nginx日志目录
/var/log/nginx

3.2 Параметры установки и компиляции

Заказnginx -VПосмотреть все параметры компиляции

3.3 Синтаксис конфигурации Nginx по умолчанию

параметр инструкция
user Установите системного пользователя службы nginx
worker_processes Количество рабочих процессов (обычно такое же, как количество ядер сервера)
rror_log журнал ошибок nginx
pid pid при запуске службы nginx
events -> worker_connections Максимальное количество подключений, разрешенных для каждого процесса
events -> use количество рабочих процессов

Конфигурационный файл по умолчанию для nginx

Путь файла/etc/nginx/conf.d/default.conf

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

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

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #

    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

можешь идти/usr/share/nginx/html/index.htmlИзмените страницу отображения по умолчанию, вы также можете перейти к/usr/share/nginx/html/50x.htmlИзмените страницу ошибки.

Перезапустите nginx после модификации

systemctl reload nginx.service
或
systemctl restart nginx.service

Проверьте конфигурацию nginx, успешный результат указывает на успех

nginx -t -c /etc/nginx/nginx.conf

перезагрузить конфигурацию

nginx -s reload -c /etc/nginx/nginx.conf

В-четвертых, распространенная промежуточная архитектура Nginx.

  1. Статический ресурс WEB-сервис
  2. Прокси-сервис
  3. Планировщик балансировки нагрузки SLB
  4. динамический кеш

4.1 Статический ресурс WEB-сервис

Синтаксис конфигурации — чтение файла

Syntax: sendfile on|off;
Default: sendfile off;
Context: http,server,location,if in location

Цитата: --with-file-aio Асинхронное чтение файлов

Синтаксис конфигурации — tcp_nopush

Syntax: tcp_nopush on|off;
Default: tcp_nopush off;
Context: http,server,location

Синтаксис конфигурации — tcp_nodelay

Syntax: tcp_nodelay on|off;
Default: tcp_nodelay on;
Context: http,server,location

Синтаксис конфигурации — сжатие

Syntax: gzip_comp_level level;
Default: gzip_comp_level 1;
Context: http,server,location
Syntax: gzip_http_version 1.0|1.1;
Default: gzip_http_version 1.1;
Context: http,server,location

Расширение модуля сжатия Nginx

预读 gzip 功能
http_gzip_static_module

应用支持 gunzip 的压缩方式
http_gunzip_module

Настройки кеша браузера

Синтаксис конфигурации - истекает

Добавить заголовки Cache-Control, Expires

Syntax:expires [modified] time;
		expires epoch | max | off
Default: expires off;
Context: http, server, location, if in location

перекрестный домен

*Указывает, что всем веб-сайтам разрешен междоменный доступ. Из соображений безопасности можно задать только обязательные URL-адреса.

location ~ .*\.(htm|html)$ {
    add_header Access-Control-Allow-Origin *;
    add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
    root /opt/app/code
}

На основе модуля настройки защиты от пиявок http_refer

Syntax: valid_referers none | blocked | server_names | string...;
Default: -
Context: server, location,

4.2 Прокси-сервис

Разница между прямым прокси-сервером и обратным прокси-сервером заключается в том, что объекты прокси-сервера различны.

  • Объектом прямого прокси-прокси является клиент

  • Объектом обратного прокси-сервера является сервер

синтаксис конфигурации

Syntax: proxy_pass URL
Default: -
Context: location,if in location,limit_except

URL-адреса обычно представляют собой следующие три

http://localhost:8080/uri/
https://192.168.1.1:8000/uri/
http://unix:/tmp/backend.socket:/uri/;

4.3 Балансировка нагрузки

Модуль HttpIndex

Этот модуль обеспечивает простой способ балансировки нагрузки внутренних серверов между опросом и IP-адресом клиента.

Пример конфигурации:

resolver 10.0.0.1;

upstream dynamic {
    zone upstream_dynamic 64k;
    
    hash $request_uri;  #按照url的hash值来分配,同一个url分配到同一个服务器

    server backend1.example.com      weight=5;
    server backend2.example.com:8080 fail_timeout=5s slow_start=30s;
    server 192.0.2.1                 max_fails=3;
    server backend3.example.com      resolve;
    server backend4.example.com      service=http resolve;

    server backup1.example.com:8080  backup;
    server backup2.example.com:8080  backup;
}

server {
    location / {
        proxy_pass http://dynamic;
        health_check;
    }
}

объяснение состояния

настроить инструкция
down Текущий сервер временно не участвует в балансировке нагрузки
backup Зарезервированный резервный сервер
max_fails Допустимое количество неудачных запросов
fail_timeout Время, в течение которого служба приостанавливается после сбоев max_fails.
max_conns Ограничьте максимальное количество полученных подключений

Алгоритм планирования

настроить инструкция
голосование Распространяется на непрерывно работающие внутренние серверы один за другим в хронологическом порядке.
взвешенная круговая система Чем больше значение веса, тем выше присваиваемая вероятность доступа.
ip_hash Каждый запрос распределяется в соответствии с результатом хэширования IP-адреса доступа, поэтому доступ к внутреннему серверу осуществляется с одного и того же IP-адреса.
url_hash Распределяйте запросы в соответствии с результатом хеширования URL-адреса, к которому осуществляется доступ, чтобы каждый URL-адрес был направлен на один и тот же внутренний сервер.
least_conn Минимальное количество подключений, в зависимости от того, какая машина имеет меньшее количество подключений, будет распределена
значение ключа хеширования пользовательский ключ хэша

4.4 Кэш

Классификация типов кеша: клиентский кеш, прокси-кэш, серверный кеш

proxy_cache

Syntax:	proxy_cache zone | off;
Default:	
proxy_cache off;
Context:	http, server, location

proxy_cache_path

Syntax:	proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
Default:	—
Context:	http

пример

proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=cache_zone:10m max_size=10g inactive=60m use_temp_path=off;

map $request_method $purge_method {
    PURGE   1;
    default 0;
}

server {
    ...
    location / {
        proxy_pass http://backend;
        proxy_cache cache_zone;
        proxy_cache_key $uri;
        proxy_cache_purge $purge_method;
        # 当分配的服务器出现50X 错误时分配另一台服务器
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504
    }
}

Пять, глубокое обучение Nginx

5.1 Динамическое и статическое разделение

upstream java_api{
    server 127.0.0.1:8080;
}
server {
    ...
    #匹配到jsp结尾的请求去请求服务器
    location ~ \.jsp$ {
        proxy_pass http://java_api;
        index index.html index.htm;
    }
    
    #匹配到图片资源返回本地的内容
    location ~ \.(jpg|png|gif)$ {
        expires 1h;
        gzip on;
    }
}

5.2 Правила перезаписи Nginx

Роль: реализация перезаписи и перенаправления URL

используемые сцены:

  • Переход к URL-адресу, поддержка разработки и дизайна

    Переход на страницу, поддержка совместимости, эффект отображения и т. д.

  • SEO-оптимизация

  • поддерживать. Фоновое обслуживание, переадресация трафика и т. д.

  • Безопасность

грамматика

Syntax:	rewrite regex replacement [flag];
Default:	—
Context:	server, location, if

If the specified regular expression matches a request URI, URI is changed as specified in the *replacement* string. The rewriteдирективы выполняются последовательно в порядке их появления в конфигурационном файле.Возможно прекратить дальнейшую обработку директив с помощью флагов.Если строка замены начинается с «http://", "https://", или "$scheme», обработка останавливается, и перенаправление возвращается клиенту.

An optional *flag* parameter can be one of:

  • last

    Остановить обнаружение перезаписи

    stops processing the current set of ngx_http_rewrite_module directives and starts a search for a new location matching the changed URI;

  • break

    Остановить обнаружение перезаписи

    stops processing the current set of ngx_http_rewrite_module directives as with the break directive;

  • redirect

    Вернитесь к временной переадресации 302, в адресной строке отобразится адрес перенаправления.

    возвращает временное перенаправление с кодом 302; используется, если строка замены не начинается с «http://", "https://", или "$scheme";

  • permanent

    Возврат 302 постоянного перенаправления, в адресной строке будет отображаться адрес перенаправления

    returns a permanent redirect with the 301 code.

The full redirect URL is formed according to the request scheme ($scheme) and theserver_name_in_redirect and port_in_redirect directives.

Example:

server {
    ...
    rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;
    rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra  last;
    return  403;
    ...
}

Но если эти директивы помещены внутри «/download/расположение,last flag should be replaced bybreak, or otherwise nginx will make 10 cycles and return the 500 error:

location /download/ {
    rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break;
    rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra  break;
    return  403;
}

If a *replacement* string includes the new request arguments, the previous request arguments are appended after them. If this is undesired, putting a question mark at the end of a replacement string avoids having them appended, for example:

rewrite ^/users/(.*)$ /show?user=$1? last;

Если регулярное выражение включает в себя «}" или ";”, все выражения должны быть заключены в одинарные или двойные кавычки.

5.3 Проверка безопасности secure_link

Указывает и позволяет проверять подлинность запрошенных ссылок и защищать ресурсы от несанкционированного доступа.

Ограничить срок действия ссылки

Syntax:	secure_link expression;
Default:	—
Context:	http, server, location

Syntax:	secure_link_md5 expression;
Default:	—
Context:	http, server, location

Example:

location /s/ {
    secure_link $arg_md5,$arg_expires;
    secure_link_md5 "$secure_link_expires$uri$remote_addr secret";

    if ($secure_link = "") {
        return 403;
    }

    if ($secure_link = "0") {
        return 410;
    }

    ...
}

5.3 модуль geoip_module

Сопоставление двоичного файла MaxMind GeoIP на основе IP-адреса, чтение информации о местоположении IP

Установить:yum install nginx-module-geoip

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

  • Различие между внутренними и иностранными правилами доступа HTTP
  • Различать местные города и регионы, чтобы создавать правила доступа HTTP

5.4 Настройка HTTPS

server {
    listen              443 ssl;
    server_name         www.example.com;
    ssl_certificate     www.example.com.crt;
    ssl_certificate_key www.example.com.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    ...
}

Оптимизация HTTPS-сервиса

  • Активировать постоянное соединение
  • установить кеш сеанса ssl
server{
    listen 		 443;
    server_name  116.62.103.228 jeson.t.imooc.io;
    keepalive_timeout  100;
    
    ssl on;
    ssl_session_cache  shared:SSL:10m;
    ssl_session_timeout  10m;
    
    ssl_certificate     www.example.com.crt;
    ssl_certificate_key www.example.com.key;
    
    index index.html index.htm;
    location / {
        root /opt/app/code;
    }
}

5.5 Разработка Nginx и Lua

Lua — это лаконичный, легкий, расширяемый язык сценариев.

Преимущества Nginx + Lua: полное сочетание преимуществ одновременной обработки epoll Nginx и легкости Lua для реализации простых функций и сценариев с высокой степенью параллелизма.

Установить

yum install lua

Есть два способа запустить lua: командная строка и скрипт.

  • режим командной строки

    在命令行输入 lua 开启命令行交互模式
    
  • режим сценария

    написатьtest.luaфайл, выполнитьlua test.luaбегать

Примечания

-- 行注释
--[[
    块注释
--]]

Шесть, общие проблемы Nginx

Приоритет нескольких server_names

Если несколько файлов настроены с одним и тем же server_name , загрузите конфигурацию файла, который читается первым, в соответствии с именем файла.

приоритет сопоставления местоположения

=  进行普通字符精确匹配,也就是完全匹配
^~ 表示普通字符匹配,使用前缀匹配
~ \~*  表示执行一个正则匹配()

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

Использование try_files

Проверить наличие файлов по порядку

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

Семь, оптимизация производительности Nginx

7.1 Дескрипторы файлов

Дескриптор файла: linux\Unix все является файлом, а дескриптор файла является индексом

Метод настройки: глобальная модификация системы, локальная модификация пользователя, локальная модификация процесса

Способ модификации:

Глобальная модификация системы и модификация пользователя

vim /etc/security/limits.conf

добавьте следующий код

# 给root用户设置
root soft nofile 10000
root hard nofile 10000
# 给所有用户全局设置
*    soft nofile 10000
*    hard nofile 10000

soft не является обязательным, будет напоминаться больше установленного значения, но не принудительно; hard будет принудительно

Модификация для процесса

vim /etc/nginx/nginx.conf

Добавьте следующий код

worker_rlimit_nofile 20000

7.2 Привязка ЦП

Просмотр количества процессоров на текущем сервере

cat /proc/cpuinfo | grep "physical id"|sort|uniq|wc -l

Проверьте количество ядер процессора

cat /proc/cpuinfo | grep "cpu cores"|uniq

worker_processes = количество процессоров * количество ядер процессора

Если есть 2 процессора по 8 ядер каждый, тоworker_processesдолжно быть 16

Откройте файл конфигурации nginx.vim /etc/nginx/nginx.conf

worker_processes  16;
worker_cpu_affinity  auto;

Затем обновите конфигурацию nginx.nginx -s reload -c /etc/nginx/nginx.conf

7.3 Общая конфигурация Nginx

user  nginx;
worker_processes  1;
worker_cpu_affinity auto;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

worker_rlimit_nofile 10000;

events {
    use epoll;
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    charset utf-8;

    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;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    gzip  on;
    gzip_disable  "MSIE [1-6]\.";
    gzip_http_version 1.1;

    include /etc/nginx/conf.d/*.conf;
}

8. Безопасность на основе архитектуры Nginx

8.1 Распространенное злонамеренное поведение и превентивные меры

Распространенное вредоносное поведение: поведение сканера и вредоносное сканирование, кража ресурсов.

Общие профилактические меры:

Базовая функция защиты от пиявок: цель состоит в том, чтобы предотвратить легкое сканирование данных веб-сайта злоумышленниками.

secure_link_module: улучшите безопасность данных, добавьте проверку шифрования и аннулирование данных, подходит для основных важных данных.

access_module: Обеспечить контроль IP для данных в фоновом режиме и некоторых пользовательских сервисов.

8.2 Распространенные методы атаки

Вброс паролей в фоновом режиме

Угадав поле пароля, попробуйте непрерывно войти в фоновую систему, чтобы получить фоновый пароль для входа.

Предупредительные меры:

  • Сложность пароля для входа в фоновом режиме
  • access_module обеспечивает контроль IP для фона
  • Механизм раннего предупреждения

Уязвимость при загрузке файлов

location ^~ /upload{
    root /opt/app/images;
    if($requst_filename ~*(.*)\.php){
        return 403;
    }
}

SQL-инъекция

Используйте нефильтрованный/непроверенный пользовательский ввод, чтобы заставить приложения запускать код SQL, который они не должны запускать.

Реализация межсетевого экрана Nginx + Lua:GitHub.com/love shell/вы…

Выше приведено полное содержание заметок об исследовании Nginx.


Автор организует для написания интересный проект с открытым исходным кодомcoderiver, стремится создать полноплатформенный бутик-проект с открытым исходным кодом.

coderiverКитайское название Hema — это платформа, на которой программисты и дизайнеры могут совместно работать над проектами. Независимо от того, являетесь ли вы разработчиком интерфейса, бэкенда или мобильного приложения, дизайнером или менеджером по продукту, вы можете публиковать проекты на платформе и сотрудничать с партнерами-единомышленниками для завершения проектов.

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

Планируется, что это будет полноплатформенный проект с полным стеком, включая ПК-сторону (Vue, React), мобильную H5 (Vue, React), гибридную разработку ReactNative, родной Android, апплет WeChat, Angular, Node, Flutter и бэкэнд Java. , Добро пожаловать, чтобы обратить внимание.

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

адрес проекта:GitHub.com/cache Cats/ из…

Ваша поддержка - самая большая движущая сила для меня, чтобы двигаться вперед, добро пожаловать, чтобы поставить лайк, добро пожаловать, чтобы отправить маленькие звездочки ✨ ~