Как Nginx настраивает Http, Https, WS, WSS?

задняя часть
Как Nginx настраивает Http, Https, WS, WSS?

написать впереди

В современном Интернете Nginx является одним из наиболее часто используемых прокси-серверов.Многие крупные предприятия используют Nginx в качестве прокси-сервера в своих бизнес-системах. Поэтому нам необходимо понимать различные конфигурации Nginx для Http, Https, WS и WSS. Приходите и приходите, изучайте Nginx с Glacier, продвигайтесь вместе и лысейте вместе~~

Nginx настроить HTTP

Во-первых, давайте поговорим о том, как Nginx настраивает Http.Конфигурация Nginx Http — одна из наиболее часто используемых функций Nginx. Настройте соответствующую информацию в nginx.conf, как показано ниже.

upstream message {
  server localhost:8080 max_fails=3;
}

server {
	listen       80;
	server_name  localhost;

	location / {
		root   html;
		index  index.html index.htm;
		#允许cros跨域访问 
		add_header 'Access-Control-Allow-Origin' '*';
		#proxy_redirect default;
		#跟代理服务器连接的超时时间,必须留意这个time out时间不能超过75秒,当一台服务器当掉时,过10秒转发到另外一台服务器。
		proxy_connect_timeout 10;
	}
	
	 location /message {
	   proxy_pass                  http://message;
	   proxy_set_header Host $host:$server_port;
	}
}

В этот момент посетитеhttp://localhost/message, будут отправленыhttp://localhost:8080/messageначальство.

Nginx настроить HTTPS

Если бизнес предъявляет высокие требования к безопасности веб-сайта, Https может быть настроен в Nginx в это время Конкретная информация о конфигурации может быть сделана следующим образом.

upstream message {
  server localhost:8080 max_fails=3;
}

server {
	listen       443 ssl;
	server_name localhost;
	ssl_certificate    /usr/local/nginx-1.17.8/conf/keys/binghe.pem;
	ssl_certificate_key /usr/local/nginx-1.17.8/conf/keys/binghe.key;
	ssl_session_timeout 20m;
	ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	ssl_prefer_server_ciphers on;
	ssl_verify_client off;
	location / {
		root   html;
		index  index.html index.htm;
		#允许cros跨域访问 
		add_header 'Access-Control-Allow-Origin' '*';
		#跟代理服务器连接的超时时间,必须留意这个time out时间不能超过75秒,当一台服务器当掉时,过10秒转发到另外一台服务器。
		proxy_connect_timeout 10;
	}
	
	 location /message {
	   proxy_pass                  http://message;
	   proxy_set_header Host $host:$server_port;
	}
}

посетить в это времяhttps://localhost/messageбудет отправленоhttp://localhost:8080/messageначальство.

Nginx настроить WS

Полное название WS — WebSocket, а настроить WebSocket в Nginx относительно просто, нужно только настроить его в файле nginx.conf. Этот метод очень прост, но очень эффективен и может горизонтально расширить сервисные возможности сервера WebSocket.

Чтобы облегчить лучшее понимание мелких партнеров, здесь я сосредоточусь на конфигурации Nginx WS.

Сначала отобразите файл конфигурации напрямую, как показано ниже (скопируйте его напрямую, если вы его используете, а затем измените ip и порт)

map $http_upgrade $connection_upgrade { 
	default upgrade; 
	'' close; 
} 
upstream wsbackend{ 
	server ip1:port1; 
	server ip2:port2; 
	keepalive 1000;
} 
 
server { 
	listen 20038; 
	location /{ 
		proxy_http_version 1.1; 
		proxy_pass http://wsbackend; 
		proxy_redirect off; 
		proxy_set_header Host $host; 
		proxy_set_header X-Real-IP $remote_addr; 
		proxy_read_timeout 3600s; 
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
		proxy_set_header Upgrade $http_upgrade; 
		proxy_set_header Connection $connection_upgrade; 
	} 
}

Далее мы отдельно разберем конкретное значение приведенной выше конфигурации.

первый:

map $http_upgrade $connection_upgrade { 
	default upgrade; 
	'' close; 
} 

означает:

  • если$http_upgrade 不为 '' (空),$ Connection_uppgrade для обновления.
  • если $http_upgrade 为 '' (空),Тогда $connection_upgrade закрывается.

Следующий:

upstream wsbackend{ 
	server ip1:port1; 
	server ip2:port2; 
	keepalive 1000; 
} 

