Arquivo de configuração Nginx e proxy reverso, balanceamento de carga, separação dinâmica e estática

localização do arquivo de configuração nginx

/usr/local/nginx/conf/nginx.conf

Composição do arquivo de configuração Nginx

(1) Bloco global

Desde o início do arquivo de configuração até o conteúdo do bloco de eventos, é principalmente para definir algumas instruções de configuração que afetam a operação geral do servidor nginx.
Por exemplo:
worker_processes 1; quanto
maior o valor de worker_processes, mais processamento simultâneo pode ser compatível e mais processos de trabalho.
Error_log representa o caminho de armazenamento do log de erro nginx

(2) bloco de eventos

As instruções envolvidas no bloqueio de eventos afetam principalmente a conexão de rede entre o servidor nginx e o usuário. Por
exemplo:
worker_connections 1024; o número máximo de conexões suportadas

(3) bloco http

bloco http é dividido em bloco global http e bloco de servidor bloco
global http:
incluir main.types; introduzir um arquivo externo -> / main.types colocar um grande número de tipos de mídia
incluindo vhosts / *. conf; introduzir um arquivo externo -> Importe o arquivo de configuração que termina com .conf no arquivo vhosts

Bloco de servidor:
listent: 80; monitorar raiz do
bloco de localização da porta 89
: / web / abc; enviar a solicitação recebida ao diretório especificado para solicitar recursos.
index: index.html; Por padrão,
é o ponto chave para encontrar o bloco do servidor de arquivos relativo no caminho acima , principalmente para a configuração de vários nomes de domínio e projetos, e pode ser usado para operações de proxy reverso.

Caso de proxy reverso

No servidor, mude o server_name para o endereço IP específico atual, em seguida, adicione um proxy_pass ao local, escreva o ip do servidor específico e o número da porta para ser proxy e espere que o cliente inicie uma solicitação para a porta 80 do nginx servidor, você pode usar o proxy diretamente para o nosso servidor de proxy reverso designado

// 把当前IP的80端口反向代理到当前IP的8080端口
server {
    
    
	listen	80;
	server_name  localhost;

	location / {
    
    
		proxy_pass http://127.0.0.1:8080;
	}
}

Mapeamento de caminho de localização específico do Nginx

#优先级关系(越精确,优先级越高)
(location =)  >  (location /xxx/zzz/vvv)  >   (location ^~)	>	(location ~,~*)	 > 	(location /)	

#1. = 匹配
location =/ {
    
    
	#精准匹配,主机名后面不能带任何的的字符串
}

#2. 通用匹配
location /xxx {
    
    
	#匹配所有以xxx开头的路径
}

#3. 正则匹配
location ~ /xxx {
    
    
	# 匹配所有以xxx开头的路径
}

#4. 匹配开头路径
location ^~ /xxx {
    
    
	# 匹配所有以xxx开头的路径
}
#5. ~* \.(gif|jpg|png)$ {
    
    
	# 匹配以gif或者jpg或者png结尾的路径
}

Caso de balanceamento de carga

Adicione a parte upstream ao bloco global http, adicione todos os servidores que precisam de balanceamento de carga e adicione algumas regras, como ordem de prioridade, etc.
Em seguida, use proxy_pass no bloco de serviço para especificar o nome do balanceador de carga, da seguinte maneira, ele pode ser o balanceador de carga atual. Cada solicitação cairá em cada servidor uniformemente.
Para obter detalhes específicos, consulte os seguintes artigos resumidos por outros:
Nginx descrição detalhada detalhada do método de distribuição upstream.
Especificamente, cooperarei com o docker para fazer um caso, use o docker para construir dois servidores nginx e um servidor tomcat, mapeie diferentes números de porta e deixe um deles nginx server fazer o balanceamento de carga.

# 下载并运行一个nginx服务器,映射端口号8011到80端口
$ docker run -d -p 8011:80 --name some-nginx daocloud.io/library/nginx:latest
# 在运行一个nginx容器,映射端口号8012到80端口,4bb46517cac3 为刚才运行的nginx的容器的镜像id
$ docker run -d -p 8012:80 --name some-nginx1 4bb46517cac3  
# 下载并运行一个tomcat服务器,映射端口号8082到8080端口, todo 注意tomcat的默认路径下的默认文件存在请求js和css,会多次请求服务器,如果用默认的负载均衡方式会导致负载均衡出问题,最好在tomcat下增加一个index.html文件来做测试,这样每一次访问只会请求到一台服务器,可以很直观的看到效果
$ docker run -d -p 8082:8080 --name t8 daocloud.io/library/tomcat:8.5.15-jre8
# 本地把需要做负载均衡的config配置文件先做好
$ vi default.conf
# default.conf nginx配置文件
upstream myServer{
    
    
        server 10.0.2.15:8082;  # IP 换成自己的
        server 10.0.2.15:8012;	# IP 换成自己的
}
server {
    
    
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    location / {
    
    
#        root   /usr/share/nginx/html;
        proxy_pass http://myServer;
        index  index.html index.htm;
    }
}
# 把修改好的配置文件复制到docker的nginx容器(some-nginx)中
$ docker cp ./default.conf some-nginx:/etc/nginx/conf.d/default.conf
# 重启一下
$ docker restart some-nginx

