Добро пожаловать, чтобы следовать:glmapper_2018
введение
Давайте сначала посмотрим на тенденцию nginx в рейтинге веб-серверов:
Существование разумно, так зачем использовать nginx? Это зависит от того, что nginx может сделать для нас.
Прежде всего, nginx можно использовать в качестве обратного прокси [обратный прокси и прямой прокси здесь не будут объясняться, заинтересованные партнеры могут сами погуглить], например, я хочу использовать доменное имя www.glmapper1. com локально для доступа к www .taobao.com. Тогда мы можем сделать это через nginx в это время.
Кроме того, nginx может выполнять балансировку нагрузки.Что такое балансировка нагрузки? То есть приложение развертывается на разных серверах, но вводится через единое доменное имя, а nginx распределяет запрос и распределяет запрос по разным серверам для обработки, что может эффективно снизить нагрузку на один сервер.
В приведенных выше двух случаях роль сервера nginx только в качестве сервера распространения.Реальный контент может быть размещен на других серверах.Таким образом, он также может играть роль уровня безопасности по соседству, и nginx действует в качестве изоляционного слоя.
Решение междоменных проблем
Одинаковое происхождение: URL-адрес состоит из протокола, имени домена, порта и пути. Если протокол, имя домена и порт двух URL-адресов совпадают, это означает, что они имеют одно и то же происхождение.
Политика браузера в отношении одного и того же источника. Политика браузера в отношении одного и того же источника запрещает «документам» или сценариям из разных источников читать или устанавливать определенные свойства для текущего «документа». Сценарии, загруженные из одного домена, не имеют доступа к свойствам документа из другого домена.
Поскольку nginx и tomcat не могут использовать один и тот же порт, URL-адрес один и тот же, порт разный, поэтому будут междоменные проблемы.
PS:点到为止,这里本次测试没有涉及,就不妄自菲薄了!!!
Разбор файла конфигурации
Файл конфигурации в основном состоит из четырех частей:
- главная (глобальные настройки)
- сервер (конфигурация хоста)
- http (управляет всеми основными функциями обработки http nginx)
- местоположение (URL-адрес соответствует определенной настройке местоположения).
- upstream (настройки сервера балансировки нагрузки)
Далее используется файл конфигурации по умолчанию, чтобы проиллюстрировать значение определенных атрибутов файла конфигурации:
#Nginx的worker进程运行用户以及用户组
#user nobody;
#Nginx开启的进程数
worker_processes 1;
#定义全局错误日志定义类型,[debug|info|notice|warn|crit]
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#指定进程ID存储文件位置
#pid logs/nginx.pid;
#事件配置
events {
#use [ kqueue | rtsig | epoll | /dev/poll | select | poll ];
#epoll模型是Linux内核中的高性能网络I/O模型,如果在mac上面,就用kqueue模型。
use kqueue;
#每个进程可以处理的最大连接数,理论上每台nginx服务器的最大连接数为worker_processes*worker_connections。理论值:worker_rlimit_nofile/worker_processes
worker_connections 1024;
}
#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 logs/access.log main;
#开启高效传输模式
sendfile on;
#防止网络阻塞
#tcp_nopush on;
#客户端连接超时时间,单位是秒
#keepalive_timeout 0;
keepalive_timeout 65;
#开启gzip压缩输出
#gzip on;
#虚拟主机基本设置
server {
#监听的端口号
listen 80;
#访问域名
server_name localhost;
#编码格式,如果网页格式与当前配置的不同的话将会被自动转码
#charset koi8-r;
#虚拟主机访问日志定义
#access_log logs/host.access.log main;
#对URL进行匹配
location / {
#访问路径,可相对也可绝对路径
root 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 html;
}
#访问URL以.php结尾则自动转交给127.0.0.1
# 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;
#}
#禁止访问.ht页面
# 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虚拟主机定义
# 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;
# }
#}
include servers/*;
}
Экземпляр обратного прокси
Предположим, теперь мне нужно получить локальный доступ к www.baidu.com, конфигурация следующая:
server {
#监听80端口
listen 80;
server_name localhost;
# individual nginx logs for this web vhost
access_log /tmp/access.log;
error_log /tmp/error.log ;
location / {
proxy_pass http://www.baidu.com;
}
Результаты проверки:
Как видите, я открыл домашнюю страницу Baidu с помощью локального хоста в браузере...
экземпляр балансировки нагрузки
Три наиболее часто используемые стратегии загрузки в основном проверяются ниже. Конфигурация виртуального хоста:
server {
#监听80端口
listen 80;
server_name localhost;
# individual nginx logs for this web vhost
access_log /tmp/access.log;
error_log /tmp/error.log ;
location / {
#负载均衡
#轮询
#proxy_pass http://polling_strategy;
#weight权重
#proxy_pass http://weight_strategy;
#ip_hash
# proxy_pass http://ip_hash_strategy;
#fair
# proxy_pass http://fair_strategy;
#url_hash
# proxy_pass http://url_hash_strategy;
#重定向
#rewrite ^ http://localhost:8080;
}
стратегия голосования
# 1、轮询(默认)
# 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
upstream polling_strategy {
server glmapper.net:8080; # 应用服务器1
server glmapper.net:8081; # 应用服务器2
}
Результаты теста (отличить текущий доступ по номеру порта):
8081:hello
8080:hello
8081:hello
8080:hello
весовая стратегия
#2、指定权重
#指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream weight_strategy {
server glmapper.net:8080 weight=1; # 应用服务器1
server glmapper.net:8081 weight=9; # 应用服务器2
}
Результаты теста: Общее количество посещений 15. Согласно приведенной выше весовой конфигурации соотношение посещений двух машин составляет 2:13, что соответствует ожиданиям!
IP-хеш-стратегия
#3、IP绑定 ip_hash
#每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,
#可以解决session的问题;在不考虑引入分布式session的情况下,
#原生HttpSession只对当前servlet容器的上下文环境有效
upstream ip_hash_strategy {
ip_hash;
server glmapper.net:8080; # 应用服务器1
server glmapper.net:8081; # 应用服务器2
}
Алгоритм iphash: ip — это базовая десятичная система с точками, и первые три конца ip добавляются в качестве параметров хеш-функции. Цель этого состоит в том, чтобы гарантировать, что первые три пользователя с одинаковым IP-адресом будут назначены одному и тому же внутреннему серверу после вычисления хэша. Рассмотрение автора крайне желательно, поэтому одинаковые первые три ip-адреса обычно означают, что они из одной локальной сети или соседней области, а использование одного и того же бэкэнд-сервиса делает nginx в определенной степени более согласованным.
Почему вы хотите объяснить iphash, потому что яма была заминирована; и брат-свинья использовал 5 машин для проверки этого теста стратегии, и все 5 машин были в одной локальной сети [192.168.3.X], во время теста он Было обнаружено, что машины 5 каждый раз направлялись на один и тот же сервер Сначала я подумал, что это проблема конфигурации, но после расследования эта возможность была исключена. Наконец, учитывая, что ip того же сегмента сети может обрабатываться особым образом, предположение подтверждается после проверки.
Другие стратегии балансировки нагрузки
Из-за необходимости установки сторонних плагинов здесь время ограничено и проверяться не будет, просто знайте!
#4、fair(第三方)
#按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream fair_strategy {
server glmapper.net:8080; # 应用服务器1
server glmapper.net:8081; # 应用服务器2
fair;
}
#5、url_hash(第三方)
#按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,
#后端服务器为缓存时比较有效。
upstream url_hash_strategy {
server glmapper.net:8080; # 应用服务器1
server glmapper.net:8081; # 应用服务器2
hash $request_uri;
hash_method crc32;
}
перенаправить переписать
location / {
#重定向
#rewrite ^ http://localhost:8080;
}
Идея проверки: использовать для локального доступа порт localhost:80.Согласно конфигурации nginx, если перенаправление не сработает, оно в итоге останется на текущем пути localhost:80, а адрес адресной строки в браузере не будет изменить, если это вступит в силу Адрес адресной строки становится localhost:8080;
Проверено и оправдало ожидания!
Суммировать
В этой статье сначала кратко объясняется роль и базовая конфигурация nginx, а затем тестируются результаты отзывов конкретных приложений о различных алгоритмах балансировки нагрузки на примерах балансировки нагрузки. Помогите себе глубже понять некоторые детали конфигурации на сервере nginx. Спасибо Лю Ми за предоставленную программу helloworld [скаффолдинг на основе Springboot, вы можете связаться с ним, чтобы получить его, если вам это нужно; и Лю Ми - мужчина...😜]
Ссылаться на
- http://nginx.org/
- https://www.nginx.com/
- http://www.sohu.com/a/161411719_324809