Buat host virtual, direktori pelindung kata sandi, dan sertifikat SSL menggunakan Nginx Web Server di Arch Linux

Buat host virtual, direktori pelindung kata sandi, dan sertifikat SSL menggunakan Nginx Web Server di Arch Linux

Artikel Arch Linux 'LEMP' sebelumnya baru saja membahas hal -hal dasar, dari menginstal layanan jaringan (NGINX, MySQL Database dan PhpMyAdmin) dan mengkonfigurasi keamanan minimal yang diperlukan untuk MySQL Server dan PhpMyAdmin.

Konfigurasi Nginx yang berguna di Arch Linux

Topik ini sangat terkait dengan instalasi LEMP sebelumnya di Arch Linux dan akan memandu Anda melalui pengaturan konfigurasi yang lebih kompleks untuk Lemp Stack, khususnya Nginx konfigurasi server web, seperti membuat Host virtual, menggunakan Direktori yang dilindungi kata sandi, Buat dan Konfigurasikan HTTP Secure Sockets Layer, Http tidak aman mengarahkan kembali ke Https dan juga akan memberi Anda beberapa skrip bash yang berguna yang akan memudahkan pekerjaan untuk mengaktifkan host virtual dan menghasilkan Sertifikat dan Kunci SSL.

Persyaratan

Instal LEMP dengan basis data MariaDB di Arch Linux

Langkah 1: Aktifkan host virtual di nginx

Salah satu metode paling sederhana untuk mengaktifkan Host virtual menggunakan termasuk Pernyataan pada file konfigurasi NGINX utama, yang membuat pekerjaan konfigurasi lebih lanjut lebih sederhana dan efisien karena Anda dapat membuat file sederhana untuk setiap host baru dan menjaga pembersihan file konfigurasi utama.

Pendekatan ini bekerja dengan cara yang sama seperti di Server Web Apache, Hal pertama yang perlu Anda lakukan adalah menentukan yang baru Uri jalur di mana nginx harus membaca arahan file.

1. Jadi, buka Nginx.conf File utama yang terletak di /etc/nginx/ jalur sistem dan di bagian bawah, sebelum braket keriting terakhir "”Tambahkan jalur di mana file konfigurasi host virtual masa depan akan berada.

$ sudo nano/etc/nginx/nginx.conf

Di bawah menambahkan pernyataan berikut.

