Cấu hình ứng dụng cho web
Khi ai đó mở web của bạn, request đi qua Cloudflare, tới máy chủ trung gian của Zyhost, rồi mới vào ứng dụng trên server bằng http thường. Nhờ vậy bạn không phải lo chứng chỉ https, nhưng ứng dụng cần biết mình đang đứng sau một lớp chuyển tiếp (reverse proxy) để chạy đúng.
Nghe đúng cổng và đúng địa chỉ
Phần tiêu đề “Nghe đúng cổng và đúng địa chỉ”Ứng dụng phải nghe trên 0.0.0.0 và cổng trong biến môi trường SERVER_PORT. Nếu nghe trên 127.0.0.1, Zyhost không kết nối vào được và web sẽ hiện trang Server chưa phản hồi.
const express = require('express');const app = express();
// Tin header X-Forwarded-* từ Zyhost: req.ip là IP thật, req.secure là true.app.set('trust proxy', true);
app.get('/', (req, res) => res.send(`Xin chào ${req.ip}`));
app.listen(process.env.SERVER_PORT, '0.0.0.0');import osfrom flask import Flask, requestfrom werkzeug.middleware.proxy_fix import ProxyFix
app = Flask(__name__)# Tin header X-Forwarded-* từ Zyhost: request.remote_addr là IP thật, url_for tạo link https.app.wsgi_app = ProxyFix(app.wsgi_app, x_for=1, x_proto=1, x_host=1)
@app.get("/")def index(): return f"Xin chào {request.remote_addr}"
app.run(host="0.0.0.0", port=int(os.environ["SERVER_PORT"]))import osimport uvicornfrom fastapi import FastAPI, Request
app = FastAPI()
@app.get("/")def index(request: Request): return {"ip": request.client.host}
# proxy_headers để uvicorn đọc IP thật và https từ header X-Forwarded-*.uvicorn.run(app, host="0.0.0.0", port=int(os.environ["SERVER_PORT"]), proxy_headers=True, forwarded_allow_ips="*")IP người truy cập và https
Phần tiêu đề “IP người truy cập và https”Vì request đi qua lớp chuyển tiếp, địa chỉ kết nối mà ứng dụng thấy là của Zyhost, không phải của người truy cập. Zyhost gửi kèm ba header để bạn biết thông tin thật:
| Header | Ý nghĩa |
|---|---|
X-Forwarded-For |
IP thật của người truy cập |
X-Forwarded-Proto |
Giao thức người truy cập dùng, luôn là https |
X-Forwarded-Host |
Tên miền người truy cập mở, ví dụ shop-guest.zyhost.app |
Cookie
Phần tiêu đề “Cookie”Zyhost sửa cookie ứng dụng gửi về trước khi tới trình duyệt:
- Mọi cookie đều được thêm thuộc tính
Secure, nên chỉ gửi qua https. - Nếu cookie có thuộc tính
Domain, nó bị đổi thành đúng tên miền của web. Ứng dụng không đặt được cookie cho cảzyhost.app, nên web của người khác cũng không đọc hay ghi đè được cookie của bạn.
Các thuộc tính khác như HttpOnly, SameSite hay thời hạn được giữ nguyên.
Giới hạn
Phần tiêu đề “Giới hạn”| Mục | Giới hạn |
|---|---|
| Tốc độ request | 50 request mỗi giây cho mỗi web, cho phép vượt tạm tới 200 request. Vượt nữa sẽ nhận mã 429 |
| Kích thước request | Tối đa 100 MB, ví dụ khi tải file lên |
| Thời gian phản hồi | Ứng dụng cần trả lời trong 100 giây |
| WebSocket | Dùng được bình thường |
Cache
Phần tiêu đề “Cache”Cloudflare chỉ lưu cache khi ứng dụng gửi header Cache-Control cho phép, ví dụ Cache-Control: public, max-age=3600 cho ảnh hay file CSS. Không có header này thì mọi request đều đi thẳng vào ứng dụng. Nhờ vậy trang có nội dung riêng cho từng người dùng không bao giờ bị lộ qua cache.
security.txt
Phần tiêu đề “security.txt”Nếu ứng dụng có đường dẫn /.well-known/security.txt, Zyhost dùng nội dung của bạn. Nếu không có, đường dẫn này chuyển về file liên hệ bảo mật của Zyhost.