2017-09-05 4 views
0

J'essaie de configurer NGINX en tant que proxy direct pour remplacer Fiddler que nous utilisons comme proxy direct. La fonctionnalité de Fiddler que nous utilisons nous permet de transférer toute demande entrante à un port 8888. Comment je fais ça avec NGINX?Comment utiliser NGINX comme proxy direct pour n'importe quel emplacement demandé?

Dans tous les exemples de NGINX en tant que proxy inverse, voir proxy_pass toujours défini sur un serveur spécifique amont/proxy. Comment puis-je le configurer afin qu'il se rende au serveur demandé, quel que soit le serveur de la même manière que j'utilise Fiddler en tant que proxy direct.

Exemple:

Dans mon code:

WebProxy proxyObject = new WebProxy("http://mynginxproxyserver:8888/",true); 
WebRequest req = WebRequest.Create("http://www.contoso.com"); 
req.Proxy = proxyObject; 

Dans mynginxproxyserver/nginx.conf Je ne veux pas déléguer le mandatement à un autre serveur (par exemple proxy_pass mis à http://someotherproxyserver). Au lieu de cela, je veux juste être un serveur proxy, et rediriger les demandes de mon client (voir ci-dessus) à l'hôte de la demande. C'est ce que fait Fiddler quand vous l'activez comme un proxy: http://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/UseFiddlerAsReverseProxy

+0

Pouvez-vous donner un exemple de demande et ce que vous attendez? Je ne suis pas certain si vous demandez un hôte dynamique, une adresse IP dynamique ou autre chose. Est-ce le port 8888 de la même machine? – Grumpy

+0

J'ai ajouté un exemple dans la question, ainsi qu'un lien vers la façon dont il est fait en utilisant Fiddler. Je veux essentiellement faire la même chose que Fiddler avec nginx. –

Répondre

4

Votre code semble utiliser un proxy direct (souvent juste "proxy"), pas de proxy inverse et ils fonctionnent très différemment. Le proxy inverse est pour la fin du serveur et quelque chose que le client ne voit pas vraiment ou ne pense pas. C'est pour extraire le contenu des serveurs principaux et le remettre au client. Transférer proxy est quelque chose que le client met en place afin de se connecter au reste de l'Internet. À son tour, le serveur peut potentiellement ne rien savoir à propos de votre proxy direct.

fwd vs rev proxy

Nginx est conçu à l'origine pour être un proxy inverse, et non un proxy direct. Mais il peut encore être utilisé comme un avant. C'est pourquoi vous n'avez probablement pas trouvé beaucoup de configuration pour cela.

Ceci est plus une réponse théorique que je ne l'ai jamais fait moi-même, mais une configuration comme suit devrait fonctionner.

server { 
    listen  8888; 

    location/{ 
     resolver 8.8.8.8; # may or may not be necessary. 
     proxy_pass http://$http_host$uri$is_args$args; 
    } 
} 

Ceci est juste les bits importants, vous aurez besoin de configurer le reste.

L'idée est que le proxy_pass passe à un hôte variable plutôt qu'à un hôte prédéfini. Donc, si vous demandez http://example.com/foo?bar, votre en-tête HTTP inclura l'hôte de example.com. Cela rendra vos données proxy_pass retirées de http://example.com/foo?bar.

Le document que vous avez lié l'utilise en tant que proxy inverse. Cela équivaudrait à

 proxy_pass http://localhost:80; 
+1

Cela fonctionne réellement! Et j'avais besoin: 'résolveur 8.8.8.8;' –