3 votes

Nginx : faire correspondre un sous-domaine à un sous-répertoire sur un serveur proxy

J'ai le domaine example.com et le sous-domaine blog.example.com . J'ai une application Unicorn qui fonctionne à localhost:5000 et utiliser Nginx comme proxy inverse.

Je n'ai eu aucun problème en utilisant seulement le example.com . Cependant, je veux ajouter le support des sous-domaines et j'ai quelques problèmes.

J'ai du contenu à example.com/blog . Je veux blog.example.com pour y pointer, sans que l'utilisateur sache qu'une réécriture est utilisée. Je veux mettre en correspondance toutes les URLs, de sorte que :

  • blog.example.com -> localhost:5000/blog
  • blog.example.com/index.php -> localhost:5000/blog/index.php
  • blog.example.com/foo/bar -> localhost:5000/blog/foo/bar

Ma meilleure tentative jusqu'à présent est la suivante :

server
{
  listen 80;
  server_name blog.example.com;

  location / {
    proxy_pass http://localhost:5000/blog/$uri;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_redirect off;
  }

  client_max_body_size 4G;
  keepalive_timeout 10;
}

Cela réécrit correctement blog.example.com mais échoue avec blog.example.com/index.php :

$ curl -v 'http://blog.example.com'
> GET /index.php HTTP/1.1
> Host: blog.example.com
> User-Agent: curl/7.51.0
> Accept: */*
> 
< HTTP/1.1 301 Moved Permanently
< Date: Sun, 26 Mar 2017 12:29:00 GMT
< Content-Type: text/html; charset=iso-8859-1
< Content-Length: 337
< Connection: keep-alive
< Location: http://blog.example.com/blog/index.php

3voto

Michael Points 51

J'ai découvert que mon erreur se situait à cette ligne :

proxy_pass http://localhost:5000/blog/$uri;

Lorsqu'il est changé en

proxy_pass http://localhost:5000/blog$uri;

le proxy fonctionne comme prévu.

[modifier]

Une version encore meilleure, pour passer également la chaîne de requête :

proxy_pass http://localhost:5000/blog$uri$is_args$args;

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X