web-dev-qa-db-fra.com

nginx proxy_pass en utilisant un sous-dossier

ok, cette tâche devrait être simple mais je n'arrive pas à le faire fonctionner. Je voudrais avoir un sous-dossier après mon nom de domaine (en fait après l'IP de ce nom de domaine), qui redirige vers un port spécifique sur le même serveur. Essentiellement, je veux me débarrasser d'avoir à utiliser de nombreux ports.

Voici ma config nginx pour ça

server {
    listen 80;

    index index.html index.htm index.nginx-debian.html index.php;

    server_name aaa.bbb.ccc.ddd;

    location ^~ /app2 {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $Host;
        proxy_pass http://aaa.bbb.ccc.ddd:8001;
    }
}

Donc, lors de l'accès à aaa.bbb.ccc.ddd/app2, je voudrais que cela se résout en http: //aaa.bbb.ccc.ddd: 8001 .

Cela peut être peut-être si compliqué. Qu'est-ce que j'oublie ici?

Merci Pat

11
pAt84

Étant donné que vous avez marqué cela comme une question de proxy inverse, je suppose que vous voulez dire que vous souhaitez proxy de la demande afin que l'utilisateur ne voie que http://aaa.bbb.ccc.ddd/app2 URL dans son navigateur.

Vous pouvez changer votre bloc location en ceci:

location ~/app2(.*)$ {
    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host $Host;
    proxy_pass http://aaa.bbb.ccc.ddd:8001$1;
}

Ici, nous capturons la partie URI après /app2 à $1 variable, et utilisez-la dans proxy_pass directive.

12
Tero Kilkanen