คำแนะนำนี้จะอธิบายวิธีการใช้ Caddy ซึ่งเป็นเว็บเซิร์ฟเวอร์ประสิทธิภาพสูงและใช้งานง่าย เพื่อเพิ่มประสิทธิภาพในการตั้งค่าเซิร์ฟเวอร์ Outline ความสามารถและความยืดหยุ่นในการกำหนดค่าของ HTTPS แบบอัตโนมัติของ Caddy ทำให้เป็นตัวเลือกที่เหมาะสมอย่างมากในการให้บริการเซิร์ฟเวอร์ Outline โดยเฉพาะอย่างยิ่งเมื่อใช้การส่งผ่าน WebSocket
Caddy คืออะไร
Caddy เป็นเว็บเซิร์ฟเวอร์แบบโอเพนซอร์สที่มีชื่อเสียงในเรื่องของความสะดวกในการใช้งาน, HTTPS แบบอัตโนมัติ และรองรับโปรโตคอลได้หลากหลายรูปแบบ ซึ่งช่วยเพิ่มความสะดวกในการกำหนดค่าเว็บเซิร์ฟเวอร์ และยังมีฟีเจอร์ต่างๆ เช่น
- HTTPS แบบอัตโนมัติ: Caddy จะรับและต่ออายุใบรับรอง TLS โดยอัตโนมัติเพื่อรักษาการเชื่อมต่อที่ปลอดภัย
- รองรับ HTTP/3: Caddy รองรับโปรโตคอล HTTP/3 แบบใหม่ล่าสุด เพื่อการรับส่งข้อมูลเว็บที่รวดเร็วและมีประสิทธิภาพยิ่งขึ้น
- เพิ่มส่วนขยายได้ด้วยปลั๊กอิน: Caddy เพิ่มส่วนขยายได้ด้วยปลั๊กอินเพื่อรองรับฟังก์ชันต่างๆ รวมถึงพร็อกซีแบบย้อนกลับและการจัดสรรภาระงาน
ขั้นตอนที่ 1: สิ่งที่ต้องดำเนินการก่อน
- ดาวน์โหลดและติดตั้ง
xcaddy
ขั้นตอนที่ 2: กำหนดค่าโดเมนของคุณ
ก่อนเริ่มใช้งาน Caddy โปรดตรวจสอบว่าชื่อโดเมนของคุณได้รับการกำหนดค่าอย่างถูกต้องให้ชี้ไปยังที่อยู่ IP เซิร์ฟเวอร์ของคุณแล้ว
- ตั้งค่าระเบียน A/AAAA: ลงชื่อเข้าใช้ผู้ให้บริการ DNS และตั้งค่าระเบียน A และ AAAA เพื่อให้โดเมนชี้ไปยังที่อยู่ IPv4 และ IPv6 ของเซิร์ฟเวอร์ (ตามลำดับ)
ยืนยันระเบียน DNS: ตรวจสอบว่าตั้งค่าระเบียน DNS ของคุณไว้อย่างถูกต้องแล้วด้วยการค้นหาที่ได้รับอนุญาต
curl "https://cloudflare-dns.com/dns-query?name=DOMAIN_NAME&type=A" \ -H "accept: application/dns-json"
ขั้นตอนที่ 3: สร้างและเรียกใช้บิลด์ Caddy ที่กำหนดเอง
เมื่อใช้ xcaddy
คุณสามารถสร้างไบนารี caddy
แบบกำหนดเองที่มีทั้งโมดูลเซิร์ฟเวอร์หลักของ Outline และโมดูลส่วนขยายเซิร์ฟเวอร์อื่นๆ ที่ต้องมี
xcaddy build \
# The example uses a YAML config, so include a YAML config adapter module.
--with github.com/iamd3vil/caddy_yaml_adapter \
# The Outline core server module.
--with github.com/Jigsaw-Code/outline-ss-server/outlinecaddy
ขั้นตอนที่ 4: กำหนดค่าและเรียกใช้เซิร์ฟเวอร์ Caddy ด้วย Outline
สร้างไฟล์ config.yaml
ใหม่ที่มีการกำหนดค่าต่อไปนี้
apps:
http:
servers:
server1:
listen:
- ":443"
routes:
- match:
- host:
- 'DOMAIN_NAME'
- path:
- "/TCP_PATH"
handle:
- handler: websocket2layer4
type: stream
connection_handler: ss1
- match:
- host:
- 'DOMAIN_NAME'
- path:
- "/UDP_PATH"
handle:
- handler: websocket2layer4
type: packet
connection_handler: ss1
outline:
shadowsocks:
replay_history: 10000
connection_handlers:
- name: ss1
handle:
handler: shadowsocks
keys:
- id: user-1
cipher: chacha20-ietf-poly1305
secret: SHADOWSOCKS_SECRET
การกำหนดค่านี้สอดคล้องกับกลยุทธ์แบบ Shadowsocks-over-WebSockets โดยที่เว็บเซิร์ฟเวอร์จะรอการเชื่อมต่อในพอร์ต 443
และยอมรับการรับส่งข้อมูล Shadowsocks ที่ห่อหุ้มด้วย WebSocket ทั้งในแบบ TCP และ UDP โดยส่งผ่านเส้นทาง TCP_PATH และ UDP_PATH (ตามลำดับ)
เรียกใช้เซิร์ฟเวอร์ Caddy ที่มี Outline เป็นส่วนขยายโดยใช้การกำหนดค่าที่สร้างขึ้น
caddy run --config config.yaml --adapter yaml --watch
ดูตัวอย่างเพิ่มเติมเกี่ยวกับการกำหนดค่าได้ที่ รายงาน GitHub outline-ss-server/outlinecaddy ของเรา
ขั้นตอนที่ 5: สร้างคีย์การเข้าถึงแบบไดนามิก
สร้างไฟล์ YAML คีย์การเข้าถึงไคลเอ็นต์สำหรับผู้ใช้ โดยใช้รูปแบบการกำหนดค่าขั้นสูงและระบุอุปกรณ์ปลายทาง WebSocket ที่กำหนดค่าไว้ก่อนหน้านี้ในฝั่งเซิร์ฟเวอร์
transport:
$type: tcpudp
tcp:
$type: shadowsocks
endpoint:
$type: websocket
url: wss://DOMAIN_NAME/TCP_PATH
cipher: chacha20-ietf-poly1305
secret: SHADOWSOCKS_SECRET
udp:
$type: shadowsocks
endpoint:
$type: websocket
url: wss://DOMAIN_NAME/UDP_PATH
cipher: chacha20-ietf-poly1305
secret: SHADOWSOCKS_SECRET
หลังจากสร้างไฟล์ YAML ของคีย์การเข้าถึงแบบไดนามิกแล้ว คุณต้องส่งไฟล์ดังกล่าวให้ผู้ใช้ โดยสามารถฝากไฟล์ไว้ในบริการเว็บโฮสติ้งแบบคงที่หรือจะสร้างไฟล์แบบไดนามิกก็ได้ โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้คีย์การเข้าถึงแบบไดนามิก
ขั้นตอนที่ 6: เชื่อมต่อกับไคลเอ็นต์ Outline
ใช้แอปพลิเคชันไคลเอ็นต์ Outline แบบทางการ (เวอร์ชัน 1.15.0 ขึ้นไป) และเพิ่มคีย์การเข้าถึงแบบไดนามิกที่สร้างขึ้นใหม่เป็นรายการเซิร์ฟเวอร์ คลิกเชื่อมต่อเพื่อเริ่มการสร้างอุโมงค์เสมือนไปยังเซิร์ฟเวอร์โดยใช้การกำหนดค่า Shadowsocks-over-WebSockets
ใช้เครื่องมืออย่าง IPInfo เพื่อยืนยันว่าคุณกำลังท่องอินเทอร์เน็ตผ่านเซิร์ฟเวอร์ Outline