Назад | Перейти на главную страницу

Папка обратного прокси nginx

Я пытаюсь получить доступ к серверу за другим с помощью обратного прокси. «Главный» сервер находится за mydomain.com, и я хотел бы получить доступ ко второму, используя mydomain.com/test. На данный момент работает только mydomain.com/test.

Но если я пытаюсь получить доступ к mydomain.com/test/myfiles, я перенаправляюсь на mydomain.com/myfiles, которого не существует, потому что этот URL-адрес нацелен на «основной» сервер, поэтому появляется 404 not found. Я пробовал несколько вещей с proxy_redirect, переписывал, но ничего не работало.

server {
    listen   80;
    index index.php index.html index.htm;
    root /path/to/content;
    server_name localhost mydomain.com;

    location / {
        try_files $uri $uri/ =404; #/index.html;
    }

    location /test/ {
        proxy_pass http://192.168.1.202/;
        proxy_set_header Host $host;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }
}

curl -I "http://192.168.1.202" -H "Host: mydomain.com" на основном сервере дает:

HTTP/1.1 301 Moved Permanently
Server: nginx/1.2.1
Date: Sun, 02 Nov 2014 15:02:56 GMT
Content-Type: text/html
Content-Length: 184
Location: example.com/myfiles
Connection: keep-alive

Проблема в том, что при использовании завершающей косой черты с proxy_pass директива, поведение по умолчанию для proxy_redirect заключается в следующем:

location /test/ {
    proxy_pass http://192.168.1.202/;
    proxy_set_header Host $host;
}

Такой же как :

location /test/ {
    proxy_pass http://192.168.1.202/;
    proxy_redirect http://192.168.1.202/ /test/;
    proxy_set_header Host $host;
}

Итак, учитывая вывод curl, вы должны настроить это:

location /test/ {
    proxy_pass http://192.168.1.202/;
    proxy_redirect http://$host/ /test/;
    proxy_set_header Host $host;
}