Balanceamento de carga implementado anteriormente de nginx para serviços, mas há tantos serviços, por isso é muito problemático fazê-lo e não há processamento unificado feito pelo gateway.
Desta vez, o balanceamento de carga do nginx é implementado para o gateway e, em seguida, o gateway é roteado para cada serviço
1. Consulte os documentos oficiais relevantes
Pode-se ver que há duas etapas: 1. Configurar o servidor upstream 2. Configurar o proxy
2. No arquivo de configuração geral do nginx, configure o servidor upstream
Aqui nós configuramos o gateway
[root@10 ~]# cd /
[root@10 /]# ls
bin boot dev -e etc home lib lib64 media mnt mydata opt proc root run sbin srv swapfile sys tmp usr -v vagrant var
[root@10 /]# cd mydata/nginx/conf/
[root@10 conf]# ls
conf.d fastcgi_params koi-utf koi-win mime.types modules nginx.conf scgi_params uwsgi_params win-utf
[root@10 conf]# vi nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/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 /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
upstream gulimall{
server 192.168.56.1:88;
}
include /etc/nginx/conf.d/*.conf;
"nginx.conf" 35L, 694C written
Eu adicionei o parágrafo acima
É o gateway da máquina. O projeto real pode ter vários gateways. Nesse momento, se você configurar vários gateways, estará concluído.
2. Configuração de proxy
Adicione o agente configurado anteriormente ao serviço de commodity
Mude para proxy para o servidor upstream configurado acima
[root@10 conf.d]# ls
default.conf gulimall.conf
[root@10 conf.d]# vi gulimall.conf
server {
listen 80;
server_name gulimall.com;
#charset koi8-r;
#access_log /var/log/nginx/log/host.access.log main;
location / {
proxy_pass http://gulimall;
}
#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 /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# 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;
"gulimall.conf" 44L, 1061C written
[root@10 conf.d]# docker restart nginx
nginx
[root@10 conf.d]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
85e5c45a30da nginx:1.10 "nginx -g 'daemon of…" 4 weeks ago Up 5 seconds 0.0.0.0:80->80/tcp, 443/tcp nginx
6919debe7c73 elasticsearch:7.4.2 "/usr/local/bin/dock…" 4 weeks ago Up 2 hours 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp elasticsearch
fda06f05a0a0 kibana:7.4.2 "/usr/local/bin/dumb…" 4 weeks ago Up 2 hours 0.0.0.0:5601->5601/tcp kibana
69e789223ef0 redis "docker-entrypoint.s…" 4 weeks ago Up 2 hours 0.0.0.0:6379->6379/tcp redis
7c3556ac5cf1 mysql:5.7 "docker-entrypoint.s…" 4 weeks ago Up 2 hours 0.0.0.0:3306->3306/tcp, 33060/tcp mysql
3. Configure o roteamento de host
Após a configuração acima, visitamos, ainda reportamos 404, o motivo é que o gateway não configurou regras de roteamento
Diferente do roteamento de endereço anterior, aqui precisamos configurar o roteamento de host https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.1.3.RELEASE/single/spring-cloud-gateway .html
pode ser visto
Portanto, adicionamos a seguinte rota à configuração do módulo do portão. Lembre-se de colocar essa configuração na parte inferior. O motivo específico não será mencionado. Reinicie
- id: gulimall_host_route
uri: lb://gulimall-product
predicates:
- Host=**.gulimall.com
4. Resolva o problema de perda de nome de host
Depois de reiniciar, ainda é 404 após o acesso
De toda a solicitação em um determinado controlador, por meio das instruções de acesso a seguir, nosso nginx carrega no gateway e, em seguida, o gateway implementa o roteamento
Então, por que visitamos gulimall.com ou 404? A razão é que quando o nginx faz o proxy para o gateway, as informações de host solicitadas serão perdidas, o que é o seguinte
Então precisamos adicionar a configuração à configuração adicionada em gulimall.conf antes, não se esqueça das aspas no final
proxy_set_header Host $host;
Reinicie o nginx após a configuração
Visite novamente, a página inicial do produto aparece
5. Resumo
Primeiro, o mapeamento é configurado no Windows, gulimall.com é mapeado para a máquina virtual e a porta padrão 80 da máquina virtual é acessada neste momento e monitorada. Neste momento, o nginx faz o proxy para o gateway de acordo para a configuração, mas será perdido ao fazer proxy para o gateway. Um cabeçalho de nome de host, então precisamos adicionar uma configuração. O gateway parece que o host é gulimall.com. Como temos uma configuração no roteamento, nós diretamente encaminhar para a página inicial da página do produto.
Até agora, consegui o seguinte