Comment utiliser Nginx comme serveur proxy HTTP / HTTPS? [fermé]

16

Est-il possible d'utiliser Nginx comme proxy HTTP / HTTPS?

Vlad
la source

Réponses:

14

Après quelques tests, j'ai trouvé que la configuration suivante fonctionnait pour moi .

server {
  server_name ~^(www\.)?(?<domain>.+)$;
  access_log /var/log/nginx/proxy.access.log main;
  error_log /var/log/nginx/proxy.error.log crit;
  listen 10.255.1.13:8080;
  resolver 8.8.8.8;
  location / {
    proxy_pass http://$domain;
    proxy_redirect off;
    proxy_set_header Host $host;
    # Optional headers 
    # proxy_set_header X-Real-IP $remote_addr;
    # proxy_set_header X-Forwarded-For
    # $proxy_add_x_forwarded_for;
  }
}

Cette configuration fonctionne uniquement pour HTTP, pas pour HTTPS.

Vlad
la source
4
Bon travail! Quelques indices. 1: listen ... default_server. 2: server_name ""ou server_name _. 2: proxy_pass $scheme://$http_host. Les limitations: poxying aux amonts avec le port 80 seulement; ne traite pas les redirections lui-même.
Alexander Azarov,
Le schéma $ n'est utile que si le vhost écoute également sur https - mais alors vous avez l'homme au milieu des risques et des erreurs de certificat https à gérer ... les deux sont de gros problèmes de sécurité à considérer
anthonysomerset
8

Je pense que la réponse courte est non, elle n'a pas été écrite pour le proxy direct

MISE À JOUR

pour clarifier ma déclaration ci-dessus:

NGINX n'a ​​jamais été écrit avec un proxy direct à l'esprit - alors qu'il est possible de manipuler à distance la configuration pour faire ce que vous voulez, vous devrez comprendre les limitations suivantes:

  • Prise en charge du cache presque inexistante (l'une des principales raisons d'utiliser un proxy)
  • Je ne peux pas l'utiliser pour autre chose que le trafic du port 80 (c'est-à-dire pas de connexion aux boîtes cpanel à travers lui)
  • Pas de prise en charge du trafic basé sur SSL
  • Pas de prise en charge pour les en-têtes de proxy standard et les en-têtes de cache http (si je comprends bien, ceux-ci sont simplement transmis
  • Pas de prise en charge pour les autres protocoles qui prennent en charge les serveurs proxy - par exemple VPN, etc.

Autres considérations possibles inconnues pour le moment:

  • Il est possible que votre proxy soit DoS car il n'y a pas de réelle capacité à contrôler / authentifier les accès avec précision (nginx prend en charge différentes méthodes de contrôle d'accès, mais il est difficile de savoir comment cela pourrait se comporter dans le contexte du proxy direct)
  • Risques de sécurité possibles pour la machine sur laquelle nginx est installé car il peut y avoir des failles de sécurité possibles non prises en compte en raison d'une utilisation qui n'a pas été conçue pour fonctionner
anthonysomerset
la source
Contre
exemple
peut-être que ma réponse aurait dû être plus claire, elle n'a pas été conçue pour effectuer un proxy direct - les efforts de patch de singe n'offriront pas une prise en charge complète du proxy comme les requêtes de proxy vers des ports non standard (port 80)
anthonysomerset
3

Si vous souhaitez utiliser un proxy HTTP / HTTPS, vous devez utiliser Squid. Il a été écrit pour faire exactement cela. Nginx a été écrit pour agir en tant que proxy inverse et équilibreur de charge, mais pas en tant que proxy direct.

MikeyB
la source
Je connais squid / oops / tinyproxy / etc. Je pose juste cette question pour des raisons académiques
vlad