Przegląd produktu
Jeden serwer między siecią a Twoją aplikacją.
Webship to samodzielnie hostowany Rust edge i serwer statycznych stron internetowych. Jedno środowisko uruchomieniowe obsługuje nowoczesne protokoły, stosuje politykę krawędziową, serwuje pliki i pośredniczy w żądaniach aplikacji.
Nowoczesny transport
Akceptuj HTTP/1.1, HTTP/2 i HTTP/3, z TLS 1.3 oraz opcjonalnym punktem końcowym WebTransport.
Statyczna i pośrednia dostawa
Serwowanie statycznych plików z walidatorami i wstępnie skompresowanymi dodatkami lub przekazywanie ruchu aplikacji przez ograniczone pule upstream.
Bezpieczne ustawienia domyślne
Rozpocznij od WAF, kontroli DDoS, wyzwania dla botów, nagłówków bezpieczeństwa odpowiedzi, API Shield i ochrony plików kropkowanych.
Operacje obserwowalne
Używaj uwierzytelnionych statystyk, metryk Prometheus, identyfikatorów żądań, łagodnych przeładowań oraz opcjonalnej płaszczyzny kontrolnej MCP.
Szybki start
Od binarnego wydania do zdrowego nasłuchiwacza.
Uruchom na loopback, zweryfikuj wszystko przed powiązaniem i sprawdź wbudowaną odpowiedź stanu przed dodaniem publicznego ruchu.
Przygotuj pliki
Umieść binarkę wydania, jej konfigurację TOML, statyczny katalog główny oraz wszelkie skonfigurowane pliki certyfikatu i klucza TLS na hoście.
Waliduj i sprawdź
Uruchom oba polecenia konfiguracyjne. Napraw pierwszy błąd i sprawdź zredagowany efekt końcowy przed uruchomieniem.
Uruchom prywatnie
Uruchom Webship z wybranym plikiem TOML. Dodaj kompletną parę certyfikatów lub automatyczne TLS, gdy strona będzie gotowa na bezpieczny ruch publiczny.
Zweryfikuj środowisko uruchomieniowe
Wywołaj GET /health lokalnie. Następnie przetestuj statyczne ścieżki, TLS, trasy proxy, zasady bezpieczeństwa oraz monitorowanie z uwierzytelnieniem.
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/healthSzybki przewodnik rozpoczęcia pracy z agentami AI
Połącz agenta AI z Webship w pięciu liniach.
Połącz Claude Code, OpenAI, DeepSeek lub dowolnego kompatybilnego klienta MCP przez prywatny tunel SSH. Agent otrzymuje uwierzytelniony interfejs operacyjny bez udostępniania publicznego nasłuchiwacza ani narażania poświadczeń kontrolnych na ruch w internecie.
{
"mcpServers": {
"webship": { "url": "https://localhost:19443/mcp",
"headers": { "Authorization": "Bearer <token>" } }
} }Dostarczenie statyczne
Serwuj katalog z domyślnymi ustawieniami rozpoznającymi protokół.
Ustaw root globalnie lub dla każdej witryny osobno. Witryny TLS domyślnie używają HTTP/3; witryny w czystym tekście domyślnie używają HTTP/1.1 i H2C. Nadpisz HTTP/1.1, HTTP/2 i HTTP/3 niezależnie dla każdej witryny.
[[sites]]
domain = "app.example.com"
root = "/srv/app"
listen = "0.0.0.0:443"
[sites.protocols]
h1 = true
h2 = true
h3 = trueWbudowany router obsługuje GET i HEAD, zakresy bajtów, żądania warunkowe, walidatory oraz pliki pomocnicze .br, .zst i .gz. Ścieżki do plików zaczynających się od kropki są domyślnie odrzucane; .well-known pozostaje dostępne.
Ruch aplikacji
Kieruj żądania do jednego lub więcej upstreamów.
Włącz odwrotne proxy, dopasuj hosta i ścieżkę, a następnie zdefiniuj ostateczną, bezwarunkową politykę. Webship obsługuje ograniczone pule, kontrole stanu, równoważenie obciążenia, obwody zabezpieczające, bezpieczne ponowne próby bez ciała, WebSockety i buforowanie.
[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 = 30000TLS i HTTP/3
Używaj certyfikatów ręcznych lub pozwól, aby Webship nimi zarządzał.
Webship 1.4.0 akceptuje TLS 1.3 i pozwala każdej stronie na niezależny wybór trybu certyfikatu. HTTP/3 korzysta z dopasowanego nasłuchiwacza UDP; włącz HTTP/1.1 lub HTTP/2, gdy ta sama strona TLS wymaga również zgodności TCP.
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 certificateArchitektura certyfikatu Webship 1.4.0
Wybieraj zaufanie certyfikatu i skalę niezależnie dla każdej strony.
Webship 1.4.0 przenosi certificate_mode na każdy wpis [[sites]]. Publiczne ACME dla pojedynczych stron, publiczne fragmenty floty DNS-01, wbudowane prywatne CA, starszy wspólny certyfikat oraz ręczne pliki certyfikatów mogą współistnieć w jednym samodzielnym procesie.
per_site — publiczny certyfikat
Domyślne. Zamów jeden publiczny certyfikat ACME zaufany przez przeglądarki dla dokładnej nazwy witryny z TLS-ALPN-01.
flota — publiczne fragmenty DNS-01
Używaj publicznego wydawania DNS-01 dla wielu nazw trzeciego i czwartego poziomu pod wyraźnie zarejestrowanymi domenami. Nazwy pozostają w stabilnych, zgrupowanych fragmentach certyfikatów.
zintegrowany — prywatny CA
Wydaj oddzielny certyfikat w procesie z prywatnego CA Webship. Nie jest wymagane publiczne konto ACME, wyzwanie DNS, integracja z rejestratorem ani przychodzący port 443.
shared — starsza multi-SAN
Zachowaj starszą publiczną grupę multi-SAN dla wdrożeń, które jej wymagają. Nie jest to domyślne ustawienie i nadal podlega ograniczeniom identyfikatora publicznego CA.
[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"Polityka krawędzi
Utrzymuj bezpieczną bazę w nienaruszonym stanie.
Webship domyślnie włącza swoje główne warstwy ochrony. Dostosuj limity do swojego obciążenia i weryfikuj po każdej zmianie reguły lub polityki nagłówków.
[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'"Używaj trybu normalnego dla regularnego ruchu, under_attack dla surowszego radzenia sobie z aktywnymi atakami oraz lockdown, gdy dostępne powinny być tylko sondy i wyraźnie dozwolone ścieżki.
Diagnostyka prywatna
Inspektuj krawędź bez ujawniania płaszczyzny kontroli.
Statystyki i metryki Prometheus działają na osobnym uwierzytelnionym słuchaczu. Instrumentacja musi być włączona, gdy którekolwiek z punktów końcowych jest aktywne.
[observability]
instrumentation = true
stats = true
metrics = true
listen = "127.0.0.1:9090"
token = "replace-with-at-least-32-random-printable-ascii-characters"Bezpieczne operacje
Przeładuj celowo. Trzymaj możliwość wycofania blisko.
Ponowne wczytanie konfiguracji
Wyślij SIGHUP po edycji konfiguracji opartej na plikach. Webship weryfikuje zamiennik przed jego zainstalowaniem i zachowuje działającą konfigurację w przypadku niepowodzenia weryfikacji.
Aktualizacja i przywracanie
Zainstaluj nowy binarny obok poprzedniej wersji, zweryfikuj konfigurację produkcyjną z jego użyciem, a następnie sprawdź stan zdrowia, TLS, proxy i metryki. Zachowaj poprzedni binarny, dopóki wszystkie bramki nie zostaną zaliczone.
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 webshipOptymalizacja oparta na profilu
Zbieraj profile natywne dla celu, nie myląc treningu z produkcją.
Każdy cel Webship 1.4.0 ma oddzielny zainstrumentowany CLI do zbierania danych z natywnego profilu LLVM pod twoim reprezentatywnym ruchem. Użyj dokładnej wersji i potrójnego celu, przetestuj trasy i protokoły, które mają znaczenie, i zakończ proces w sposób łagodny, aby mógł wypłukać każdy plik .profraw.
Wybierz dokładny cel
Pobierz CLI do treningu PGO, którego wersja release i podwójny cel Rust dokładnie odpowiadają środowisku uruchomieniowemu, które zamierzasz optymalizować. Najpierw zweryfikuj jego opublikowany SHA-256.
Przechwyć reprezentatywny ruch
Ustaw LLVM_PROFILE_FILE na katalog z prawami zapisu, uruchom CLI treningowy z walidowaną kopią rzeczywistej konfiguracji, odtwórz reprezentatywny ruch bezpośredni i przez reverse-proxy, a następnie zatrzymaj Webship w sposób kontrolowany.
Scal surowe profile
Użyj llvm-profdata z generacji kompilatora nagranej dla wersji release. Scal każdy wygenerowany plik .profraw w jeden plik sparse webship.profdata.
Przebuduj i przetestuj
Zastosuj scalony profil tylko do dokładnego źródła, kompilatora, dostawcy kryptografii, zestawu funkcji i celu, które go wygenerowały. Uruchom testy poprawności i wydajności przed promocją.
mkdir -p ./profiles
export LLVM_PROFILE_FILE="$PWD/profiles/webship-%p-%m.profraw"
./webship-pgo-training-1.4.0-<target> --config ./webship.tomlNew-Item -ItemType Directory -Force ./profiles
$env:LLVM_PROFILE_FILE = "$PWD/profiles/webship-%p-%m.profraw"
.\webship-pgo-training-1.4.0-<target>.exe --config .\webship.tomlllvm-profdata merge -sparse ./profiles/*.profraw -o ./webship.profdataOdwołanie do linii poleceń
Mała powierzchnia, jawne uruchamianie.
webship [OPTIONS] | webship update [OPTIONS]
-c, --config PATH- Wybierz plik TOML. Jeśli nie istnieje, Webship tworzy go z prywatną tożsamością TLS dla localhost.
--check-config- Zweryfikuj pełną konfigurację i zakończ działanie bez uruchamiania nasłuchiwaczy.
--print-effective-config- Wyświetl scaloną efektywną konfigurację z usuniętymi sekretami.
update- Zweryfikuj podpisany manifest społecznościowy, wybierz dokładnie ten cel platformy i zainstaluj nowszą wersję, gdy taka istnieje.
--help / --version- Wyświetl pomoc do polecenia lub zainstalowaną wersję Webship.
Typowe tryby awarii
Rozpocznij od konfiguracji, a następnie przejdź na zewnątrz.
- Uruchom --check-config i popraw pierwszy zgłoszony błąd; nieznane pola TOML są odrzucane.
- Potwierdź, że skonfigurowane porty TCP i UDP są dostępne i dozwolone przez zaporę.
- Potwierdź, że certyfikat i klucz istnieją, są czytelne dla konta usługowego i tworzą dopasowaną parę.
- Dla automatycznego TLS, potwierdź, że każda skonfigurowana domena rozwiązuje się do hosta Webship.
- Wywołaj /health na lokalnym nasłuchu aplikacji przed testowaniem przez DNS lub zewnętrzną ścieżkę obciążenia.
- Tymczasowo włącz uwierzytelnioną obserwowalność, gdy wymagane są dowody w czasie działania.