Maison >Opération et maintenance >Nginx >Comment nginx transmet les requêtes en fonction de l'URL

Comment nginx transmet les requêtes en fonction de l'URL

WBOY
WBOYavant
2023-05-28 14:40:062597parcourir

Serveur proxy : sockerserver écoute un certain port, se connecte au port du serveur spécifié en fonction du message http et effectue une demande de données
-proxy http
la requête http passe par le serveur proxy, et le serveur proxy n'a qu'à être responsable de la transmission du corps de réponse http correspondant.
- Proxy https
Lorsqu'une requête https passe par le serveur proxy, un message de connexion sera envoyé pour établir un tunnel avec le serveur proxy. Si le serveur proxy renvoie http 200, l'établissement doit seulement être réussi. responsable du transfert des données. En fait, ssl/ La négociation TLS se produit toujours entre le client et le serveur réel.

proxyservlet

Étant donné que le port 8089 du projet backend peut accéder au service fastdfs du serveur, la première chose à laquelle j'ai pensé a été d'utiliser le proxyservlet de Springboot pour proxy la requête spécifiée vers le port 8088 du serveur

Le servlet principal de Spring boot est le dispatcherservlet de springmvc, son modèle d'URL par défaut est "/". Si nous voulons ajouter différents appels (autres interfaces serveur) à une certaine URL, nous devons créer un nouveau servlet proxy, qui utilisera servletregistrationbean et créera un nouveau proxyservlet pour le gérer et envoyer des données, et l'enregistrer dans le contexte de servlet géré par springboot (définir le serveur et le port spécifiés, ainsi que l'interface pour le transfert des demandes)

Dépendance

<dependency>
 <groupid>org.mitre.dsmiley.httpproxy</groupid>
 <artifactid>smiley-http-proxy-servlet</artifactid>
 <version>1.7</version>
 </dependency>

Configuration

### 配置代理
#请求resource时代理转发到端口8088项目中
proxy.test.servlet_url_one= /resource/*
proxy.test.target_url_one= https://localhost:8088
@component
@data
public class proxyfilterservlet {
 @value("${proxy.test.target_url_one}")
 private string targeturl;
 @value("${proxy.test.servlet_url_one}")
 private string servleturl;
}

Changez la configuration pour ajouter

@configuration
public class proxyservletconfig {
 @autowired
 private proxyfilterservlet proxyfilterservlet;
 //多个代理servlet可以配置多个bean
 @bean
 public servletregistrationbean servletregistrationbean(){
 servletregistrationbean servletregistrationbean = new servletregistrationbean(new proxyservlet(), proxyfilterservlet.getservleturl());
 //这个setname必须要设置,并且多个的时候,名字需要不一样
 servletregistrationbean.setname("go_backend");
 servletregistrationbean.addinitparameter("targeturi", proxyfilterservlet.gettargeturl());
 servletregistrationbean.addinitparameter(proxyservlet.p_log, "false");
 return servletregistrationbean;
 }
}

Établissez une connexion avec le serveur cible via le conteneur de servlet Après tout, il n'est pas aussi puissant qu'un serveur proxy professionnel comme nginx

nginx—redirection proxy

    .
  • À ce moment-là, j'ai pensé à ajouter une couche de nginx entre les serveurs. Pour transférer différentes demandes de service vers différentes API de port pour traitement

Pour transférer les demandes du réseau externe qui doivent être demandées vers le même serveur interne. port réseau

server {
 listen 80;
 server_name 127.0.0.1;
 
 location / {
 proxy_pass http://127.0.0.1:3000;
 }
 
 location ~ /api/ {
 proxy_pass http://172.30.1.123:8081;
 }
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer