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

Кеш прокси Nginx (proxy_pass $ request_uri;)

Мне нужно создать прокси-сервер с помощью nginx. Если я получу доступ http://myweb.com/http://www.target.com/ proxy_pass должен быть http://www.target.com/

Вот моя конфигурация:

location / {
    proxy_pass $request_uri;
    proxy_cache_methods GET;
    proxy_set_header   Referer   "$request_uri";
    proxy_redirect off;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_ignore_headers  Cache-Control;
    proxy_hide_header Pragma;
    proxy_hide_header Set-Cookie;
    proxy_set_header Cache-Control Public;
    proxy_cache cache;
    proxy_cache_valid  200 10h;
    proxy_cache_valid  301 302 1h;
    proxy_cache_valid any 1h;
}

Вот ошибка журнала

2013/02/05 12:58:51 [error] 2118#0: *8 invalid URL prefix in "/http://www.target.com/", client: 108.59.8.83, server: myweb.com, request: "HEAD /http://www.target.com/ HTTP/1.1", host: "myweb.com"

Попробуйте модуль карты nginx, чтобы определить переменную так, как вы хотите:

map $request_uri $proxy_pass_target { 
  default "http://myweb.com"; 
  ~^/(.+)$ $key;
}

Тогда вы можете использовать $proxy_pass_target в твоем proxy_pass директива вместо $request_uri.

Обратите внимание, что я не проверял, работает ли это. Возможно, вам нужно настроить регулярное выражение. Дополнительную документацию можно найти здесь: http://wiki.nginx.org/HttpMapModule