Подробное объяснение внешнего интерфейса Nginx

Nginx
Подробное объяснение внешнего интерфейса Nginx

Введение в nginx

1.nginx — это высокопроизводительный веб-сервер и обратный прокси-сервер, который также действует как прокси-сервер электронной почты.
2. В случае высокого параллелизма соединений nginx является хорошей альтернативой службе Apache, которая может поддерживать ответы до 50 000 одновременных соединений.

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

1. Обратный прокси-сервер относится к прокси-серверу, который принимает запросы на подключение в Интернете, затем перенаправляет запрос на сервер во внутренней сети и возвращает результаты, полученные с сервера, клиенту, запрашивающему подключение в Интернете. прокси Сервер ведет себя как обратный прокси-сервер для внешнего мира.
2. Прямой прокси означает, что пользователь не может получить доступ к веб-сайту, но может получить доступ к прокси-серверу, а прокси-сервер может получить доступ к веб-сайту. Затем пользователь получает доступ к веб-сайту, обращаясь к прокси-серверу, и прокси-сервер возвращает пользователю ответную информацию.
3. IP-адрес и порт, к которым обращаются пользователи в обратном прокси-сервере, принадлежат серверу nginx, а базовый сервер, который предоставляет услуги, неизвестен.Базовый сервер открыт для внешнего мира через сервер nginx во внутренней сети, и nginx действует как средний слой. В прямом прокси-сервере пользователь знает информацию о доменном имени целевого сервера, но к нему нельзя получить доступ из-за сетевых ограничений, таких как наиболее распространенный доступ к внешней сети.

установка и запуск nginx

У Nginx есть версия для Windows и версия для Linux.Как правило, сервер nginx развертывается в Linux для требований проекта.

ссылка на скачивание

nginx.org/ru/download…

Загрузите сжатый пакет для версии Windows и разархивируйте его.
1. Путь к файлу должен быть на английском языке, иначе запуск невозможен.
2. Проверьте занятость порта, сервер nginx по умолчанию запускает порт 80. в командной строке

  • netstat -an   отображает список всех открытых портов на компьютере
  • netstat -ano   отображает список всех занятых портов
  • netstat -ano | findstr "80"   показывает подробную информацию о занятости порта 80
  • список задач | findstr "80"     Запрос, какое приложение занимает порт

Netstat — это программа, которая получает доступ к статусу сетевого подключения и соответствующей информации в ядре, может предоставлять отчеты о TCP-соединениях, мониторинге TCP и UDP и управлении памятью процесса.

Запущено успешно

  • Способ запуска 1. Дважды щелкните файл nginx.exe.
  • Режим запуска 2: запуск nginx
  • Метод закрытия 1: завершение процесса (два процесса)
  • Режим выключения 2: nginx -s stop

конфигурационный файл nginx

Основной файл конфигурации nginx.conf nginx в основном состоит из 3 частей.

  • базовая конфигурация

#user  nobody; #配置worker进程运行用户
worker_processes  1; #配置工作进程数目,根据硬件调整,通常等于CPU数量或者2倍于CPU数量

#error_log  logs/error.log; #配置全局错误日志及类型 [debug|info|notice|warn|error|crit(致命错误)]默认error
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid; #配置进程pid文件

  • конфигурация событий
#配置工作模式和连接数
events {
    # use epoll; #事件处理模型优化
    worker_connections  1024; #配置每个worker进程连接数上限,nginx支持的总连接数等于worker_connections*worker_processes
    # 我的本双核四线程,多任务运行弱,CPU主频2.4GHz,运行缓慢
}
  • http-конфигурация, базовая конфигурация и конфигурация с несколькими серверами
