Как использовать Nginx в качестве прокси-сервера HTTP / HTTPS? [закрыто]

16

Можно ли использовать Nginx в качестве HTTP / HTTPS-прокси?

влад
источник

Ответы:

14

После некоторых испытаний я нашел подходящую для меня конфигурацию.

server {
  server_name ~^(www\.)?(?<domain>.+)$;
  access_log /var/log/nginx/proxy.access.log main;
  error_log /var/log/nginx/proxy.error.log crit;
  listen 10.255.1.13:8080;
  resolver 8.8.8.8;
  location / {
    proxy_pass http://$domain;
    proxy_redirect off;
    proxy_set_header Host $host;
    # Optional headers 
    # proxy_set_header X-Real-IP $remote_addr;
    # proxy_set_header X-Forwarded-For
    # $proxy_add_x_forwarded_for;
  }
}

Эта конфигурация работает только для HTTP, а не для HTTPS.

влад
источник
4
Молодец! Несколько намеков. 1: listen ... default_server. 2: server_name ""или server_name _. 2: proxy_pass $scheme://$http_host. Ограничения: привязка к восходящим потокам только с портом 80; не обрабатывает перенаправляет себя.
Александр Азаров
Схема $ полезна только в том случае, если vhost также прослушивает https - но у вас есть риск посредника и ошибки сертификата https, с которыми приходится сталкиваться ... Обе эти проблемы
важны
8

я думаю, что короткий ответ - нет, он не был написан для прямого прокси

ОБНОВИТЬ

уточнить мое утверждение выше:

NGINX никогда не был написан с учетом прямого прокси-сервера - хотя удаленно можно каким-то образом заставить конфигурацию выполнить то, что вы хотите, вы должны понимать следующие ограничения:

  • Поддержка кеша почти не существует (одна из основных причин использования прокси)
  • Не могу использовать для чего-либо, кроме трафика порта 80 (т.е. без входа в cpanel через него)
  • Нет поддержки трафика на основе SSL
  • Отсутствует поддержка стандартных заголовков прокси и заголовков кэша http (насколько я понимаю, они просто проходят через
  • Отсутствует поддержка других протоколов, поддерживающих прокси-серверы - например, VPN и т. Д.

Возможные другие соображения, которые неизвестны в это время:

  • Возможно DoS вашего прокси, так как нет реальной возможности точного контроля доступа / аутентификации (nginx поддерживает разные методы контроля доступа, но неясно, как это может вести себя в контексте прямого прокси)
  • Возможные угрозы безопасности для машины, на которой установлен nginx, потому что могут быть возможные дыры в безопасности, не учитываемые из-за того, что он не предназначен для работы
anthonysomerset
источник
Контрпример, см .: ef.gy/using-nginx-as-a-proxy-server
kkurian
возможно, мой ответ должен был быть более ясным, поскольку он не был предназначен для проксирования вперед - попытки исправления обезьяны не будут предлагать полную поддержку прокси-сервера, как, например, проксирование запросов на нестандартные (порт 80) порты
anthonysomerset
3

Если вы хотите использовать прокси HTTP / HTTPS, вам следует использовать Squid. Это было написано, чтобы сделать именно это. Nginx был написан для использования в качестве обратного прокси-сервера и балансировщика нагрузки, но не для прямого прокси.

MikeyB
источник
Я знаю о squid / упс / tinyproxy / и т.д. Я просто задаю этот вопрос ради академического интереса
влад