Kỹ Thuật
Triển khai
Hướng Dẫn Cấu Hình IIS 10 Reverse Proxy & URL Rewrite (FastAPI)
IIS Configuration Guide v0.1 — CXK Tuổi Bạc
Phiên bản: 0.1 DRAFT
Server: Windows Server 2022 + IIS 10
Backend: FastAPI (Python 3.12) via HttpPlatformHandler
1. Architecture Overview
NCT Browser/Voice ──► IIS (port 443/80)
│
├─► Static files (HTML/CSS/JS)
│
└─► /api/* ──► HttpPlatformHandler
│
└─► FastAPI (uvicorn, port 8000)
│
├─► Knowledge Base (files/MSSQL)
├─► LLM API (Gemini/GPT)
└─► Audit Log (MSSQL)
2. Prerequisites
# Install IIS features
Install-WindowsFeature Web-Server,Web-WebSockets,Web-Asp-Net45 -IncludeManagementTools
# Install HttpPlatformHandler v1.2
# Download from: https://www.iis.net/downloads/microsoft/httpplatformhandler
# Or via Web Platform Installer
# Install Python 3.12
# Download from: https://www.python.org/downloads/
# Ensure added to PATH
# Install FastAPI dependencies
pip install fastapi uvicorn python-multipart pyodbc
3. IIS Site Configuration
web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="httpPlatformHandler"
path="api/*"
verb="*"
modules="httpPlatformHandler"
resourceType="Unspecified" />
</handlers>
<httpPlatform
processPath="C:\Python312\python.exe"
arguments="-m uvicorn app.main:app --host 127.0.0.1 --port %HTTP_PLATFORM_PORT%"
stdoutLogEnabled="true"
stdoutLogFile=".\logs\stdout"
startupTimeLimit="60"
requestTimeout="00:05:00">
<environmentVariables>
<environmentVariable name="PYTHONPATH" value="." />
<environmentVariable name="CXK_DB_CONNECTION"
value="Driver={ODBC Driver 18 for SQL Server};Server=localhost;Database=CXK_TuoiBac;Trusted_Connection=yes;" />
<environmentVariable name="CXK_ENV" value="production" />
</environmentVariables>
</httpPlatform>
<!-- Static files -->
<staticContent>
<mimeMap fileExtension=".json" mimeType="application/json" />
<mimeMap fileExtension=".woff2" mimeType="font/woff2" />
</staticContent>
<!-- Security headers -->
<httpProtocol>
<customHeaders>
<add name="X-Content-Type-Options" value="nosniff" />
<add name="X-Frame-Options" value="DENY" />
<add name="X-XSS-Protection" value="1; mode=block" />
<add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains" />
<add name="Content-Security-Policy"
value="default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com" />
</customHeaders>
</httpProtocol>
<!-- HTTPS redirect -->
<rewrite>
<rules>
<rule name="HTTP to HTTPS redirect" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}"
redirectType="Permanent" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
4. SSL Certificate
# Option 1: Let's Encrypt via win-acme
# Download: https://github.com/win-acme/win-acme
# Option 2: Self-signed for dev
New-SelfSignedCertificate -DnsName "cxk.local" -CertStoreLocation cert:\LocalMachine\My
5. Application Pool Settings
| Setting | Value |
|---|---|
| .NET CLR Version | No Managed Code |
| Managed Pipeline Mode | Integrated |
| Identity | ApplicationPoolIdentity |
| Idle Timeout | 0 (disable) |
| Recycling | 1x/day at 3:00 AM |
6. Firewall Rules
# Allow HTTPS
New-NetFirewallRule -DisplayName "CXK HTTPS" -Direction Inbound -Protocol TCP -LocalPort 443 -Action Allow
# Allow HTTP (redirect only)
New-NetFirewallRule -DisplayName "CXK HTTP" -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow
# Block direct FastAPI access
New-NetFirewallRule -DisplayName "Block FastAPI Direct" -Direction Inbound -Protocol TCP -LocalPort 8000 -Action Block
7. Health Check Endpoint
FastAPI should expose GET /api/health:
{
"status": "healthy",
"version": "0.1.0",
"db_connected": true,
"kb_items_count": 19,
"timestamp": "2026-09-28T10:00:00Z"
}
IIS Health Check monitoring via Application Request Routing.
8. Deployment Checklist
- [ ] Windows Server 2022 updated
- [ ] IIS installed with WebSockets + HttpPlatformHandler
- [ ] Python 3.12 installed
- [ ] MSSQL 2022 running, CXK_TuoiBac database created
- [ ] SSL certificate installed
- [ ] web.config deployed
- [ ] FastAPI app deployed
- [ ] Firewall rules applied
- [ ] Health check passing
- [ ] Audit log writing to MSSQL
Khuyến Cáo & Miễn Trừ Trách Nhiệm Y Khoa
Hệ thống Trợ lý AI đóng vai trò hỗ trợ giáo dục sức khỏe và hướng dẫn tự chăm sóc hệ vận động. AI không thay thế chẩn đoán hoặc chỉ định điều trị của bác sĩ chuyên khoa. Khi xuất hiện các triệu chứng cờ đỏ (sốt, sụt cân, đau dữ dội, mất kiểm soát tiêu tiểu), người bệnh cần đến ngay cơ sở y tế gần nhất.