nginx реализует распространенные сценарии

внешний интерфейс Nginx

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;
   }
}

Под своим сервером я написал

index.html запрашивает интерфейс Douban для имитации междоменного

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, чтобы каждый посетитель доступа к фиксированному спину, может решить проблему сеанса.
Здесь вторые 900 стратегий используются для моделирования и достижения более низкой балансировки нагрузки (два порта на одном сервере имеют две службы узлов).


использоватьвышестоящий сервер определений

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;
    }

мы определяем

Добавлен новый порт для статических ресурсов и добавлен в
восходящий модуль, когда наше местоположение совпадает с(gif|jpg|jpeg|png|bmp|swf|css|js), перенаправим запрос на порт 9006 (очень хочу быть местным тираном, очень хочу иметь два сервера аааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааахаааха..)

Помимо описанных выше сценариев использования, 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 в нашей повседневной разработке.