Utwórz wirtualne hosty, katalogi ochrony haseł i certyfikaty SSL za pomocą „Nginx Web Server” w Arch Linux

Utwórz wirtualne hosty, katalogi ochrony haseł i certyfikaty SSL za pomocą „Nginx Web Server” w Arch Linux

Poprzedni artykuł „LEMP” Arch Linux obejmował po prostu podstawowe rzeczy, od instalowania usług sieciowych (Nginx, baza danych MySQL i phpMyAdmin) i skonfiguruj minimalne bezpieczeństwo wymagane dla MySQL Server i phpMyAdmin.

Przydatne konfiguracje Nginx na Arch Linux

Ten temat jest ściśle związany z dawną instalacją LEMP na Arch Linux i poprowadzi Cię przez ustawienie bardziej złożonych konfiguracji dla stosu LEMP, zwłaszcza Nginx Konfiguracje serwera WWW, takie jak tworzenie Wirtualne hosty, używać Katalogi chronione hasłem, Utwórz i skonfiguruj HTTP Secure Sockets Warstwa, HTTP niepewne przekierowuje się do Https i zaprezentują również przydatne skrypty bash, które złagodzą zadanie aktywacji wirtualnych hostów i wygenerują Certyfikat SSL i klucze.

Wymagania

Zainstaluj LEMP z bazą danych MariaDB w Arch Linux

Krok 1: Włącz hosty wirtualne na Nginx

Jedna z najprostszych metod włączenia Wirtualne hosty jest używane włączać Instrukcje dotyczące głównego pliku konfiguracyjnego Nginx, co sprawia, że ​​zadanie dalszych konfiguracji jest łatwiejsze i wydajniejsze, ponieważ można tworzyć proste pliki dla każdego nowego hosta i przechowywać główną konfigurację plików konfiguracyjnych.

Takie podejście działa tak samo jak Apache Serwer WWW, Pierwszą rzeczą, którą musisz zrobić, to określić nowy URI ścieżka, w której Nginx powinien odczytać dyrektywy plików.

1. Więc otwórz nginx.conf główny plik znajdujący się na /etc/nginx/ ścieżka systemowa i na dole, przed ostatnim nawiasem kręconym „”Dodaj ścieżkę, w której przebywają przyszłe pliki konfiguracji wirtualnej hosta.

$ sudo nano/etc/nginx/nginx.conf

Na dole Dodaj następujące instrukcje.

