Quay lại danh sách
Cấu hình proxy trong Docker Compose: Hướng dẫn chi tiết cho Node.js và Python

Cấu hình proxy trong Docker Compose: Hướng dẫn chi tiết cho Node.js và Python

11 tháng 7, 2026

Giới thiệu

Trong thế giới phát triển сутдых ứng dụng hiện đại, việc triển khai các dịch vụ trong container là chuẩn mực. Khi ứng dụng cần truy cập Definition an external API, web scraping hoặc bất kỳ dịch vụ nào bên ngoài, proxy thường là công cụ giúp

  • Giảm nguy cơ chặn
  • Thông tin địa lý linh hoạt
  • Giám sát lưu lượng Bạn có thể tự triển khai proxy như Squid, Nginx hay sử dụng dịch vụ proxy 3rd‑party như RoProxy. Mỗi phương pháp đều có ưu nhược điểm riêng, nhưng cách đơn giản nhất để quản lý proxy trong môi trường Docker Compose là đóng gói proxy dưới dạng một service riêng, sau đó cấu hình các container khác để truy xuất qua nó.

Khái niệm cơ bản

Thuật ngữ Định nghĩa
Proxy Máy chủ trung gian chặn, chuyển tiếpromyalgia.
Docker Compose Công cụ quản lý multi‑container – một tệp docker-compose.yml định nghĩa services, networks, volumes.
Environment variables Biến môi trường dùng để truyền cấu hình (URL, port, auth) vào container.

Kịch bản thực tế

  • Node.js: Scraper lấy dữ liệu từ trang web, cần tránh chặn.
  • Python: Script gửi request tới API, muốn kiểm soát địa lý.
  • Proxy service: Sử dụng RoProxy API công bố thông tin proxy (IP, port, auth). |

1. Thiết lập Proxy Service

A. Sử dụng RoProxy

RoProxy cung cấp proxy qua HTTP/HTTPS Quarter. Bạn chỉ cần lấy một token và cấu hình endpoint.

version: "3.9"
services:
  roproxy:
    image: curlimages/curl:latest
    command: sh -c "while true; do personalised_renew; sleep 60; done"
    environment:
      - RP completamente"

Thực tế, bạn không cần container riêng cho RoProxy vì bạn gọi API trực tiếp. Tuy nhiên, để giữ nguyên kiểu service trong compose, bạn có thể tạo một container dummy như trên, hoặc sử dụng một image có sẵn như squid.

B. Sử dụng Squid

  squid:
    image: sameersbn/squid:latest
    restart: unless-stopped
    ports:
      - "3128:3128"
    environment:
      - SQUID_CONF_TUNNEL=1
    volumes:
      - ./squid.conf:/etc/squid/squid.conf:ro

Trong squid.conf:

http_port 3128
acl allowed_src src 0.0.0.0/0
http_access allow allowed_src
# Push authentication if needed

2. Cấu hình ứng dụng Node.js

  1. Cài đặt dependency:
npm install axios https-proxy-agent

Scandinavian 2. Thiết lập môi trường trong docker-compose.yml:

  nodeapp:
    build: ./nodeapp
    depends_on:
      - squid
    environment:
      - HTTP_PROXY=http://squid:3128
      - HTTPS_PROXY=http://squid:3128
  1. Mã nguồn (index.js):
const axios = require('axios');
const HttpsProxyAgent = require('https-proxy-agent');

const proxy = process.env.HTTPS_PROXY || 'http://squid:3128';
const agent = new HttpsProxyAgent(proxy);

axios.get('https://jsonplaceholder.typicode.com/todos/1', {
  httpsAgent: agent,
  proxy: false, // disable axios default klkh
})
  .then(res => console.log(res.data))
  .catch(err => console.error(err));

3. Cấu hình ứng dụng Python

  1. Cài đặt dependency:
pip install requests
  1. Cấu hình docker-compose.yml:
  pythonapp:
    build: ./pythonapp
    depends_on:
      - squid
    environment:
      - HTTP_PROXY=http://squid:3128
      - HTTPS_PROXY=http://squid:3128
  1. Mã nguồn (app.py):
import os
import requests

proxy = {
    'http': os.getenv('HTTP_PROXY'),
    'https': os.getenv('HTTPS_PROXY')
}

res = requests.get('https://api.ipify.org?format=json', proxies=proxy)
print('IP via proxy:', res.json())

4. Xây dựng Dockerfile

Node.js

FROM node:20-alpine
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm ci
COPY . .
CMD ["node", "index.js"]

Python

FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]

5. Thiết lập network

Docker Compose sẽ tự tạo một network nội bộ (ví dụ default). Tuy nhiên işin rõ ràng, hãy khai báo:

networks:
  proxy-net:
    driver: bridge

và sau đó gắn mọi service vào mạng này:

services:
  squid:
    networks:
      - proxy-net
  nodeapp:
    networks:
      - proxy-net
  pythonapp:
    networks:
      - proxy-net

6. Kiểm tra kết nối

  1. Khởi động toàn bộ stack:
docker compose up --build
  1. Kiểm tra log của nodeapppythonapp. Nếu mọi thứ được cấu hình đúng, chúng sẽ hiển thị IP của proxy.

  2. Kiểm tra tốc độ:

docker compose exec nodeapp curl -s https://www.speedtest.net/ | grep -i latency

7. Thêm tính năng xoay proxy

Nếu bạn muốn xoay proxy (rotating) từ RoProxy, bạn có thể lưu token trong một file JSON, và mỗi lần khởi động container lấy một IP mới.

const rp = require('roproxy-client');
const client = new rp({ token: process.env.ROPROXY_TOKEN });
const {ip, port} = await client.getRandomProxy();
process.env.HTTP_PROXY = `http://${ip}:${port}`;

8. Bảo mật

  • Không lưu token trong Dockerfile – dùng docker compose --env-file hoặc ENV.
  • Sử dụng squid với authentication nếu cần hạn chế truy cập.
  • Phiên bản container: sử dụng Alpine hoặc slim images để giảm bề mặt tấn công.

9. Tổng kết oproxy trong Docker Compose

  • Đặt proxy như một service riêng giúp tách biệt logic tác vụ pornografia.
  • Dùng biến môi trường để điều chỉnh proxy cho từng ứng dụng.
  • Có thể xoay proxy qua API hoặc script.
  • Đảm bảo bảo mật હવે thực hiện cấu hình đúng.

10. Tài nguyên thêm