Прокси-сайт с NGINX на другой сайт

Прокси-сайт с NGINX на другой сайт

У меня есть сайт с некоторыми URL-адресами (http://местоположение:порт/) и хотите использовать NGINX для его проксирования.

У меня есть еще один сайт, по адресу (http://location2:port2) и также хотим проксировать его таким образом.

  1. Доступ к сайту 1 осуществляется через http://main.comи
  2. Доступ к сайту 2 осуществляется через http://main.com/site2все его подссылки

Моя попытка провалилась.

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;
    }
}

Дополнительная информация

Я использую NGINX на Docker и мне нужно сопоставить порт 80 с портом 8080 на моем Mac.

Я нашел вот это:

  1. http://localhost:8080/insightsустанавливает URL http://localhost/insights/в браузере
  2. http://localhost:8080/insights/ghostустанавливает URL-адрес наhttp://localhost:8080/ghost/
  3. http://localhost:8080/insights/устанавливает URL-адрес наhttp://localhost:8080/insights/
  4. http://localhost:8080/insights/ghost/устанавливает URL-адрес наhttp://localhost:8080/insights/ghost/

ЛЮБОЙ URL с конечным слешем, похоже, работает хорошо. Почему?

решение1

Ваш location /блок должен быть в конце файла. Блоки расположения обрабатываются по порядку, и первый соответствующий блок будет выполнен. Поскольку location /соответствует каждому запросу, он всегда будет выполнен.

В общем случае сначала следует разместить наиболее конкретные блоки, затем менее конкретные блоки и, наконец, для location /всех остальных запросов.

Ваш файл должен быть оформлен следующим образом:

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;
    }
}

Связанный контент