Neste ponto, a configuração do servidor foi concluída e os resultados podem ser verificados e aceitos acessando o servidor de balanceamento de carga no navegador.

Estratégia de balanceamento de carga

Nginx fornece três estratégias de balanceamento de carga por padrão:
1. Polling: As solicitações iniciadas pelo cliente são distribuídas uniformemente para cada servidor
2. Peso: A solicitação do cliente será alocada de acordo com o valor do peso do servidor
. ip_hash: Baseado nos diferentes endereços ip do cliente que iniciou a requisição, ele sempre enviará a requisição para o servidor especificado, ou seja, se o endereço IP da requisição do cliente permanecer o mesmo, o servidor que está processando a requisição irá ser sempre o mesmo

votação

O caso de votação é o caso acima, é muito simples, o seguinte é uma descrição de configuração simples

# 需要轮询的Ip及端口号
upstream my_server{
    
    
    server ip:port;
    server ip:port;
}
server {
    
    
    listen       80;
    listen  [::]:80;
    server_name  localhost;

	location / {
    
    
        proxy_pass http://upstream名称/;
    }
}
Pesos

O peso é implementado adicionando peso à parte traseira de cada servidor no upstream. Os detalhes são os seguintes. Depois de configurar o seguinte, eu reativo o servidor nginx com balanceamento de carga criado pelo docker e, em seguida, inicio uma solicitação. Após cinco solicitações para o servidor tomcat, haverá uma solicitação do servidor nginx.

upstream myServer{
    
    
        server 10.0.2.15:8082 weight=10;  # IP 换成自己的
        server 10.0.2.15:8012 weight=2;  # IP 换成自己的
        #server 10.0.2.15:8011;
}
server {
    
    
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
    
    
        proxy_pass http://myServer;
        #root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}
ip_hash

Na realização do ip_hash, após adicionar ip_hash na primeira linha do upstream, o ip ficará travado, e cada ip só solicitará um servidor. Neste momento, reinicio o servidor e após fazer a solicitação, descobrirei que apenas o O servidor nginx pode ser acessado.

upstream myServer{
    
    
        ip_hash;
        server 10.0.2.15:8082 weight=10;  # IP 换成自己的
        server 10.0.2.15:8012 weight=2;  # IP 换成自己的
        #server 10.0.2.15:8011;
}
server {
    
    
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
    
    
        proxy_pass http://myServer;
        #root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}

Separação dinâmica e estática

Fórmula de simultaneidade do Nginx:
worker_processes * worker_connections / 4 | 2 = Capacidade final de simultaneidade do Nginx
Requisito de recurso dinâmico / 4, requisito de recurso estático / 2
Nginx melhora a capacidade de simultaneidade do Nginx por meio de separação dinâmica e estática e responde aos usuários mais rapidamente

Agente de recursos dinâmicos

Nada a dizer, basicamente era dinâmico antes

#配置如下
location / {
    
    
  proxy_pass 路径;
}
Agente de recurso estático
# nginx 配置项
server {
    
    
    listen       80;
    listen  [::]:80;
    server_name  localhost;

	# 在 /web/data 下创建html文件夹,然后把一个index.html文件放到里边
    location /html {
    
    
        root  /web/data;
        index  index.html;
    }

	#  在 /web/data 下创建img文件夹,然后把一个123.html文件放到里边
    location /img {
    
    
        root /web/data;
        autoindex on;   #代表展示静态资源的全部内容,以列表的形式展开
    }
}
<!- index.html文件内容, 直接把图片也直接放到了内容中一起请求,看是否可以直接成功 -> 
<h1>test img</h1>
<img src="http://192.168.1.113:8013/img/123.jpg"/>

Tudo bem sucedido, a página estática html pode ser acessada normalmente, e as imagens também podem ser acessadas normalmente

Insira a descrição da imagem aqui
Estamos analisando a função do "autoindex on", como segue
Insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/qq_15915293/article/details/107945000
Recomendado
Clasificación