termasuk/etc/nginx/diaktifkan situs/*.conf;
Aktifkan host virtual di nginx

Petunjuk ini memberi tahu nginx bahwa mereka harus membaca semua file yang ditemukan /etc/nginx/Situs-mendukung/ yang berakhir dengan a .conf perpanjangan.

2. Langkah selanjutnya adalah membuat Situs-Enabled direktori dan satu lagi, dipanggil situs-tersedia, Di mana Anda menyimpan semua file konfigurasi host virtual Anda.

$ sudo mkdir/etc/nginx/situs-tersedia/etc/nginx/situs yang diaktifkan

3. Sekarang saatnya membuat host virtual baru. Contoh ini akan menggunakan alamat IP sistem sebagai nama host virtual, jadi buat file baru bernama nama-ip.conf.

sudo nano/etc/nginx/situs-tersedia/nama-IP.conf

Tambahkan konten berikut.

## konten file ## server dengarkan 80; Server_name 192.168.1.33; access_log/var/log/nginx/192.168.1.33.mengakses.catatan; error_log/var/log/nginx/192.168.1.33.kesalahan.catatan; root /srv /http; Lokasi / indeks indeks.Indeks HTML.indeks htm.PHP; Autoindex aktif; autoIndex_exact_size off; autoIndex_localtime on;  location /phpMyadmin recrite ^ /* /phpMyadmin terakhir;  Lokasi ~ \.php $ #fastcgi_pass 127.0.0.1: 9000; (tergantung pada konfigurasi soket php-fpm Anda) fastcgi_pass unix:/run/php-fpm/php-fpm.kaus kaki; indeks fastcgi_index.PHP; Sertakan fastcgi.conf; 
Buat host virtual baru

Petunjuk yang mengaktifkan host virtual adalah nama server Pernyataan di bawah Port Mendengarkan. Juga, arahan penting lainnya di sini adalah akar pernyataan yang menunjukkan host virtual nginx untuk melayani konten file dari /srv/http/ jalur sistem.

4. Langkah terakhir adalah membuat /srv/http/ direktori dan buat nama-ip.conf Konfigurasi File Tersedia untuk Nginx Reading (menggunakan tautan simbolik), lalu restart daemon untuk membuat konfigurasi baru terlihat.

$ sudo mkdir/srv/http/$ sudo ln -s/etc/nginx/situs-tersedia/nama-IP.conf/etc/nginx/Situs-Enabled/$ sudo systemctl restart nginx
Mulai Nginx Web Server

5. Untuk memverifikasinya, arahkan browser Anda ke alamat IP sistem lengkung dan Anda harus melihat bahwa konten web berbeda dari http: // localhost. Di sini saya telah menambahkan skrip PHP kecil yang juga memeriksa Php fastcgi Konfigurasi seperti di tangkapan layar di bawah ini.

$ sudo nano/srv/http/info.php
## konten file ## 
Verifikasi konfigurasi php fastcgi

6. Metode lain yang telah saya kembangkan sendiri untuk mengaktifkan atau menonaktifkan host virtual di Nginx adalah yang lebih elegan dan terinspirasi dari Apache a2eniste naskah.

Untuk menggunakan metode ini, buka editor file dan buat file baru, dipanggil n2ensite, pada Anda $ Rumah jalur dengan konten di bawah ini, buat itu dapat dieksekusi, jalankan dengan hak istimewa root dan lulus sebagai opsi untuk nama host virtual baru Anda tanpa .conf berakhir (isi gratis untuk memodifikasinya sesuai dengan kebutuhan Anda).

$ sudo nano n2ensite
## konten file ## #!/bin/bash jika uji -d/etc/nginx/situs -tersedia && test -d/etc/nginx/situs -diabled; lalu echo "----------------------------------------------- "Lain mkdir/etc/nginx/situs-tersedia mkdir/etc/nginx/situs-berkemampuan fi tersedia =/etc/nginx/situs-tersedia/$ 1.conf enabled =/etc/nginx/situs-diable/situs = "ls/etc/nginx/situs-tersedia/" jika ["$#" != "1"]; Kemudian echo "Gunakan skrip: n2ensite virtual_site" echo -e "\ navailable virtual hosts: \ n $ situs" keluar 0 lain jika tes -e $ tersedia; lalu sudo ln -s $ avail $ enabled else echo -e "$ avail virtual host tidak ada! Harap buat satu!\ n $ situs "Keluar 0 fi jika tes -e $ diaktifkan/$ 1.conf; lalu gema "sukses!! Sekarang restart Nginx Server: sudo systemctl restart nginx "else echo -e" virtual host $ avail tidak ada!\ nPlease Lihat host virtual yang tersedia: \ n $ situs "Keluar 0 fi fi
Gunakan skrip a2eNiste

Membuatnya dapat dieksekusi dan menjalankannya sebagai pertunjukan.

$ sudo chmod +x n2ensite $ sudo ./n2ensite your_virtual_host
Aktifkan virtual host

7. Untuk menonaktifkan host virtual membuat yang baru n2dissite file dengan konten berikut dan terapkan pengaturan yang sama seperti di atas.

$ sudo nano n2dissite
## konten file ## #!/bin/bash avail =/etc/nginx/Situs-Enabled/$ 1.conf enabled =/etc/nginx/situs yang diaktifkan situs = "ls/etc/nginx/situs-berkemampuan/" jika ["$#" != "1"]; Kemudian echo "Gunakan skrip: n2dissite virtual_site" echo -e "\ navailable virtual hosts: \ n $ situs" keluar 0 lain jika tes -e $ tersedia; Maka sudo rm $ avele lain echo -e "$ avail virtual host tidak ada! Keluar!"Keluar 0 fi jika tes -e $ diaktifkan/$ 1.conf; lalu gema "kesalahan!! Tidak dapat menghapus $ tersedia host virtual!Keberhasilan "lain echo -e"! $ tersedia telah dihapus!\ nPlease restart nginx: sudo systemctl restart nginx "keluar 0 fi fi
Nonaktifkan host virtual

8. Sekarang Anda dapat menggunakan dua skrip ini untuk mengaktifkan atau menonaktifkan host virtual apa pun tetapi jika Anda ingin menerapkannya sebagai perintah sistem lebar cukup salin kedua skrip /usr/lokal/bin/ dan kemudian Anda dapat menggunakannya tanpa menentukan jalur.

$ sudo cp n2ensite n2dissite/usr/local/bin/
Gunakan skrip n2ensit untuk mengaktifkan atau menonaktifkan host

Langkah 2: Aktifkan SSL dengan host virtual di nginx

SSL (Lapisan Soket Aman) adalah protokol yang dirancang untuk mengenkripsi koneksi HTTP melalui jaringan atau internet, yang membuat aliran data ditransmisikan melalui saluran yang aman menggunakan tombol kriptografi simetris/asimetris dan disediakan di Arch Linux oleh Openssl Package.

$ sudo pacman -s openssl
Instal Paket OpenSSL

9. Untuk mengaktifkan koneksi https dengan nginx, pemikiran pertama yang perlu Anda lakukan adalah menghasilkan kunci host virtual. Juga, untuk menyederhanakan hal -hal, saya telah mengembangkan skrip kecil yang secara otomatis menghasilkan kunci kriptografi /etc/nginx/ssl jalur direktori, menggunakan penamaan host virtual sebagai nama kunci.

Buat file bernama nginx_gen_ssl dan tambahkan konten berikut.

$ sudo nano nginx_gen_ssl
## konten file ## #!/bin/bash mkdir/etc/nginx/ssl cd/etc/nginx/ssl echo -e "Masukkan host virtual Anda fqdn: \ nthis akan menghasilkan nama default untuk Nginx SSL Certificate!"Baca sertifikat OpenSSL Genpkey -Algorithm RSA -PKeyOpt RSA_KEYGEN_BITS: 2048 -out $ sertifikat.kunci chmod 600 $ sertifikat.Kunci openssl req -new -key $ sertifikat.kunci -out $ sertifikat.CSR OPENSSL X509 -REQ -DARI 365 -in $ CERT.CSR -SIGNKEY $ CERT.kunci -out $ sertifikat.crt echo -e "sertifikat $ sertifikat telah dihasilkan!\ nPlease tautkan ke situs web Nginx SSL yang tersedia!"LS -all/etc/nginx/SSL EXIT 0
Menghasilkan kunci host virtual

10. Setelah skrip dibuat, tambahkan izin eksekusi, jalankan dan berikan opsi sertifikat Anda, yang paling penting Nama yang umum Bidang (tambahkan nama domain resmi di sini) dan tinggalkan kata sandi dan bidang perusahaan opsional.

$ sudo chmod +x nginx_gen_ssl $ sudo ./nginx_gen_ssl
Atur izin eksekusi Menghasilkan kunci SSL

Di akhir tugas pembuatan kunci, daftar dengan semua tombol yang tersedia di bawah direktori Nginx SSL akan ditampilkan.

Cantumkan semua kunci yang tersedia

Juga jika Anda ingin skrip ini digunakan sebagai perintah sistem, salin atau pindahkan ke /usr/lokal/bin/.

$ sudo mv nginx_gen_ssl/usr/local/bin

11. Setelah kami menghasilkan kunci yang diperlukan untuk host virtual nginx SSL saatnya untuk benar -benar membuat file konfigurasi host virtual SSL. Gunakan alamat IP sistem yang sama untuk host virtual seperti di atas nama server Petunjuk tetapi, sedikit mengubah nama file host virtual dengan menambahkan SSL sebelumnya .conf, untuk mengingatkan Anda bahwa file ini berarti nama-ip SSL Virtual Host.

$ sudo nano/etc/nginx/situs-availabe/name-iP-ssl.conf

Pada perubahan file ini mendengarkan Pernyataan pelabuhan ke 443 SSL dan menyediakan jalur file kunci SSL dan sertifikat dengan yang dibuat sebelumnya agar terlihat seperti di bawah kutipan di bawah ini.

## konten file ## Server Listen 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.kunci; SSL_SESSION_CACHE Dibagikan: SSL: 1M; ssl_session_timeout 5m; SSL_CIPHERS Tinggi:!Anull:!MD5; ssl_prefer_server_ciphers on; access_log/var/log/nginx/192.168.1.33-ssl.mengakses.catatan; error_log/var/log/nginx/192.168.1.33-ssl.kesalahan.catatan; root /srv /http; Lokasi / indeks indeks.Indeks HTML.indeks htm.PHP; Autoindex aktif; autoIndex_exact_size off; autoIndex_localtime on;  location /phpMyadmin recrite ^ /* /phpMyadmin terakhir;  Lokasi ~ \.php $ #fastcgi_pass 127.0.0.1: 9000; (tergantung pada konfigurasi soket php-fpm Anda) fastcgi_pass unix:/run/php-fpm/php-fpm.kaus kaki; indeks fastcgi_index.PHP; Sertakan fastcgi.conf; 
Buat host virtual SSL

12. Setelah file dibuat n2ensite skrip atau ln baris perintah untuk mengaktifkannya (membuat tautan simbolis file di Situs-Enabled direktori), lalu restart daemon nginx untuk menerapkan pengaturan.

$ sudo ./n2ensite name-IP-SSL atau $ sudo ln -s/etc/nginx/situs-tersedia/nama-IP-SSL.conf/etc/nginx/Situs-Enabled/$ sudo systemctl restart nginx
Host virtual SSL aktif

13. Sekali lagi arahkan browser Anda ke URL IP Arch Tapi kali ini menggunakan protokol https - https: // 192.168.1.33 di sistem saya- dan a Koneksi tidak dipercaya Kesalahan keamanan akan muncul ( Tambahkan dan Konfirmasi Pengecualian Keamanan untuk melangkah lebih jauh di halaman).

Verifikasi Koneksi HTTPS Verifikasi konten host virtual Verifikasi konfigurasi PHP

Karena sekarang Anda dapat melihat host virtual nginx Anda melayani konten yang sama seperti sebelumnya nama-ip host tetapi kali ini menggunakan koneksi http aman.

Langkah 3: Akses phpMyadmin melalui virtual host

Jika virtual host diaktifkan di nginx, kami tidak lagi memiliki akses ke http: // localhost konten jalur (localhost biasanya melayani konten menggunakan alamat IP loopback atau alamat IP sistem jika tidak dikonfigurasi) karena kami telah menggunakan IP sistem arch sebagai nama server Jadi jalur konten kami telah berubah.

14. Metode paling sederhana untuk mendapatkan akses PhpMyadmin Melalui web adalah membuat tautan simbolis antara /usr/share/webapps/phpMyadmin/ jalur dan jalur host virtual baru kami (/srv/http).

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

15. Setelah Anda mengeksekusi perintah di atas, segarkan halaman Anda dan Anda akan melihat folder baru phpMyadmin muncul, jika Autoindex Pernyataan diaktifkan pada host virtual nginx atau arahkan URL Anda langsung ke folder phpMyadmin https: // arch_ip/phpmyadmin.

16. Jika Anda ingin membersihkan string phpmyadmin pada browser Edit file host virtual Anda dan menambahkan konten berikut di bawah blok server.

Lokasi /PhpMyAdmin REWRITE ^ /* /PHPMyAdmin terakhir; 
Akses phpMyadmin melalui virtual host

Langkah 4: Aktifkan Direktori Dilindungi Kata Sandi di Nginx

Tidak seperti Apache, Nginx menggunakan Httpauthbasic modul untuk mengaktifkan Direktori yang dilindungi kata sandi tetapi tidak menyediakan alat apa pun untuk membuat terenkripsi .htpasswd mengajukan.

17. Untuk mencapai perlindungan kata sandi direktori dengan Nginx di Arch Linux Install Apache Web Server dan gunakan alatnya untuk menghasilkan yang dienkripsi .htaccess mengajukan.

$ sudo Pacman -s Apache

18. Setelah Anda menginstal Apache, buat direktori baru di bawah /etc/nginx/ dinamai Passwd secara intuitif di mana .htpasswd file akan disimpan dan digunakan htpasswd perintah dengan -C Nyalakan pengguna pertama yang ditambahkan untuk menghasilkan file, lalu jika Anda ingin menambahkan lebih banyak penggunaan pengguna htpasswd tanpa -C mengalihkan.

$ 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 ketiga_user
Aktifkan direktori yang dilindungi kata sandi

19. Untuk melindungi Nama-IP-SSL Root host virtual /srv/http/ disajikan jalur dengan semua sub folder dan file di bawahnya menambahkan instruksi berikut di dalam blok server host virtual Anda di bawah arahan root dan arahkan ke absolute .htpasswd jalur file.

auth_basic "situs web terbatas"; auth_basic_user_file/etc/nginx/passwd/.htpasswd;
Konfigurasi Situs Web Terbatas

20. Setelah Anda memulai kembali Layanan Nginx, Refresh Page dan Diperlukan otentikasi Popup akan tampak menuntut kredensial Anda.

Diperlukan otentikasi

Sekarang Anda telah berhasil mengaktifkan nginx Direktori yang dilindungi kata sandi Tetapi perhatikan bahwa waktu yang sama server web Apache diinstal di sistem Anda jadi pastikan bahwa itu tetap dinonaktifkan dan dengan cara apa pun tidak memulainya karena dapat menyebabkan port yang bertentangan dengan Nginx.

Langkah 5: Redirect http ke https di nginx

21. Jika Anda ingin browser secara otomatis mengarahkan semua permintaan HTTP yang tidak aman ke HTTPS Protocol Open dan Edit Anda non-SSL Virtual host dan tambahkan instruksi berikut di bawah nama server pengarahan.

Tulis ulang ^ https: // $ server_name $ request_uri? permanen;
Redirect http ke https

Semua pengaturan yang disajikan pada artikel ini di mana dibuat di bawah Arch Linux Sistem yang bertindak sebagai server, tetapi kebanyakan dari mereka, terutama yang mengenai file konfigurasi nginx, tersedia di sebagian besar sistem Linux dengan sedikit perbedaan.