2017-05-19 2 views
0

Dies ist mein Docker infra.Nginx-Proxy mit Docker-Containern

nginx Webserver auf Port dient 80 (ausgesetzt Gastgeber)

Medien und Blog auf Port dient 80 (nicht ausgesetzt Host) unter einzelnen Behälter läuft

alle auf dem gleichen VM ausgeführt wird.


 Name      Command    State   Ports 
---------------------------------------------------------------------------------- 
media     docker-php-entrypoint apac ... Up  80/tcp 
mysql_db_blog   docker-entrypoint.sh mysqld  Up  3306/tcp 
mysql_db_media   docker-entrypoint.sh mysqld  Up  3306/tcp 
webserver    nginx -g daemon off;    Up  0.0.0.0:80->80/tcp 
blog     docker-entrypoint.sh apach ... Up  80/tcp 

Meine nginx config:

server { 
     listen 80 default_server; 
     server_name 192.168.0.7; 
     server_tokens off; 

     location /story/ { 
      proxy_pass   http://blog/; 
      proxy_set_header Host $host; 
      proxy_set_header X-Real-IP $remote_addr; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
      proxy_set_header X-Forwarded-Host $server_name; 
     } 

     location /videos/ { 
      proxy_pass   http://media/; 
      proxy_set_header Host $host; 
      proxy_set_header X-Real-IP $remote_addr; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
      proxy_set_header X-Forwarded-Host $server_name; 
     } 
} 

Mein Problem:

Wenn ich versuche, eine der folgenden URLs für den Zugriff auf

1) http://webserver/story

2) http://webserver/videos

nach dem ersten Antrag, der letzte Teil 'Geschichte' oder 'Videos' wird die URL gelöscht Form.

Was ich von nginx conf bin fehlt sicher, ‚Geschichte‘ oder ‚Videos‘ machen wird nicht aus der URL entfernt?

Antwort

0

Es ist zu tun, wie proxy_pass in Ihrer Strophe geschrieben.

Von proxy_pass:

Eine Anforderung URI an den Server übergeben wird, wie folgt:

Wenn die proxy_pass Richtlinie mit einer URI angegeben wird, dann, wenn eine Anfrage an den Server übergeben wird, der Teil URI Anpassen der Position eines normalisierten Anforderung wird durch einen URI spezifiziert in der Anweisung ersetzt:

location /name/ { 
    proxy_pass http://127.0.0.1/remote/; 
} 

Wenn proxy_pass ohne URI angegeben wird, wird der Anforderungs-URI in der gleichen Form an den Server übergeben, wie er von einem Client bei der Verarbeitung der ursprünglichen Anforderung gesendet wurde, oder der vollständige normalisierte Anforderungs-URI wird bei der Verarbeitung des geänderten URI übergeben:

location /some/path/ { 
    proxy_pass http://127.0.0.1; 
} 

So Ihre proxy_pass ändern:

location /videos/ { 
    proxy_pass   http://media; 

Hinweis - Fehlen Strich von Hinter, bedeutet es die ursprüngliche URI bewahrt.

Sie möchten vielleicht auch rewrite betrachten, da das etwas Ähnliches tut.