Pangkalahatang-ideya ng produkto
Isang server sa pagitan ng network at ng iyong aplikasyon.
Ang Webship ay isang self-hosted na Rust edge at static web server. Isang runtime ang nagtatapos ng mga modernong protocol, nagpapatupad ng patakaran sa edge, naghahain ng mga file, at nagpo-proxy ng mga kahilingan ng aplikasyon.
Makabagong transport
Tanggapin ang HTTP/1.1, HTTP/2, at HTTP/3, na may TLS 1.3 at isang opsyonal na WebTransport endpoint.
Static at proxied na paghahatid
Maglingkod ng mga static na file gamit ang mga validator at precompressed na sidecar, o i-proxy ang traffic ng application sa pamamagitan ng bounded upstream pools.
Ligtas na mga default
Magsimula sa WAF, mga kontrol sa DDoS, hamon sa bot, mga response security header, API Shield, at proteksyon ng dot-file na naka-enable.
Observable na operasyon
Gumamit ng authenticated statistics, Prometheus metrics, request IDs, graceful reloads, at ang opsyonal na MCP control plane.
Mabilis na pagsisimula
Mula sa release binary hanggang sa malusog na tagapakinig.
Magsimula sa loopback, i-validate ang lahat bago mag-bind, at beripikahin ang built-in na health response bago magdagdag ng pampublikong traffic.
Ihanda ang mga file
Ilagay ang release binary, ang TOML configuration nito, ang static root, at anumang naka-configure na TLS certificate at key files sa host.
I-validate at suriin
Patakbuhin ang parehong configuration commands. Ayusin ang unang error at suriin ang redacted effective result bago magsimula.
Magsimula nang pribado
Simulan ang Webship gamit ang napiling TOML file. Idagdag ang kumpletong certificate pair o awtomatikong TLS kapag handa na ang site para sa secure public traffic.
Suriin ang runtime
Tumawag ng GET /health nang lokal. Pagkatapos subukan ang mga static na ruta, TLS, proxy na ruta, mga patakaran sa seguridad, at na-authenticate na pagmamanman.
listen = "127.0.0.1:4433"
workers = 4
root = "./public"/usr/local/bin/webship --check-config --config /etc/webship/production.toml
/usr/local/bin/webship --print-effective-config --config /etc/webship/production.toml/usr/local/bin/webship --config /etc/webship/production.toml
curl --http3-only --insecure https://127.0.0.1:4433/healthMabilis na Patnubay para sa mga AI Agent
Ikonekta ang isang AI agent sa Webship sa limang linya.
Ikonekta ang Claude Code, OpenAI, DeepSeek, o anumang katugmang MCP client sa pamamagitan ng pribadong SSH tunnel. Tumatanggap ang ahente ng isang awtentikadong operations surface nang hindi ibinabahagi ang pampublikong listener o inilalantad ang control credentials sa trapiko ng internet.
{
"mcpServers": {
"webship": { "url": "https://localhost:19443/mcp",
"headers": { "Authorization": "Bearer <token>" } }
} }Static na paghahatid
Maglingkod sa isang directory na may protocol-aware defaults.
Mag-set ng root globally o para sa bawat site. Ang mga TLS site ay default sa HTTP/3 lamang; ang mga cleartext site ay default sa HTTP/1.1 at H2C. I-override ang HTTP/1.1, HTTP/2, at HTTP/3 nang paisa-isa para sa bawat site.
[[sites]]
domain = "app.example.com"
root = "/srv/app"
listen = "0.0.0.0:443"
[sites.protocols]
h1 = true
h2 = true
h3 = trueSinusuportahan ng built-in na router ang GET at HEAD, byte ranges, conditional requests, validators, at mga sidecars na .br, .zst, at .gz. Ang mga dot-file na landas ay awtomatikong tinatanggihan; ang .well-known ay nananatiling available.
Traffic ng aplikasyon
I-route ang mga kahilingan sa isa o higit pang upstreams.
Payagan ang reverse proxying, itugma ang host at path, pagkatapos tukuyin ang panghuling walang kondisyon na patakaran. Sinusuportahan ng Webship ang bounded pools, health checks, load balancing, circuit breakers, safe bodyless retries, WebSockets, at caching.
[reverse_proxy]
enabled = true
[[reverse_proxy.routes]]
domain = "app.example.com"
path_prefix = "/api"
strip_path_prefix = true
upstreams = ["127.0.0.1:8080", "127.0.0.1:8081"]
[[reverse_proxy.policies]]
name = "default"
hosts = []
path_prefixes = ["/"]
methods = []
max_body_bytes = 1048576
total_timeout_ms = 30000Webship 1.5.0 Layer 4
I-proxy ang TCP at UDP na trapiko nang walang HTTP na ruta.
Ang Layer 4 ay naka-disable bilang default. Tukuyin ang mga pinangalanang upstream, independenteng TCP at UDP na mga polisiya, mga listener, at mga ruta. Sinusuportahan ng TCP ang limitasyon sa koneksyon, health checks, load balancing, opsyonal na PROXY protocol, at TLS pass-through o termination. Ginagamit ng UDP ang bounded flows at batched receive workers.
[layer4]
enabled = true
[[layer4.tcp_policies]]
name = "edge-tcp"
max_connections = 10000
idle_timeout_ms = 300000
[[layer4.udp_policies]]
name = "edge-udp"
max_flows = 20000
receive_batch_size = 32
[[layer4.upstreams]]
name = "origin-a"
address = "127.0.0.1:9443"
weight = 100
[[layer4.tcp]]
name = "tls-tunnel"
listen = "127.0.0.1:10443"
policy = "edge-tcp"
tls_mode = "passthrough"
[[layer4.tcp.routes]]
name = "default"
default = true
upstreams = ["origin-a"]
load_balancing = "weighted-peak-ewma"
[[layer4.udp]]
name = "datagrams"
listen = "127.0.0.1:10443"
policy = "edge-udp"
[[layer4.udp.routes]]
name = "default"
default = true
upstreams = ["origin-a"]Paghahatid bawat ruta
Bumuo ng bounded na cache na estilo ng CDN nang hindi lumalampas sa mga hangganan ng site.
Ang cache ay naka-configure sa bawat reverse-proxy na ruta, hindi globally. Pumili ng ligtas na mga pamamaraan at status, TTL bounds, asal ng CDN-Cache-Control, at normalisasyon ng query-key para sa site at path na iyon. Ang mga authenticated, personalized, private, at no-store na tugon ay nananatiling hindi ma-cache bilang default.
[[reverse_proxy.routes]]
domain = "assets.example.com"
path_prefix = "/assets"
upstreams = ["127.0.0.1:8080"]
[reverse_proxy.routes.cache]
enabled = true
cacheable_methods = ["GET", "HEAD", "QUERY"]
cacheable_statuses = [200, 203, 204, 206, 301, 404, 410]
default_ttl_ms = 60000
max_ttl_ms = 86400000
honor_cdn_cache_control = true
query_mode = "ignore-listed"
ignored_query_parameters = ["utm_*", "fbclid"]Lokal na konteksto ng trapiko
Ilapat ang mga GeoIP na patakaran nang walang hosted na lookup service.
I-load ang data ng bansa, lungsod, at ASN mula sa lokal na MaxMind-compatible na mga database. Ang GeoIP ay naka-disable sa default; panatilihing updated ang mga file ng database at magdesisyon kung ang mga pagkabigo sa lookup ay magdedeny o magbypass sa geo-dependent na patakaran bago ito i-enable.
[geoip]
enabled = true
country_db = "/var/lib/webship/geo/country.mmdb"
city_db = "/var/lib/webship/geo/city.mmdb"
asn_db = "/var/lib/webship/geo/asn.mmdb"
failure_mode = "deny"Mga protocol ng mail
I-route ang mga mail session gamit ang protocol-aware na mga kontrol.
Gamitin ang hiwalay na mail data plane para sa SMTP submission, IMAP, POP3, at kaugnay na protocol-aware na routing. Maaaring gumamit ang mga listener ng pass-through, implicit TLS, o bounded STARTTLS upgrade. Panatilihing nasa loopback ang mga bagong listener hanggang sa makumpirma ang upstream identity, certificate, authentication, at TLS policy.
[mail]
enabled = true
[[mail.upstreams]]
name = "submission-a"
address = "127.0.0.1:2465"
protocol = "smtp-submission"
security = "plain"
[[mail.listeners]]
name = "submissions"
listen = "127.0.0.1:1465"
protocol = "smtp-submission"
client_security = "passthrough"
upstreams = ["submission-a"]
load_balancing = "weighted-least-requests"TLS at HTTP/3
Gumamit ng mga manwal na sertipiko o hayaan na pamahalaan ito ng Webship.
Mula sa Webship 1.4.0, bawat site ay maaaring pumili ng sarili nitong mode ng sertipiko nang independyente. Ginagamit ng HTTP/3 ang tumutugmang UDP listener; paganahin ang HTTP/1.1 o HTTP/2 kapag ang parehong TLS 1.3 site ay nangangailangan din ng TCP compatibility.
listen = "0.0.0.0:443"
[automatic_tls]
enabled = true
directory_url = "https://acme-v02.api.letsencrypt.org/directory"
cache_dir = "/var/lib/webship/acme"
contacts = ["mailto:ops@example.com"]
accept_terms_of_service = true
[[sites]]
domain = "app.example.com"
root = "/srv/app"
certificate_mode = "per_site" # default public ACME certificate
[[sites]]
domain = "legacy.example.com"
root = "/srv/legacy"
certificate_mode = "shared" # legacy public multi-SAN certificateArkitektura ng sertipiko bawat site
Pumili ng pagtitiwala sa sertipiko at sukatin nang independiyente para sa bawat site.
Webship 1.4.0 inilipat ang certificate_mode sa bawat entry ng [[sites]]. Ang pampublikong per-site ACME, pampublikong DNS-01 fleet na mga shard, ang naka-embed na pribadong CA, ang legacy na shared na sertipiko, at ang manu-manong mga file ng sertipiko ay maaaring mag coexist sa isang proseso na may sariling lamagan.
per_site — pampublikong sertipiko
Ang default. Umorder ng isang browser-na-pinagkakatiwalaang pampublikong ACME na sertipiko para sa eksaktong pangalan ng site gamit ang TLS-ALPN-01.
fleet — pampublikong DNS-01 na mga shard
Gamitin ang pampublikong DNS-01 pag-iisyu para sa maraming third- at fourth-level na pangalan sa ilalim ng malinaw na nakarehistrong mga domain. Mananatili ang mga pangalan sa matatag, pinagsama-samang mga sherd ng sertipiko.
embedded — pribadong CA
Mag-isyu ng hiwalay na sertipiko sa proseso mula sa pribadong CA ng Webship. Walang pampublikong ACME account, DNS challenge, integrasyon ng registrar, o papasok na port 443 na kinakailangan.
shared — legacy na multi-SAN
Panatilihin ang legacy na pampublikong multi-SAN na grupo para sa mga deployment na nangangailangan nito. Ito ay hindi default at nananatiling sumasailalim sa mga limitasyon ng pampublikong CA identifier.
[automatic_tls]
enabled = true
directory_url = "https://acme-v02.api.letsencrypt.org/directory"
cache_dir = "/var/lib/webship/acme"
contacts = ["mailto:ops@example.com"]
accept_terms_of_service = true
[automatic_tls.fleet]
shard_size = 64
batch_window_ms = 300000
weekly_certificate_limit = 50
emergency_certificate_reserve = 5
registered_domains = ["example.com"]
[automatic_tls.fleet.dns]
listen = "0.0.0.0:53"
nameservers = ["ns1.example.net"]
addresses = ["192.0.2.10"]
propagation_timeout_ms = 120000
resolver_url = "https://dns.google/resolve"
challenge_ttl_seconds = 900
[[sites]]
domain = "app.example.com"
root = "/srv/app"
certificate_mode = "fleet"
[[sites]]
domain = "media.app.example.com"
root = "/srv/media"
certificate_mode = "fleet"[automatic_tls]
enabled = true
cache_dir = "/var/lib/webship/acme"
[acme_ca]
state_dir = "/var/lib/webship/acme-ca"
leaf_validity_days = 90
[[sites]]
domain = "internal.example.com"
root = "/srv/internal"
certificate_mode = "embedded"Patakaran sa gilid
Panatilihin ang secure na baseline na buo.
Pinapagana ng Webship ang pangunahing mga layer ng proteksyon nito sa default. Ayusin ang mga limitasyon para sa iyong workload at suriin pagkatapos ng bawat pagbabago ng rule o header-policy.
[ddos]
enabled = true
mode = "normal"
requests_per_minute = 600
burst = 100
block_seconds = 300
[security.response_headers]
enabled = true
nosniff = true
frame_deny = true
referrer_no_referrer = true
hsts = "max-age=31536000; includeSubDomains"
content_security_policy = "default-src 'self'; frame-ancestors 'none'"Gamitin ang normal na mode para sa karaniwang trapiko, under_attack para sa mas mahigpit na paghawak ng aktibong pag-atake, at lockdown kapag tanging mga probe at hayagang pinapayagang mga landas lamang ang dapat manatiling available.
Pribadong diagnostic
Inspectahin ang edge nang hindi ibinubunyag ang control plane.
Ang istatistika at mga metrics ng Prometheus ay tumatakbo sa isang hiwalay na authenticated listener. Kailangang i-enable ang instrumentation tuwing aktibo ang alinmang endpoint.
[observability]
instrumentation = true
stats = true
metrics = true
listen = "127.0.0.1:9090"
token = "replace-with-at-least-32-random-printable-ascii-characters"Ligtas na operasyon
Mag-reload nang maingat. Panatilihin ang rollback na malapit.
Pag-reload ng configuration
Magpadala ng SIGHUP pagkatapos i-edit ang isang configuration na may backing file. Webship sinusuri ang kapalit bago ito i-install at pinananatili ang tumatakbong configuration kapag nabigo ang pagsusuri.
Pag-upgrade at rollback
I-install ang bagong binary sa tabi ng nakaraang bersyon, i-validate ang production configuration gamit ito, pagkatapos ay suriin ang kalusugan, TLS, proxying, at metrics. Panatilihin ang nakaraang binary hanggang sa pumasa ang bawat gate.
kill -HUP "$(pidof webship)"
/usr/local/bin/webship update --config /etc/webship/production.toml
sudo systemctl daemon-reload
sudo systemctl enable --now webship
sudo systemctl status webshipOptimization na gabay sa profile
Mangolekta ng mga target-native na profile nang hindi inililito ang training at production.
Bawat Webship 1.5.0 target ay may hiwalay na instrumented CLI para sa pagkolekta ng target-native na LLVM profile data sa ilalim ng iyong kinatawan na trapiko. Gamitin ang eksaktong bersyon at target triple, gamitin ang mga ruta at protocol na mahalaga, at itigil ang proseso nang maayos upang malinis nito ang bawat .profraw file.
Piliin ang eksaktong target
I-download ang PGO training CLI na ang release version at Rust target triple ay eksaktong tumutugma sa runtime na nais mong i-optimize. Beripikahin muna ang inilathalang SHA-256 nito.
Kunin ang kinatawan na traffic
Itakda ang LLVM_PROFILE_FILE sa isang direktoryo na maaaring sulatan, simulan ang training CLI gamit ang beripikadong kopya ng totoong configuration, ulitin ang kinatawan na diretso at reverse-proxy na traffic, pagkatapos ay ihinto ang Webship nang maayos.
Pagsamahin ang raw profiles
Gamitin ang llvm-profdata mula sa compiler generation na naitala para sa release. Pagsamahin ang bawat inilabas na .profraw file sa isang sparse webship.profdata file.
I-rebuild at gate
Ilapat ang pinagsamang profile lamang sa eksaktong source, compiler, crypto provider, feature set, at target na nag-generate nito. Patakbuhin ang correctness at performance gates bago i-promote.
mkdir -p ./profiles
export LLVM_PROFILE_FILE="$PWD/profiles/webship-%p-%m.profraw"
./webship-pgo-training-1.5.0-<target> --config ./webship.tomlNew-Item -ItemType Directory -Force ./profiles
$env:LLVM_PROFILE_FILE = "$PWD/profiles/webship-%p-%m.profraw"
.\webship-pgo-training-1.5.0-<target>.exe --config .\webship.tomlllvm-profdata merge -sparse ./profiles/*.profraw -o ./webship.profdataSangguniang pang-command-line
Maliit na ibabaw, malinaw na pagsisimula.
webship [OPTIONS] | webship update [OPTIONS]
-c, --config PATH- Piliin ang TOML file. Kung ito ay wala, gagawin ito ng Webship na may pribadong localhost TLS identity.
--check-config- Suriin ang buong configuration at lumabas nang hindi sinisimulan ang mga listener.
--print-effective-config- I-print ang pinagsamang epektibong configuration na tinanggal ang mga sikreto.
update- Suriin ang pinirmang community manifest, piliin ang eksaktong target na platform na ito, at mag-install ng mas bagong bersyon kapag mayroon.
--help / --version- I-print ang tulong sa utos o ang naka-install na bersyon ng Webship.
Karaniwang mga paraan ng pagkabigo
Magsimula sa configuration, pagkatapos ay lumipat palabas.
- Patakbuhin ang --check-config at itama ang unang naiulat na error; tinatanggihan ang mga hindi kilalang larangan ng TOML.
- Kumpirmahin na ang naka-configure na TCP at UDP na mga port ay available at pinapayagan ng firewall.
- Kumpirmahin na umiiral ang sertipiko at key, mababasa ng service account, at bumubuo ng magkatugmang pares.
- Para sa awtomatikong TLS, kumpirmahin na bawat naka-configure na domain ay tumutugon sa Webship host.
- Tawagan ang /health sa lokal na tagapakinig ng aplikasyon bago subukan sa pamamagitan ng DNS o isang panlabas na load path.
- Pansamantalang paganahin ang nagpapatotoong obeserbabilidad kapag kinakailangan ang ebidensiya ng runtime.