Aby zabezpieczyć przesyłany ruch między serwerem a klientem, można wykorzystać mechanizm szyfrowania SSL.
Ponieważ nginx często pełni rolę frontendu przed Apache, lepiej powierzyć mu szyfrowanie.
Użycie masowego certyfikatu samopodpisanego
Skonfigurujemy użycie jednego samopodpisanego certyfikatu dla kilku witryn.
Stworzymy wspólny plik konfiguracyjny SSL:
/etc/nginx/ssl.conf
# Подключение самоподписанного сертификата # генерация сертификата: # openssl req -new -x509 -days 9999 -nodes -out cert.pem -keyout cert.key ssl on; ssl_protocols SSLv3 TLSv1; ssl_certificate /etc/nginx/ssl/cert.pem; ssl_certificate_key /etc/nginx/ssl/cert.key;
Stworzymy katalog, w którym będziemy przechowywać certyfikaty:
mkdir /etc/nginx/ssl
Dla większego bezpieczeństwa ograniczymy dostęp do certyfikatów:
chown nginx:nginx /etc/nginx/ssl chmod 700 /etc/nginx/ssl
Przejdźmy do tego katalogu i wygenerujmy certyfikat:
cd /etc/nginx/ssl openssl req -new -x509 -days 9999 -nodes -out cert.pem -keyout cert.key
Podczas generowania zostaniesz poproszony o podanie niektórych danych; ponieważ tworzymy certyfikat dla siebie, ich wypełnienie nie jest konieczne.
Teraz, aby włączyć szyfrowanie dla wymaganych witryn, użyjemy następującego szablonu:
w konfiguracji witryn nginx:
server {
listen *:443; # порт https
server_name my.site.com; # ваш сайт
include /etc/nginx/ssl.conf; # подключение конфигурации ssl
...
}
Przykład z wymuszonym przekierowaniem z http na https:
w konfiguracji witryn nginx:
server {
listen *:443; # порт https
listen *:80; # порт http
server_name my.site.com; # ваш сайт
include /etc/nginx/ssl.conf; # подключение конфигурации ssl
if ( $scheme = "http" ) {
rewrite ^/(.*)$ https://$host/$1 permanent;
}
}
? или
server {
listen 80;
listen [::]:80;
server_name .domain.com;
rewrite ^ https://domain.com$request_uri? last;
}
Пожалуйста, поправьте, это важно. Вместо last можно использовать permanent или нечто другое, вот все флаги:
last — завершает обработку текущего набора директив ngx_http_rewrite_module, после чего ищется соответствие URI и location;
break — завершает обработку текущего набора директив ngx_http_rewrite_module;
redirect — возвращает временный редирект с кодом 302; используется, если заменяющая строка не начинается с "http://";
permanent — возвращает постоянный редирект с кодом 301.
... }
Po skonfigurowaniu należy zrestartować nginx:
/etc/init.d/nginx reload
Wszystko gotowe, aby uzyskać dostęp do witryny, należy użyć protokołu https - https://my.site.com
Ponieważ certyfikat jest samopodpisany, przeglądarka poprosi o potwierdzenie wyjątku dla jego użycia.
Dodatkowe opcje tworzenia certyfikatu SSL
Tworzenie certyfikatu za pomocą polecenia:
openssl req -new -x509 -days 9999 -nodes -out cert.pem -keyout cert.key
wyświetla pewne informacje wymagane do utworzenia certyfikatu, których wypełnienie można pominąć.
Ale jeśli interesuje Cię opis parametrów:
| Wartość | Opis | Czy parametr obowiązkowy? |
|---|---|---|
| C | Dwuliterowy kod kraju (Country) | nie |
| ST | Nazwa regionu/województwa/kraju/republiki/… (State Name) | nie |
| L | Nazwa miasta/osiedla/… (Locality Name) | nie |
| O | Nazwa organizacji (Organization Name) | nie |
| OU | Nazwa działu (Organization Unit) | nie |
| CN | Nazwa certyfikatu; przy tworzeniu certyfikatów serwerowych używa się nazwy domeny witryny (Common Name) | tak |
| emailAddress | adres e-mail (E-mail address) | nie |
Aby nie wprowadzać tych parametrów interaktywnie, można użyć opcji -subj:
openssl req -new -x509 -days 9999 -nodes -subj /C=RU/O=My\ site/CN=my.site.com/emailAddress=admin@site.com -out cert.pem -keyout cert.key
