Nginx — это легкий HTTP-сервер, использующий управляемую событиями асинхронную неблокирующую структуру обработки, что обеспечивает превосходную производительность ввода-вывода. Мы используем Nginx в повседневной разработке в основном в следующих сценариях:
- Nginx в качестве http-сервера
- междоменный запрос
- Балансировка нагрузки
- Динамическое и статическое разделение сетевых ресурсов
nginx как http сервер
Сам Nginx является сервером для статических ресурсов.Когда есть только статические ресурсы, Nginx можно использовать в качестве сервера.Таким образом, мы используем Nginx для развертывания упакованного проекта vue
#vue项目
server
{
listen 8081; #监听端口
server_name 209.250.235.145;
root /app/vue/dist/; # 我们的资源在服务器中的路径
index index.html; #指定资源的入口文件
}
После завершения перезагружаем nginx -s, после чего заходим209.250.235.145:8081, если путь правильный, доступ к статическим ресурсам возможен
междоменный запрос
В проекте с разделением фронтенда и бэкенда, так как фронтенд и бэкенд деплоятся на разных серверах, первая проблема, с которой мы сталкиваемся, это кроссдоменность, в этом случае nginx может нам помочь решить эту проблему проблема хорошо.#跨域请求server
server{
listen 9000;
server_name 209.250.235.145;
root /app/crossDomain/;
index index.html;
location /douban/ { #添加访问目录为/apis的代理配置
rewrite ^/douban/(.*)$ /$1 break;
proxy_pass https://m.douban.com;
}
}
Под своим сервером я написал
function nginxClick(){
$.ajax({
url: '/douban/rexxar/api/v2/muzzy/columns/10018/items?start=0&count=3',
dataType: 'json',
type: 'get',
data: "",
success:(res)=>{
console.log(res)
}
})
}
Когда мы обращаемся к запросу клика, он соответствуетпод место/douban/
rewrite ^/douban/(.*)$ /$1 break;
Эта конфигурация переписывает путь запроса к /rexxar/api/v2/muzzy/columns/10018/items?start=0&count=3, где $1 представляет первый параметр, соответствующий обычному нечеткому сопоставлению,
proxy_pass https://m.douban.com;
Эта конфигурация предназначена для проксирования доменного имени запроса на доменное имя Douban, поэтому запрос, отправленный с локального сервера, будет переписан как:
https://m.douban.com/rexxar/api/v2/muzzy/columns/10018/items?start=0&count=3, мы можем получить данные, предоставленные API Douban. Смотрите это для деталейстатья
Демонстрационный адрес:http://209.250.235.145:9000/
Балансировка нагрузки
Балансировка нагрузки также является часто используемой функцией Nginx, в основном с использованиемupstreamдля определения сервера кластера. Конфигурация балансировки нагрузки обычно требует одновременной настройки обратного прокси-сервера и перехода к балансировке нагрузки через обратный прокси-сервер. В настоящее время Nginx поддерживает 3 стратегии балансировки нагрузки.
-
РР (по умолчанию): Каждый запрос распределяется по разным внутренним серверам один за другим в хронологическом порядке.Если внутренний сервер выходит из строя, он может быть автоматически устранен.
-
Веса: Укажите вероятность опроса, вес пропорционален коэффициенту доступа и используется для неравномерной производительности внутреннего сервера.
-
ip_hash: Вышеуказанные два типа методов имеют проблему, что в следующий раз, когда запрос на запрос может быть распространен на другой сервер, когда наша программа не является беззнавой (с использованием данных сохранения сеансов), на этот раз есть очень большая проблема , например, для сохранения информации о входе в систему на сеанс, затем перейдите на другой сервер, когда вам нужно снова войти в систему, так много времени нам нужен клиентский доступ только один сервер, то вам нужно использовать iPhash, и iPhash каждый запрос, назначенный Hash Recute Access Access IP, чтобы каждый посетитель доступа к фиксированному спину, может решить проблему сеанса.
использоватьвышестоящий сервер определений
upstream smile.com{
server 209.250.235.145:9001 weight=1;
server 209.250.235.145:9002 weight=2;
}
server{
listen 9003;
server_name 209.250.235.145;
location / {
proxy_pass http://smile.com;
proxy_redirect default;
}
}
Когда мы обращаемся к порту 9003, он будет падать на разные серверы (порты) согласно заданным нами весам.
Демонстрационный адрес:http://209.250.235.145:9003/
Динамическое и статическое разделение сетевых ресурсов
Когда наш запрос включает статические ресурсы, мы можем распределить запрос на разные серверы.
#动静分离server
upstream static {
server 209.250.235.145:9006;
}
server{
listen 9005;
server_name 209.250.235.145;
root /app/dynSta;
location ~ .*.(gif|jpg|jpeg|png|bmp|swf|css|js)$ {
proxy_pass http://static;
}
}
server{
listen 9006;
server_name 209.250.235.145;
root /app/dynSta;
}
мы определяем
Помимо описанных выше сценариев использования, nginx также можно использовать для адаптации к ПК и мобильным средам.
Адаптируйтесь к ПК и мобильной среде
#适配pc环境和移动环境
server{
listen 9007;
server_name 209.250.235.145;
root /app/pcAndh5/;
index pc.html;
location / {
if ($http_user_agent ~* '(Android|webOS|iPhone|iPod|BlackBerry)') {
set $mobile_request '1';
}
if ($mobile_request = '1') {
rewrite ^.+ https://www.baidu.com/;
}
}
}
Здесь мы используем встроенные переменные nginx$http_user_agent для соответствия источнику запроса, когда источник(Android|webOS|iPhone|iPod|BlackBerry), мы попросим полностью переписать, дайте ему доступ к Baidu, в противном случае получите доступ к адресу моего сервера.
Демонстрационный адрес:http://209.250.235.145:9007/
Выше показана сцена, используемая сервером nginx в нашей повседневной разработке.