Представь, что тебе нужно развернуть прокси-сервер на Ubuntu — для тестирования, балансировки нагрузки или обеспечения безопасности внутренних сервисов. Давай разберем два основных подхода: классический прокси-сервер Squid и мощный Nginx в роли обратного прокси. Это руководство проведет тебя от установки до тонкой настройки.
Выбор решения: какой прокси тебе нужен?
Перед началом установки определи цель:
| Тип прокси | Использование | Инструмент |
|---|---|---|
| Прямой (Forward) | Кэширование трафика, контроль доступа, анонимизация | Squid |
| Обратный (Reverse) | Балансировка нагрузки, SSL-терминация, роутинг к backend-сервисам | Nginx |
Часть 1: Установка и настройка Squid Proxy на Ubuntu
Squid — это стандарт де-факто для прямых прокси-серверов. Давай установим его и настроим базовую конфигурацию.
Шаг 1: Установка Squid
sudo apt update
sudo apt install squid -y
Важно: После установки Squid автоматически запускается. Проверить статус можно командой sudo systemctl status squid.
Шаг 2: Базовая настройка конфигурации
Основной конфигурационный файл находится в /etc/squid/squid.conf. Сначала создадим backup:
sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.backup
Теперь отредактируем конфиг, разрешив доступ с локальной сети (например, 192.168.1.0/24):
sudo nano /etc/squid/squid.conf
Найди или добавь следующие строки:
# Порт, на котором будет работать прокси
http_port 3128
# ACL для локальной сети
acl local_network src 192.168.1.0/24
# Разрешаем доступ
http_access allow local_network
http_access deny all
Шаг 3: Применение конфигурации и настройка фаервола
# Проверка синтаксиса конфига
sudo squid -k parse
# Перезагрузка Squid
sudo systemctl reload squid
# Если используешь UFW, открой порт
sudo ufw allow 3128/tcp
sudo ufw reload
Опасно: Не оставляй прокси открытым для всего интернета без аутентификации! Это приведет к злоупотреблениям и возможным юридическим проблемам.
Часть 2: Настройка Nginx как обратного прокси сервера на Ubuntu
Nginx обратный прокси — это мощный инструмент для маршрутизации трафика к твоим приложениям. Давай настроим его для перенаправления запросов на локальный веб-сервер.
Шаг 1: Установка Nginx
sudo apt install nginx -y
Шаг 2: Создание конфигурации обратного прокси
Создадим новый конфигурационный файл для нашего проксируемого приложения (например, оно работает на порту 8080):
sudo nano /etc/nginx/sites-available/my_reverse_proxy
server {
listen 80;
server_name example.com www.example.com;
location / {
# Основная директива обратного прокси
proxy_pass http://localhost:8080;
# Стандартные заголовки для корректной работы
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Таймауты (важно для долгих запросов)
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
# Дополнительно: проксирование WebSocket
location /ws/ {
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Шаг 3: Активация конфигурации и тестирование
# Активируем конфиг
sudo ln -s /etc/nginx/sites-available/my_reverse_proxy /etc/nginx/sites-enabled/
# Проверяем синтаксис Nginx
sudo nginx -t
# Если всё OK, перезагружаем
sudo systemctl reload nginx
Профи-совет: Для продакшена обязательно настрой SSL/TLS терминацию на Nginx. Это снизит нагрузку на backend и упростит управление сертификатами.
Часть 3: Продвинутые сценарии и оптимизация
Балансировка нагрузки между несколькими backend-серверами
Nginx может распределять трафик между несколькими экземплярами приложения:
upstream backend_servers {
# Распределение по алгоритму round-robin
server 192.168.1.101:8080;
server 192.168.1.102:8080;
server 192.168.1.103:8080;
}
server {
listen 80;
location / {
proxy_pass http://backend_servers;
proxy_set_header Host $host;
}
}
Кэширование статики в Squid для ускорения
# В /etc/squid/squid.conf
cache_dir ufs /var/spool/squid 5000 16 256
maximum_object_size 256 MB
cache_mem 512 MB
Часто задаваемые вопросы (FAQ)
Как проверить, что прокси работает?
Для Squid: curl -x http://ваш_сервер:3128 http://ifconfig.me — должен вернуть IP твоего сервера. Для Nginx: просто открой в браузере домен, который настроил.
Можно ли использовать Squid и Nginx вместе?
Да, это распространенная архитектура: Nginx как обратный прокси и SSL-терминатор на фронте, а Squid для кэширования контента или контроля доступа к внешним ресурсам.
Как настроить аутентификацию на Squid?
Установи пакет apache2-utils, создай файл с паролями: htpasswd -c /etc/squid/passwords user1, затем в squid.conf добавь: auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwords и acl authenticated proxy_auth REQUIRED.
Какие порты по умолчанию используются?
Squid: 3128 (HTTP), 3130 (HTTPS). Nginx: 80 (HTTP), 443 (HTTPS). Всегда меняй порты по умолчанию в продакшене для безопасности.
Заключение
Установка прокси на Ubuntu — не просто выполнение команд, а создание инфраструктурного компонента. Ты теперь знаешь:
- Как установить и настроить Squid для прямого проксирования
- Как конфигурировать Nginx обратный прокси для маршрутизации к backend-сервисам
- Основы безопасности и оптимизации обоих решений
Начни с простой конфигурации, протестируй, затем добавляй аутентификацию, кэширование или балансировку нагрузки. Помни: логирование (/var/log/squid/, /var/log/nginx/) — твой лучший друг при отладке. Удачи в настройке!