Я пытаюсь получить доступ к серверу за другим с помощью обратного прокси. «Главный» сервер находится за 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;
}