Proxy für eine Site mit NGINX zu einer anderen Site

Proxy für eine Site mit NGINX zu einer anderen Site

Ich habe eine Site mit einigen URLs unter (http://Standort:Hafen/) und möchten NGINX als Proxy verwenden.

Ich habe eine andere Site unter (http://Standort2:Port2) und möchte es auch so proxyen, dass.

  1. Der Zugriff auf Site 1 erfolgt über http://main.comund
  2. Der Zugriff auf Site 2 erfolgt über http://main.com/site2mit allen Unterlinks

Mein Versuch schlägt fehl.

server {
    listen  80;

    index index.html;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;

        proxy_pass http://landing-page:5000;
        proxy_redirect off;
    }

    location /insights {
        return 302 $uri/;
    }

    location /insights/ {
        # proxy_set_header X-Real-IP $remote_addr;
        # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # proxy_set_header Host $http_host;
        # proxy_set_header X-NginX-Proxy true;

        rewrite ^/insights/?(.*) /$1 break;

        proxy_pass http://ghost:2368/;
        # proxy_redirect off;
    }
}

Zusätzliche Information

Ich verwende NGINX auf Docker und muss auf meinem Mac Port 80 auf 8080 zuordnen.

Ich habe Folgendes gefunden:

  1. http://localhost:8080/insightssetzt die URL http://localhost/insights/im Browser
  2. http://localhost:8080/insights/ghostsetzt URL aufhttp://localhost:8080/ghost/
  3. http://localhost:8080/insights/setzt URL aufhttp://localhost:8080/insights/
  4. http://localhost:8080/insights/ghost/setzt URL aufhttp://localhost:8080/insights/ghost/

JEDE URL mit dem abschließenden Schrägstrich scheint gut zu funktionieren. Warum?

Antwort1

Ihr location /Block sollte am Ende der Datei stehen. Standortblöcke werden der Reihe nach verarbeitet und der erste passende Block wird ausgeführt. Da er mit location /jeder Anfrage übereinstimmt, wird er immer ausgeführt.

Im Allgemeinen sollten Sie zuerst Ihre spezifischsten Blöcke haben, gefolgt von Ihren weniger spezifischen Blöcken und abschließend location /für alle anderen Anfragen.

Ihre Datei sollte folgendermaßen aufgebaut sein:

server {
    listen  80;

    index index.html;

    location /insights/ {
        # proxy_set_header X-Real-IP $remote_addr;
        # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # proxy_set_header Host $http_host;
        # proxy_set_header X-NginX-Proxy true;

        rewrite ^/insights/?(.*) /$1 break;

        proxy_pass http://ghost:2368/;
        # proxy_redirect off;
    }

    location /insights {
        return 302 $uri/;
    }

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;

        proxy_pass http://landing-page:5000;
        proxy_redirect off;
    }
}

verwandte Informationen