web-dev-qa-db-fra.com

NGinx Inverser le proxy SSL avec plusieurs sous-domaines

J'essaie de localiser un exemple de configuration de haut niveau pour ma situation actuelle. Nous avons un certificat SSL Wildcard pour plusieurs sous-domaines, qui sont sur plusieurs serveurs internes =IIS.

site1.example.com (X.X.X.194) -> IISServer01:8081
site2.example.com (X.X.X.194) -> IISServer01:8082
site3.example.com (X.X.X.194) -> IISServer02:8083

Je cherche à gérer le trafic SSL entrant via une entrée de serveur, puis transmettez le domaine spécifique au fichier interne IIS. Il semble que j'ai 2 options:

  1. CODE Une section d'emplacement pour chaque sous-domaine (semble désordonné des exemples que j'ai trouvés)

  2. Transférer le trafic non crypté vers le même serveur Nginx configuré avec différentes entrées de serveur pour chaque nom d'hôte de sous-domaine. (Au moins cela semble être une option).

Mon objectif ultime est de consolider une grande partie de notre trafic SSL à passer par NGINX afin que nous puissions utiliser HAPROXY pour charger des serveurs de balance.

Est-ce que l'approche n ° 2 fonctionne au sein de Nginx si je configurais correctement les entrées proxy_set_header?

J'envisage quelque chose sur les lignes de cela dans mon fichier de configuration final (à l'aide de l'approche n ° 2):

server {
  listen Y.Y.Y.174:443; #Internally routed IP address
  server_name *.example.com;

  proxy_pass http://Y.Y.Y.174:8081;
}

server {
  listen Y.Y.Y.174:8081;
  server_name site1.example.com;

  -- NORMAL CONFIG ENTRIES --

  proxy_pass http://IISServer01:8081;
}

server {
  listen Y.Y.Y.174:8081;
  server_name site2.example.com;

  -- NORMAL CONFIG ENTRIES --

  proxy_pass http://IISServer01:8082;
}

server {
  listen Y.Y.Y.174:8081;
  server_name site3.example.com;

  -- NORMAL CONFIG ENTRIES --

  proxy_pass http://IISServer02:8083;
}

Cela semble être un moyen, mais je ne suis pas sûr que si c'est le meilleur moyen. Est-ce que je manque une approche plus simple de cela?

7
BrianM

Je ferais quelque chose comme ça (testé avec Nginx 1.4.2, semble fonctionner):

server {
  listen 127.0.0.1:443 ssl;
  server_name site1.example.com;

  include common.conf;

  location / {
    proxy_pass http://127.0.0.2:8081;
  }
}

server {
  listen 127.0.0.1:443 ssl;
  server_name site2.example.com;

  include common.conf;

  location / {
    proxy_pass http://127.0.0.2:8082;
  }
}

server {
  listen 127.0.0.1:443 ssl;
  server_name site3.example.com;

  include common.conf;

  location / {
    proxy_pass http://127.0.0.3:8083;
  }
}

Avec au moins cela dans common.conf:

ssl on;
ssl_certificate  /path/to/cert;
ssl_certificate_key  /path/to/key;
10
Changaco

Croyez-le ou non, vous pouvez le faire:

ssl_session_cache shared:SSL:2m;
ssl_session_timeout 5m;

server {
    listen Y.Y.Y.174:443 default_server ssl;
    server_name _;
    ssl_certificate /etc/pki/tls/certs/server.chained.crt;
    ssl_certificate_key /etc/pki/tls/private/server.key;
}

server {
    listen Y.Y.Y.174:443 ssl;
    server_name site1.example.com;
    [...]
    proxy_pass http://IISServer01:8081;
}

server {
    listen Y.Y.Y.174:443 ssl;
    server_name site2.example.com;
    [...]
    proxy_pass http://IISServer01:8082;
}

server {
    listen Y.Y.Y.174:443 ssl;
    server_name site3.example.com;
    [...]
    proxy_pass http://IISServer02:8083;
}

Non Inclut, le certificat est chargé en mémoire une seule fois et la session devrait même rester mise en cache lorsque l'utilisateur passe du sous-domaine au sous-domaine, ce qui vous permet d'économiser de la puissance de la poignée de main.

Je ne trouve aucune documentation au-delà ce poste de défaut de serveur Pour suggérer pourquoi cela fonctionne, mais je peux vous assurer que cela fait.

7
Aaron Adams