Uwzględnij/etc/nginx/witryny/*.conf;
Włącz wirtualne hosty na Nginx

Ta dyrektywa mówi Nginx, że powinna odczytać wszystkie pliki, które można znaleźć /etc/nginx/witryny/obsługę/ To kończy .conf rozszerzenie.

2. Następnym krokiem jest utworzenie witryny z obsługą katalog i inny, nazywany Witryny-dostępne, gdzie przechowujesz wszystkie wirtualne pliki konfiguracyjne hostów.

$ sudo mkdir/etc/nginx/witryny-dostępny/etc/nginx/witryny

3. Teraz nadszedł czas, aby stworzyć nowego wirtualnego hosta. W tym przykładzie użyje adresu IP systemu jako wirtualnej nazwy hosta, więc utwórz nowy plik wymieniony Nazwa-IP.conf.

sudo nano/etc/nginx/witryny-dostępny/nazwa-IP.conf

Dodaj następującą zawartość.

## Treść pliku ## serwer Słuchaj 80; Server_name 192.168.1.33; access_log/var/log/nginx/192.168.1.33.dostęp.dziennik; error_log/var/log/nginx/192.168.1.33.błąd.dziennik; root /srv /http; lokalizacja / indeks indeksu.Indeks HTML.Indeks HTM.php; autoindex on; autoIndex_Exact_Size Off; autoIndex_Localtime ON;  lokalizacja /phpMyAdmin rewrite ^ /* /phpMyAdmin last;  Lokalizacja ~ \.php $ #fastcgi_pass 127.0.0.1: 9000; (W zależności od konfiguracji gniazda php-fpm) fastcgi_pass unix:/run/php-fpm/php-fpm.skarpetka; indeks fastcgi_index.php; Dołącz FastCGI.conf; 
Utwórz nowy wirtualny host

Dyrektywa, która aktywuje wirtualny host jest Nazwa serwera Oświadczenie w porcie słuchania. Ponadto kolejną ważną dyrektywą jest tutaj źródło stwierdzenie, które wskazuje nginx wirtualny host, który będzie obsługiwał treść pliku z /srv/http/ ścieżka systemowa.

4. Ostatnim krokiem jest stworzenie /srv/http/ katalog i wykonanie Nazwa-IP.conf Konfiguracja pliku dostępna dla odczytu NGINX (za pomocą łącza symbolicznego), a następnie ponownie uruchom demona, aby nowe konfiguracje były widoczne.

$ sudo mkdir/srv/http/$ sudo ln -s/etc/nginx/witryny-dostępny/name-ip.conf/etc/nginx/witryny-obserwowane/$ sudo systemctl restart nginx
Rozpocznij serwer WWW Nginx

5. Aby to zweryfikować, wskaż przeglądarkę, aby wyleczyć adres IP system http: // localhost. Tutaj dodałem mały skrypt PHP, który również sprawdza FastCGI PHP Konfiguracje takie jak na zrzucie ekranu poniżej.

$ sudo nano/srv/http/info.php
## Treść pliku ## 
Sprawdź konfiguracje PHP FastCGI

6. Inna metoda, którą opracowałem, aby włączyć lub wyłączyć wirtualne hosty na Nginx, jest bardziej elegancka i jest inspirowana Apache a2eniste scenariusz.

Aby użyć tej metody, otwórz edytor plików i utwórz nowy plik, nazywany n2ensite, na Twoim $ Dom Ścieżka z poniższą zawartością, uczyń ją wykonywalną, uruchom z uprawnieniami root i przejdź jako opcję nowej nazwy wirtualnej hosta bez .conf Zakończenie (wypełnij bezpłatnie, aby go zmodyfikować zgodnie z Twoimi potrzebami).

$ sudo nano n2ensite
## Treść pliku ## #!/bin/bash if test -d/etc/nginx/sites -dostępny && test -d/etc/nginx/sitess -obserwowany; Następnie echo "------------------------------------------- „Else Mkdir/etc/nginx/Sites-dostępny mkdir/etc/nginx/witryny obsługujący Fi =/etc/nginx/witryny-dostępny/1 USD.conf enabled =/etc/nginx/witryny-obserwowany/site = "ls/etc/nginx/witryny-dostępny/" if ["$#" != "1"]; następnie echo "Użyj skryptu: n2EnSite Virtual_Site" Echo -e "\ Navailable Virtual Hosts: \ n $ Site" Exit 0 Else, jeśli test -e $ dostępny; Następnie sudo ln -s $ avalud $ enabled else echo -e "$ dostępny wirtualny host nie istnieje! Utwórz jeden!\ n $ witryna "exit 0 fi Jeśli test -e $ włączony/1 $.conf; Następnie Echo „Sukces!! Teraz restartuj serwer Nginx: sudo systemctl restart nginx „else echo -e” wirtualny host $ dostęp nie istnieje!\ nplease
Użyj skryptu A2Eniste

Uczyń go wykonywaniem i uruchom jako pokaz.

$ sudo chmod +x n2ensite $ sudo ./n2EnSite your_virtual_host
Włącz wirtualny host

7. Aby wyłączyć wirtualne hosty Utwórz nowe n2dissite plik z następującą zawartością i zastosuj te same ustawienia jak powyżej.

$ sudo nano n2dissite
## Treść pliku ## #!/bin/bash avalue =/etc/nginx/witryny-obserwator/1 USD.conf włączony =/etc/nginx/witryny witryny = "ls/etc/nginx/witryny-obserwowane/" if ["$#" != "1"]; następnie echo "Użyj skryptu: n2dissite virtual_site" echo -e "\ Navailable Virtual Hosts: \ n $ Site" Exit 0 exit 0 ext, jeśli test -e $ dostępny; wtedy sudo rm $ avalue else echo -e "$ dostępny wirtualny host nie istnieje! Wyjście!„Wyjdź 0 fi, jeśli test -e $ włączony/1 $.conf; Następnie błąd echo „!! Nie można usunąć $ dostępnego wirtualnego hosta!Sukces „else echo -e”! $ Dostępne zostało usunięte!\ nplease restart nginx: sudo systemctl restart nginx "exit 0 fi fi
Wyłącz wirtualne hosty

8. Teraz możesz użyć tych dwóch skryptów, aby włączyć lub wyłączyć dowolny wirtualny host, ale jeśli chcesz go zastosować jako polecenia systemowe, po prostu skopiuj oba skrypty do /usr/lokalny/bin/ a następnie możesz go użyć bez określania ścieżki.

$ sudo cp n2ensite n2dissite/usr/local/bin/
Użyj skryptu N2ENSITE, aby włączyć lub wyłączyć hosty

Krok 2: Włącz SSL z wirtualnymi hostami na Nginx

SSL (Bezpieczna warstwa gniazd) jest protokołem zaprojektowanym do szyfrowania połączeń HTTP w sieci lub Internecie, które sprawiają, że przepływ danych jest przesyłany przez bezpieczny kanał przy użyciu symetrycznych/asymetrycznych klawiszy kryptografii i jest dostarczany w Arch Linux przez pakiet OpenSSL Pakiet.

$ sudo pacman -s openssl
Zainstaluj pakiet OpenSSL

9. Aby włączyć połączenia HTTPS z NGINX, pierwszym zdaniem musisz generować klucze wirtualnych hostów. Ponadto, aby uprościć rzeczy, opracowałem małe skrypty, które automatycznie generują klucze kryptograficzne /etc/nginx/ssl Ścieżka katalogu, używając wirtualnych nazewnictwa hosta jako nazwy kluczowych.

Utwórz plik o nazwie nginx_gen_ssl i dodaj następujące treści.

$ sudo nano nginx_gen_ssl
## Treść pliku ## #!/bin/bash mkdir/etc/nginx/ssl cd/etc/nginx/ssl echo -e "Wprowadź swój wirtualny host fqdn: \ nThis wygeneruje domyślną nazwę dla certyfikatu Nginx SSL!„Przeczytaj cert openssl genpkey -algorytm rsa -pkeyopt rsa_keygen_bits: 2048 -out $ cert.Key CHMOD 600 $ CERT.Key Openssl Req -New -key $ cert.klucz -ut $ cert.CSR Openssl x509 -Req -Days 365 -in $ cert.CSR -SIGNKEY $ CERT.klucz -ut $ cert.crt echo -e „certyfikat $ cert został wygenerowany!\ nplease link do Nginx SSL dostępna strona internetowa!"ls -all/etc/nginx/ssl exit 0
Generuj wirtualne klucze hostów

10. Po utworzeniu skryptu Dołącz uprawnienia do wykonania, uruchom go i podaj opcje certyfikatu, najważniejsze Nazwa zwyczajowa pole (dodaj tutaj oficjalną nazwę domeny) i pozostaw hasło i opcjonalne pola firmy puste.

$ sudo chmod +x nginx_gen_ssl $ sudo ./nginx_gen_ssl
Ustaw uprawnienia Wykonaj Wygeneruj klucze SSL

Na końcu zadania generowania kluczy zostanie wyświetlona lista ze wszystkimi dostępnymi klawiszami w katalogu Nginx SSL.

Wymień wszystkie dostępne klucze

Również jeśli chcesz, aby ten skrypt był używany jako polecenie systemowe, skopiuj lub przenieś do /usr/lokalny/bin/.

$ sudo mv nginx_gen_ssl/usr/local/bin

11. Po wygenerowaniu kluczy niezbędnych do wirtualnego hosta Nginx SSL nadszedł czas, aby faktycznie utworzyć plik konfiguracyjny wirtualnego hosta SSL. Użyj tego samego adresu IP systemu dla wirtualnego hosta jak powyżej Nazwa serwera dyrektywa, ale nieznacznie zmień nazwę wirtualnego pliku hosta, dołączając wcześniej SSL .conf, Aby przypomnieć, że ten plik oznacza Nazwa-IP Wirtualny host SSL.

$ sudo nano/etc/nginx/witryny-availabe/name-ip-ssl.conf

W tej zmianie pliku Słuchać Instrukcja portu do 443 SSL i podaj ścieżki plików SSL i kluczy certyfikatów z tymi utworzonymi wcześniej, aby wyglądać w poniższym fragmencie.

## Treść pliku ## serwer Słuchaj 443 SSL; Server_name 192.168.1.33; SSL_Certificate/etc/nginx/ssl/192.168.1.33.crt; SSL_Certificate_Key/etc/nginx/ssl/192.168.1.33.klucz; SSL_SESSION_CACHE SHARED: SSL: 1M; ssl_session_timeout 5m; SSL_CIPHERS WYSOKI:!anull:!MD5; ssl_prefer_server_ciphers on; access_log/var/log/nginx/192.168.1.33-SSL.dostęp.dziennik; error_log/var/log/nginx/192.168.1.33-SSL.błąd.dziennik; root /srv /http; lokalizacja / indeks indeksu.Indeks HTML.Indeks HTM.php; autoindex on; autoIndex_Exact_Size Off; autoIndex_Localtime ON;  lokalizacja /phpMyAdmin rewrite ^ /* /phpMyAdmin last;  Lokalizacja ~ \.php $ #fastcgi_pass 127.0.0.1: 9000; (W zależności od konfiguracji gniazda php-fpm) fastcgi_pass unix:/run/php-fpm/php-fpm.skarpetka; indeks fastcgi_index.php; Dołącz FastCGI.conf; 
Utwórz wirtualne hosty SSL

12. Po utworzeniu pliku Użyj n2ensite skrypt lub Ln wiersz poleceń do jego aktywacji (tworzy link symboliczny pliku w witryny z obsługą katalog), a następnie ponownie uruchom demon nginx, aby zastosować ustawienia.

$ sudo ./N2ENSITE Nazwa-IP-SSL lub $ sudo ln -s/etc/nginx/witryny-dostępna/nazwa-IP-ssl.conf/etc/nginx/witryny-obserwowane/$ sudo systemctl restart nginx
Aktywne wirtualne hosty SSL

13. Ponownie skieruj przeglądarkę Arch IP URL Ale tym razem przy użyciu protokołu HTTPS - https: // 192.168.1.33 na moim systemie i Połączenie niezaufane powinien pojawić się błąd bezpieczeństwa ( Dodaj i potwierdź wyjątek bezpieczeństwa Aby przejść dalej na stronie).

Sprawdź połączenie HTTPS Sprawdź wirtualną zawartość hosta Sprawdź konfigurację PHP

Jak widać teraz Twój wirtualny host Nginx, obsługuje tę samą treść co poprzedni Nazwa-IP host, ale tym razem używając bezpiecznego połączenia HTTP.

Krok 3: Uzyskaj dostęp do phpMyAdmin przez wirtualny host

Jeśli wirtualny host jest włączony na Nginx, nie mamy już dostępu http: // localhost Treść ścieżki (LocalHost zwykle obsługuje treść za pomocą adresu IP Loopback lub adresu IP systemu, jeśli nie jest skonfigurowany inaczej), ponieważ użyliśmy arch Nazwa serwera Więc nasza ścieżka treści zmieniła się.

14. Najprostsza metoda uzyskania dostępu do PhpMyAdmin za pośrednictwem sieci jest stworzenie symbolicznego związku między /usr/share/webapps/phpMyAdmin/ ścieżka i nasza nowa zdefiniowana wirtualna ścieżka hosta (/srv/http).

$ sudo ln -s/usr/share/webapps/phpMyAdmin//srv/http/

15. Po wykonaniu powyższego polecenia odśwież stronę, a zobaczysz nowy folder phpMyAdmin Autoindex Instrukcja włączona na wirtualnym hoście NGINX lub skieruj adres URL bezpośrednio do folderu PhpMyAdmin https: // arch_ip/phpmyadmin.

16. Jeśli chcesz odkażyć ciąg phpMyAdmin na przeglądarce edytuj swoje wirtualne pliki hostów i dodaj następującą zawartość w bloku serwera.

lokalizacja /phpMyAdmin rewrite ^ /* /phpMyAdmin last; 
Uzyskaj dostęp do phpMyAdmin za pośrednictwem wirtualnego hosta

Krok 4: Włącz katalog chroniony hasłem na Nginx

W przeciwieństwie do Apache, Nginx używa Httpauthbasic moduł do włączenia Katalogi chronione hasłem ale nie zapewnia żadnych narzędzi do tworzenia szyfrowania .htpasswd plik.

17. Aby osiągnąć ochronę haseł z katalogu za pomocą Nginx na Arch Linux, zainstaluj Apache Web Server i użyj jego narzędzi do generowania zaszyfrowanych .Htaccess plik.

$ sudo pacman -s apache

18. Po zainstalowaniu Apache Utwórz nowy katalog poniżej /etc/nginx/ Nazwany intuicyjnie passwd gdzie .htpasswd Plik będzie przechowywany i użyty htpasswd polecenie z -C Włącz najpierw dodany użytkownik, aby wygenerować plik, to jeśli chcesz dodać więcej użytkowników, używa htpasswd bez -C przełącznik.

$ sudo mkdir/etc/nginx/passwd $ sudo htpasswd -c/etc/nginx/passwd/.htpasswd First_user $ sudo htpasswd/etc/nginx/passwd/.htpasswd second_user $ sudo htpasswd/etc/nginx/passwd/.htpasswd trzeci_user
Włącz katalog chroniony hasłem

19. W celu ochrony Nazwa-IP-SSL Wirtualny root hosta /srv/http/ obsługiwana ścieżka ze wszystkimi poddziałami i plikami pod nią Dodaj następujące instrukcje wewnątrz bloku wirtualnego serwera hosta w ramach Dyrektywy głównej i wskazują ją na bezwzględny .htpasswd ścieżka pliku.

Auth_basic „ograniczona strona internetowa”; auth_basic_user_file/etc/nginx/passwd/.htpasswd;
Ograniczona konfiguracja strony internetowej

20. Po ponownym uruchomieniu usługi Nginx, strony odświeżania i Wymagane uwierzytelnienie wyskakujące okienko powinno wydawać się wymagające dla twoich poświadczeń.

Wymagane uwierzytelnienie

Teraz pomyślnie włączyłeś Nginx Katalogi chronione hasłem Pamiętaj jednak, że w tym samym czasie serwer WWW Apache jest instalowany w systemie, więc upewnij się, że pozostaje wyłączony i w jakikolwiek sposób nie uruchamia się, ponieważ może prowadzić do konfliktu portów z Nginx.

Krok 5: Przekieruj HTTP do HTTPS na Nginx

21. Jeśli lubisz przeglądarki, aby automatycznie przekierować wszystkie niepewne żądania HTTP do protokołu HTTPS Otwórz i edytuj, że jesteś Non-SSL Wirtualny host i dodaj następujące instrukcje pod Nazwa serwera dyrektywa.

przepisz ^ https: // $ server_name $ request_URI? stały;
Przekieruj HTTP do HTTPS

Wszystkie ustawienia przedstawione w tym artykule, w którym wykonane zgodnie z Arch Linux System, który działa jako serwer, ale większość z nich, zwłaszcza te dotyczące plików konfiguracji Nginx, jest dostępny w większości systemów Linux z nieznacznie różnicami.