Представляет балансировку нагрузки nginx:

  • Два сервера (ip1:port1) и (ip2:port2).
  • keepalive 1000 представляет собой простаивающие соединения, поддерживаемые вышестоящим сервером в каждом процессе nginx.Когда простаивающих соединений слишком много, наименее используемые простаивающие соединения будут закрыты.Конечно, это не ограничивает общее количество соединений.Можно себе представить в качестве размера пула незанятых соединений установите значение, которое должно быть приемлемым для вышестоящего сервера.

наконец:

server { 
	listen 20038; 
	location /{ 
		proxy_http_version 1.1; 
		proxy_pass http://wsbackend; 
		proxy_redirect off;
		proxy_set_header Host $host; 
		proxy_set_header X-Real-IP $remote_addr; 
		proxy_read_timeout 3600s; 
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
		proxy_set_header Upgrade $http_upgrade; 
		proxy_set_header Connection $connection_upgrade; 
	} 
} 

Указывает конфигурацию прослушивающего сервера

  • listen 20038 указывает порт, который прослушивает nginx
  • местоположения / Указывает путь прослушивания (/ указывает все пути, универсальное соответствие, эквивалентное умолчанию)
  • proxt_http_version 1.1 указывает, что версия протокола HTTP, отправляемая обратным прокси-сервером, равна 1.1, а HTTP1.1 поддерживает длинные соединения.
  • proxy_pass http://wsbackend; Представляет uri обратного прокси, где можно использовать переменные балансировки нагрузки
  • proxy_redirect off; означает не заменять путь, по сути, неважно, если он есть / здесь, потому что по умолчанию также заменяется путь к задней части proxy_pass
  • proxy_set_header Host $host; Указывает, что заголовок запроса остается неизменным при передаче, $host — это встроенная переменная nginx, представляющая текущий заголовок запроса, а proxy_set_header — установленный заголовок запроса.
  • proxy_set_header X-Real-IP $remote_addr; Указывает, что IP-адрес источника по-прежнему является текущим IP-адресом клиента при передаче
  • proxy_read_timeout 3600s; Соединение закрывается после того, как интервал между двумя запросами таблицы превышает 3600s.По умолчанию 60s, что является виновником автоматического закрытия.
  • proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; Указывает, что заголовок X-Forwarded-For не изменяется
  • proxy_set_header Upgrade $http_upgrade; Указывает, что обновление установлено без изменений
  • proxy_set_header Connection $connection_upgrade;Указывает, что если $http_upgrade является обновлением, запрос является обновлением (веб-сокет), если нет, закройте соединение.

В этот момент посетитеws://localhost:20038будет отправленоip1:port1а такжеip2:port2начальство.

Nginx настроить WSS

WSS расшифровывается как WebSocket + Https. С точки зрения непрофессионала, это безопасный WebSocket. Далее давайте посмотрим, как настроить WSS. При настройке WS подробно описываются детали настройки, и я не буду их здесь подробно вводить.

map $http_upgrade $connection_upgrade { 
	default upgrade; 
	'' close; 
} 
upstream wsbackend{ 
	server ip1:port1; 
	server ip2:port2; 
	keepalive 1000; 
} 
server{
	listen 20038 ssl;
	server_name localhost;
	ssl_certificate    /usr/local/nginx-1.17.8/conf/keys/binghe.com.pem;
	ssl_certificate_key /usr/local/nginx-1.17.8/conf/keys/binghe.com.key;
	ssl_session_timeout 20m;
	ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	ssl_prefer_server_ciphers on;
	ssl_verify_client off;
	location /{
	  proxy_http_version 1.1;
	  proxy_pass http://wsbackend;
	  proxy_redirect off; 
	  proxy_set_header Host $host; 
	  proxy_set_header X-Real-IP $remote_addr; 
	  proxy_read_timeout 3600s; 
	  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
	  proxy_set_header Upgrade $http_upgrade; 
	  proxy_set_header Connection $connection_upgrade; 
	}
}

В этот момент посетитеwss://localhost:20038будет отправленоip1:port1а такжеip2:port2начальство.

Малые партнеры вы узнаете это? Добро пожаловать в конец сообщения таким образом.

Хорошо, давайте остановимся здесь сегодня, я Glacier, если у вас есть какие-либо вопросы, вы можете оставить сообщение ниже или добавить меня в WeChat: sun_shine_lyz, я втяну вас в группу, вместе обменяемся технологиями, вместе продвинемся и быть классными вместе~~