Wprowadzenie
Mam serwer deweloperów (obecnie działający pod kontrolą Ubuntu 14.04 LTS), z którego korzystam już od jakiegoś czasu do hostowania różnych narzędzi programistycznych na różnych portach. Ponieważ porty mogą być trudne do zapamiętania, postanowiłem używać portu 80 dla wszystkich moich usług i przekierowywać porty wewnętrznie, na podstawie nazwy hosta.
Zamiast pisać domain.com:5432, mogę po prostu uzyskać do niego dostęp przez sub.domain.com
Na przykład aplikacja X, która używa portu 7547 i działa na sub.domain.com, ma następującą konfigurację nginx:
upstream sub {
server 127.0.0.1:7547;
}
server {
listen 80;
server_name sub.domain.com www.sub.domain.com;
access_log /var/log/nginx/sub.log combined;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:7547;
proxy_set_header Authorization "";
}
}
Pytanie
Biorąc pod uwagę obecną strukturę konfiguracji, którą wybrałem, czy można korzystać z letsencrypt i uruchamiać różne usługi pod https?
nginx
https
jira
lets-encrypt
0x450
źródło
źródło
Odpowiedzi:
Tak, możesz mieć żądania proxy nginx do serwerów HTTP, a następnie samodzielnie odpowiadać na klientów przez HTTPS. Robiąc to, będziesz chciał mieć pewność, że połączenie proxy nginx <-> jest mało prawdopodobne, aby ktoś cię obwąchał. Bezpieczne podejścia mogą obejmować:
Proxy do innego hosta w publicznym Internecie raczej nie będzie wystarczająco bezpieczne.
Oto instrukcje dotyczące uzyskiwania certyfikatu Let's Encrypt przy użyciu tego samego serwera WWW, którego używasz jako serwera proxy.
Żądanie początkowego certyfikatu od Let's Encrypt
Zmodyfikuj
server
klauzulę, aby umożliwić obsługę podkatalogu.well-known
z katalogu lokalnego, np .:http://sub.domain.com/.well-known
to tam serwery Let's Encrypt będą szukać odpowiedzi na wyzwania, które stwarza.Następnie możesz użyć klienta certbot, aby zażądać certyfikatu od Let's Encrypt przy użyciu wtyczki webroot (jako root):
Twój klucz, certyfikat i łańcuch certyfikatów zostaną teraz zainstalowane w
/etc/letsencrypt/live/sub.domain.com/
Konfigurowanie nginx do używania twojego certyfikatu
Najpierw utwórz nową klauzulę serwera:
Przeładuj nginx:
Sprawdź, czy HTTPS działa teraz, odwiedzając
https://sub.domain.com
iwhttps://www.sub.domain.com
swojej przeglądarce (i innych przeglądarkach, które chcesz wesprzeć) i sprawdzając, czy nie zgłaszają błędów certyfikatów.Zalecane: przejrzyj także raymii.org: Silne zabezpieczenia SSL na nginx i przetestuj swoją konfigurację w SSL Labs .
(Zalecane) Przekieruj żądania HTTP do HTTPS
Gdy potwierdzisz, że Twoja witryna działa z
https://
wersją adresu URL, zamiast umożliwić niektórym użytkownikom wyświetlanie niezabezpieczonych treści, ponieważ do nich podeszlihttp://sub.domain.com
, przekieruj ich do wersji HTTPS witryny.Zamień całą
server
klauzulę portu 80 na :Powinieneś teraz również odkomentować ten wiersz w konfiguracji portu 443, aby przeglądarki pamiętały nawet o nie wypróbowaniu wersji HTTP strony:
Automatycznie odnów swój certyfikat
Możesz użyć tego polecenia (jako root), aby odnowić wszystkie certyfikaty znane dla certbota i ponownie załadować nginx przy użyciu nowego certyfikatu (który będzie miał tę samą ścieżkę, co istniejący certyfikat):
certbot podejmie próbę odnowienia certyfikatów, które mają więcej niż 60 dni, więc bezpieczne (i zalecane!) jest uruchamianie tego polecenia bardzo regularnie i automatycznie, jeśli to w ogóle możliwe. Na przykład możesz wprowadzić następujące polecenie
/etc/crontab
:Możesz przetestować odnowienia w trybie „na sucho”, który skontaktuje się z serwerami pomostowymi Let's Encrypt, aby wykonać prawdziwy test kontaktu z Twoją domeną, ale nie zapisze wynikowych certyfikatów:
Lub możesz wymusić wcześniejsze odnowienie za pomocą:
Uwaga: możesz uruchamiać na sucho tyle razy, ile chcesz, ale prawdziwe odnowienia podlegają ograniczeniom prędkości Let's Encrypt .
źródło
certbot
dowolnego innego narzędzia, nie można zapomnieć o określeniu domeny do działania zarówno w formacie www, jak i innym niż www.location /.well-known
musisz opuścić.well-known
ścieżkę. Użyjalias /var/www/sub.domain.com
, niealias /var/www/sub.domain.com/.well-known
location '/.well-known' {
. Nie jestem pewien, czy jest to wersja, czy tylko moja konfiguracja, ale na wypadek, gdyby ktoś utknął.Tak, możesz użyć
nginx
jako punktu końcowego https i współpracować z backendami za pośrednictwem http. Na przykład moja konfiguracja:Ale jak wiem, z szyfrowaniem musimy wskazać wszystkie subdomeny, gdy otrzymasz certyfikat, a jeśli to jest problem, wybierz adres URL
https://host/service
zamiasthttps://service.host
źródło