http {
    include       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日志及存放路径,并使用上面定义的main日志格式
    #access_log  logs/access.log  main;

    sendfile        on; #开启高效文件传输模式
    #tcp_nopush     on; #防止网络阻塞

    #keepalive_timeout  0;
    keepalive_timeout  65; #长连接超时时间,单位是秒
    #gzip  on; #开启gzip压缩输出

    #可以配置多个server
    server {
        listen       80; #配置监听端口
        server_name  localhost; #配置服务名

        #charset koi8-r; #配置字符集(俄罗斯字符集)      
        #access_log  logs/host.access.log  main;

        #默认的匹配斜杠/的请求,当访问路径中有/,会被该localtion匹配到并进行处理
        #nginx根目录 /html/index.html
        location / {
            root   html; #root根目录,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; #配置50x错误页面 html/50x.html
        #精确匹配
        location = /50x.html {
            root   html;
        }

        #PHP脚本请求全部转发道到Apache处理
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        #PHP脚本请求全部转发道到FastCGI处理
        # 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;
        #}
        
        # 禁止访问.htaccess文件-通常是禁止外网访问的文件
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }

    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

    #配置https服务,安全的网络传输协议,加密传输,端口443
    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem; #证书
    #    ssl_certificate_key  cert.key; #秘钥

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

Основное применение nginx

1. Статический сайт

Nginx — это http-веб-сервер, который может возвращать статические файлы (html, картинки и т. д.) на сервере браузеру-клиенту по протоколу http, если местоположение не настроено, nginx ищет файл index.html в корневом каталоге html по умолчанию.

    server {
        listen       8080;
        server_name  localhost;
        location / {
	    root   wangyi/static; #root= ip+端口 
            index  index.html index.htm;
        }
        #访问:localhost:8080,或如下配置
         location /static {  
	    root   wangyi;  #注意分号
            index  index.html index.htm;
        }
        #访问:localhost:8080或localhost:8080/static
        .......
    }

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

Сервер веб-сайта состоит из нескольких серверов, образующих кластер для предоставления внешних услуг.Когда пользователь вводит доменное имя для доступа, балансировка нагрузки отвечает за распределение пользовательских запросов на разные серверы в кластере, тем самым улучшая возможности параллельной обработки. Являясь единой записью для доступа, nginx распределяет запросы и обеспечивает балансировку нагрузки. Реализации балансировки нагрузки включают аппаратную балансировку нагрузки и программную балансировку нагрузки.

балансировка нагрузки nginx

Nginx реализует балансировку нагрузки путем настройки в файле конфигурации nginx.conf 1. Сначала настройте в модуле http

upstream network1{
    server 127.0.0.1:3000 weight=3; #权重
    server 127.0.0.1:5000 weight=1; 
}

Вес представляет собой вес, который используется при неравномерной производительности внутреннего сервера.Коэффициент доступа примерно равен коэффициенту веса.Чем больше вес, тем больше вероятность обращения. Upstream — очень важный модуль для настройки балансировки нагрузки между nginx и бэкенд-сервером, он также может проверять состояние бэкенд-сервера, в случае сбоя одного из бэкенд-серверов фронтенд-запрос не будет перенаправлен на неисправную машину. 2. Затем настроить его в серверном модуле

localtion /webname{
    proxy_pass http://network1; 
}

Параметр 'http://' является фиксированным, а строка network1 должна совпадать со строкой после upstream. Прокси-сервер перенаправляется в сеть1, затем сопоставляется с восходящим потоком, а затем сопоставляется с сервером в восходящем направлении.

Node.js создает http-сервер для балансировки нагрузки

После создания службы node http и настройки nginx узел может получить доступ к службе узла в качестве прокси-сервера.

upstream network1 {
        server 127.0.0.1:3000 weight=3;
	server 127.0.0.1:5000 weight=1;
        server 127.0.0.1:6000 weight=1;
    }

    server {
        listen       8080;
        server_name  localhost;

        location / {
            # 访问不到服务器,做详细配置。
	    #proxy_redirect off; 
            #proxy_set_header X-Real-IP $remote_addr; 
            #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
            #proxy_set_header X-Forwarded-Proto $scheme; 
            #proxy_set_header Host $http_host; 
            #proxy_set_header X-NginX-Proxy true; 
            #proxy_set_header Connection ""; 
            #proxy_http_version 1.1; 
           proxy_pass http://network1;
        }
const http = require('http')
const fs = require('fs')
const url = require('url')
http
    .createServer((req, res) => {
        if(req.url == '/favicon.ico'){
            res.writeHead(200);
            res.end()   
            return;
        }
        res.writeHead(200);
        fs.createReadStream(__dirname + '/index.html') #不同的页面内容查看效果
        .pipe(res);
    })
    .listen(5000)  #3000、6000。。。
------------------------------------------
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>node</title>
   <link rel="stylesheet" href="">
</head>
<body>
    <div>第 1 个node服务器</div>
    <!-- <div>第 2 个node服务器</div> -->	
    <!-- <div>第 3 个node服务器</div> -->				
</body>
</html>

nginx может успешно обращаться к серверу, а коэффициент доступа примерно равен коэффициенту веса.

Общие стратегии балансировки нагрузки для nginx
  • 1. Опрос (по умолчанию)

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

upstream network1 {
        server 127.0.0.1:3000;
	    server 127.0.0.1:5000;
        server 127.0.0.1:6000;
    }
  • 2. Вес

Каждый запрос распределяется по разным back-end серверам в определенной пропорции.Применяется в случае неравномерной производительности back-end серверов.Коэффициент обращений примерно равен соотношению весов.Чем больше вес, тем больше вероятность доступа.

upstream network1 {
        server 127.0.0.1:3000 weight=3;
	    server 127.0.0.1:5000 weight=1;
        server 127.0.0.1:6000 weight=1;
    }
  • 3.ip_hash

ip_hash также называется привязкой ip.Каждый запрос распределяется в соответствии с хеш-значением ip-адреса доступа, так что каждый клиент доступа будет иметь фиксированный доступ к внутреннему серверу, что может решить проблему потери сеанса и входа в систему с общим паролем учетной записи. Хеш-функция hash("192.168.0.164")%2 = 0/1, если ip остается неизменным, сервер, к которому осуществляется доступ, остается неизменным.

upstream network1 {
       ip_hash;
       server 127.0.0.1:3000;
       server 127.0.0.1:5000;
       server 127.0.0.1:6000;
   }

При использовании ip_hash он всегда будет обращаться к первому серверу через порт 3000.

  • наименее подключенный Веб-запросы перенаправляются на сервер с наименьшим количеством подключений.
 upstream network1 {
        least_conn;
        server 127.0.0.1:3000;
	    server 127.0.0.1:5000;
        server 127.0.0.1:6000;
    }
Другие конфигурации балансировки нагрузки
upstream network1 {
        least_conn;
        server 127.0.0.1:3000;
	server 127.0.0.1:5000 backup; #备份 当所有非backup机器宕机的时候才能请求backup机器。
    }
upstream network1 {
        least_conn;
        server 127.0.0.1:3000;
	server 127.0.0.1:5000 down;#当前机器是down状态,不参与负载均衡。
    } 

3. Статический прокси

Измените доступ ко всем статическим ресурсам для доступа к nginx вместо фонового сервера. nginx лучше обрабатывает статические ресурсы, обеспечивая лучшую производительность и более высокую эффективность. В практических приложениях статические ресурсы html, css, js и картинки передаются в nginx для обработки. Nginx реализует статический прокси и добавляет расположение статических ресурсов в файл конфигурации nginx.conf.
1. На основе суффикса запрашиваемого ресурса

location ~ .*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)${
    &emsp;root/html; #访问静态资源的路径,静态资源部署在nginx安装目录下,跟访问html/index.html一个道理。
}

2. Каталог хранения на основе запрошенных ресурсов

location ~ .*/(js|css|img|imgags)${
    &emsp;root/opt/static
}

Каталог установки Linux: /user/local/nginx, когда Linux развернут как сервер nginx, запросите каталог, в котором хранятся статические ресурсы в Linux, например /opt/static

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

Балансировка нагрузки и статический прокси nginx объединены для реализации разделения динамического и статического.Сервер фокусируется на динамических ресурсах, а nginx фокусируется на статических ресурсах.

5. Веб-хостинг

Виртуальный хостинг — это разделение физического сервера на несколько «виртуальных» серверов, чтобы один из наших физических серверов можно было использовать как несколько серверов, чтобы можно было настроить несколько веб-сайтов. В Nginx метка сервера — это виртуальный хост.Вы можете настроить несколько виртуальных хостов и настроить несколько серверов.

виртуальный хостинг на базе портов

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

 server {
        listen       8080; #9090。。。
        server_name  localhost;
        location / {
		  proxy_pass http://network1;
        }
 }
 upstream network1 {
        server 127.0.0.1:3000;
    }
 upstream network2 {
        server 127.0.0.1:5000;
    }
Веб-хостинг на основе домена

Доступ к виртуальному хосту на основе доменного имени осуществляется в форме доменного имени, что предполагает знание разрешения доменного имени DNS.Мы можем напрямую указать порт для доменного имени в файле hosts в Windows.Windows C:\Windows\ System32\drivers\etc Существует файл хоста, если здесь указан ip-адрес, соответствующий доменному имени, браузер сначала будет использовать этот ip-адрес.

 server {
        listen       8080;
        server_name  www.maanshan.com
        # server_name  www.laioyang.com
        location / {
		  proxy_pass http://network1;
          #proxy_pass http://network2;
        }
 }
upstream network1 {
        server 127.0.0.1:3000;
    }
 upstream network2 {
        server 127.0.0.1:5000;
    }
экземпляр виртуального хоста

www.meituan.com

  • www.liaoyang.meituan.com
  • www.maanshan.meituan.com