Введение в nginx
1.nginx — это высокопроизводительный веб-сервер и обратный прокси-сервер, который также действует как прокси-сервер электронной почты.
2. В случае высокого параллелизма соединений nginx является хорошей альтернативой службе Apache, которая может поддерживать ответы до 50 000 одновременных соединений.
Прямой прокси и обратный прокси
1. Обратный прокси-сервер относится к прокси-серверу, который принимает запросы на подключение в Интернете, затем перенаправляет запрос на сервер во внутренней сети и возвращает результаты, полученные с сервера, клиенту, запрашивающему подключение в Интернете. прокси Сервер ведет себя как обратный прокси-сервер для внешнего мира.
2. Прямой прокси означает, что пользователь не может получить доступ к веб-сайту, но может получить доступ к прокси-серверу, а прокси-сервер может получить доступ к веб-сайту. Затем пользователь получает доступ к веб-сайту, обращаясь к прокси-серверу, и прокси-сервер возвращает пользователю ответную информацию.
3. IP-адрес и порт, к которым обращаются пользователи в обратном прокси-сервере, принадлежат серверу nginx, а базовый сервер, который предоставляет услуги, неизвестен.Базовый сервер открыт для внешнего мира через сервер nginx во внутренней сети, и nginx действует как средний слой. В прямом прокси-сервере пользователь знает информацию о доменном имени целевого сервера, но к нему нельзя получить доступ из-за сетевых ограничений, таких как наиболее распространенный доступ к внешней сети.
установка и запуск nginx
У Nginx есть версия для Windows и версия для Linux.Как правило, сервер nginx развертывается в Linux для требований проекта.
ссылка на скачивание
Загрузите сжатый пакет для версии 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)${
 root/html; #访问静态资源的路径,静态资源部署在nginx安装目录下,跟访问html/index.html一个道理。
}
2. Каталог хранения на основе запрошенных ресурсов
location ~ .*/(js|css|img|imgags)${
 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