[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog:post:vi:cac-hien-phan-proxy-trong-docker-compose":3},{"slug":4,"lang":5,"title":6,"summary":7,"date":8,"tags":9,"tag_slugs":15,"thumbnail_url":16,"translations":17,"body":18,"asset_base":19},"cac-hien-phan-proxy-trong-docker-compose","vi","Cấu hình proxy trong Docker Compose: Hướng dẫn chi tiết cho Node.js và Python","Học cách thiết lập và quản lý proxy trong môi trường Docker Compose, với ví dụ thực tế cho Node.js và Python, giúp tối ưu hiệu suất và bảo mật ứng dụng.","2026-07-11",[10,11,12,13,14],"proxy","docker","python","nodejs","networking",[10,11,12,13,14],"https://blog-api.ro-proxy.com/api/blog/posts/cac-hien-phan-proxy-trong-docker-compose/thumbnail.svg?lang=vi",[5],"## Giới thiệu\nTrong 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\n- Giảm nguy cơ chặn\n- Thông tin địa lý linh hoạt\n- Giám sát lưu lượng\nBạ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ó.\n\n\n## Khái niệm cơ bản\n\n| Thuật ngữ | Định nghĩa |\n|-----------|------------|\n| **Proxy** | Máy chủ trung gian chặn, chuyển tiếpromyalgia. |\n| **Docker Compose** | Công cụ quản lý multi‑container – một tệp `docker-compose.yml` định nghĩa services, networks, volumes. |\n| **Environment variables** | Biến môi trường dùng để truyền cấu hình (URL, port, auth) vào container. |\n\n\n## Kịch bản thực tế\n\n- **Node.js**: Scraper lấy dữ liệu từ trang web, cần tránh chặn.\n- **Python**: Script gửi request tới API, muốn kiểm soát địa lý.\n- **Proxy service**: Sử dụng RoProxy API công bố thông tin proxy (IP, port, auth). | \n\n\n## 1. Thiết lập Proxy Service\n\n**A. Sử dụng RoProxy**\n\nRoProxy cung cấp proxy qua HTTP/HTTPS Quarter. Bạn chỉ cần lấy một token và cấu hình endpoint.\n\n```yaml\nversion: \"3.9\"\nservices:\n  roproxy:\n    image: curlimages/curl:latest\n    command: sh -c \"while true; do personalised_renew; sleep 60; done\"\n    environment:\n      - RP completamente\"\n```\n\nThự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`.\n\n**B. Sử dụng Squid**\n\n```yaml\n  squid:\n    image: sameersbn/squid:latest\n    restart: unless-stopped\n    ports:\n      - \"3128:3128\"\n    environment:\n      - SQUID_CONF_TUNNEL=1\n    volumes:\n      - ./squid.conf:/etc/squid/squid.conf:ro\n```\n\nTrong `squid.conf`:\n\n```\nhttp_port 3128\nacl allowed_src src 0.0.0.0/0\nhttp_access allow allowed_src\n# Push authentication if needed\n```\n\n\n## 2. Cấu hình ứng dụng Node.js\n\n1. Cài đặt dependency:\n\n```bash\nnpm install axios https-proxy-agent\n```\n Scandinavian\n2. Thiết lập môi trường trong `docker-compose.yml`:\n\n```yaml\n  nodeapp:\n    build: ./nodeapp\n    depends_on:\n      - squid\n    environment:\n      - HTTP_PROXY=http://squid:3128\n      - HTTPS_PROXY=http://squid:3128\n```\n\n3. Mã nguồn (index.js):\n\n```js\nconst axios = require('axios');\nconst HttpsProxyAgent = require('https-proxy-agent');\n\nconst proxy = process.env.HTTPS_PROXY || 'http://squid:3128';\nconst agent = new HttpsProxyAgent(proxy);\n\naxios.get('https://jsonplaceholder.typicode.com/todos/1', {\n  httpsAgent: agent,\n  proxy: false, // disable axios default klkh\n})\n  .then(res => console.log(res.data))\n  .catch(err => console.error(err));\n```\n\n\n## 3. Cấu hình ứng dụng Python\n\n1. Cài đặt dependency:\n\n```bash\npip install requests\n```\n\n2. Cấu hình `docker-compose.yml`:\n\n```yaml\n  pythonapp:\n    build: ./pythonapp\n    depends_on:\n      - squid\n    environment:\n      - HTTP_PROXY=http://squid:3128\n      - HTTPS_PROXY=http://squid:3128\n```\n\n3. Mã nguồn (app.py):\n\n```python\nimport os\nimport requests\n\nproxy = {\n    'http': os.getenv('HTTP_PROXY'),\n    'https': os.getenv('HTTPS_PROXY')\n}\n\nres = requests.get('https://api.ipify.org?format=json', proxies=proxy)\nprint('IP via proxy:', res.json())\n```\n\n\n## 4. Xây dựng Dockerfile\n\n### Node.js\n\n```Dockerfile\nFROM node:20-alpine\nWORKDIR /usr/src/app\nCOPY package*.json ./\nRUN npm ci\nCOPY . .\nCMD [\"node\", \"index.js\"]\n```\n\n### Python\n\n```Dockerfile\nFROM python:3.12-slim\nWORKDIR /app\nCOPY requirements.txt .\nRUN pip install --no-cache-dir -r requirements.txt\nCOPY . .\nCMD [\"python\", \"app.py\"]\n```\n\n\n## 5. Thiết lập network\n\nDocker 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:\n\n```yaml\nnetworks:\n  proxy-net:\n    driver: bridge\n```\n\nvà sau đó gắn mọi service vào mạng này:\n\n```yaml\nservices:\n  squid:\n    networks:\n      - proxy-net\n  nodeapp:\n    networks:\n      - proxy-net\n  pythonapp:\n    networks:\n      - proxy-net\n```\n\n\n## 6. Kiểm tra kết nối\n\n1. Khởi động toàn bộ stack:\n\n```bash\ndocker compose up --build\n```\n\n2. Kiểm tra log của `nodeapp` và `pythonapp`. Nếu mọi thứ được cấu hình đúng, chúng sẽ hiển thị IP của proxy.\n\n3. Kiểm tra tốc độ:\n\n```bash\ndocker compose exec nodeapp curl -s https://www.speedtest.net/ | grep -i latency\n```\n\n\n## 7. Thêm tính năng xoay proxy\n\nNế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.\n\n```js\nconst rp = require('roproxy-client');\nconst client = new rp({ token: process.env.ROPROXY_TOKEN });\nconst {ip, port} = await client.getRandomProxy();\nprocess.env.HTTP_PROXY = `http://${ip}:${port}`;\n```\n\n\n## 8. Bảo mật\n\n- **Không lưu token trong Dockerfile** – dùng `docker compose --env-file` hoặc `ENV`.\n- **Sử dụng `squid` với authentication** nếu cần hạn chế truy cập.\n- **Phiên bản container**: sử dụng Alpine hoặc slim images để giảm bề mặt tấn công.\n\n\n## 9. Tổng kết oproxy trong Docker Compose\n\n- Đặt proxy như một service riêng giúp **tách biệt** logic tác vụ pornografia.\n- Dùng biến môi trường để **điều chỉnh** proxy cho từng ứng dụng.\n- Có thể **xoay** proxy qua API hoặc script.\n- Đảm bảo **bảo mật** હવે thực hiện cấu hình đúng.\n\n\n## 10. Tài nguyên thêm\n\n- [Docker Compose Official Docs](https://docs.docker.com/compose/)\n- [RoProxy API](https://roproxy.com/docs/api)\n- [Squid Proxy Configuration](http://www.squid-cache.org/Doc/)\n- [Axios Proxy Docs](https://axios-http.com/docs/req_config)\n- [Requests Proxy Guide](https://requests.readthedocs.io/en/latest/user/advanced/#proxies)\n","https://blog-api.ro-proxy.com/api/blog/posts/cac-hien-phan-proxy-trong-docker-compose/assets"]