Crie hosts virtuais, diretórios de proteção de senha e certificados SSL usando Nginx Web Server no Arch Linux

Crie hosts virtuais, diretórios de proteção de senha e certificados SSL usando Nginx Web Server no Arch Linux

O artigo anterior do Arch Linux 'Lemp' apenas abordou coisas básicas, desde a instalação de serviços de rede (NGINX, MySQL Database e Phpmyadmin) e configure segurança mínima necessária para o MySQL Server e Phpmyadmin.

Configurações NGINX úteis no Arch Linux

Este tópico está estritamente relacionado à antiga instalação do Lemp no Arch Linux e o guiará através da definição de configurações mais complexas para a pilha Lemp, especialmente Nginx Configurações do servidor da web, como criar Hosts virtuais, usar Diretórios protegidos por senha, Crie e configure Camada de soquetes seguros http, Http inseguro redireciona para Https e também apresentará alguns scripts de bash úteis que facilitarão o trabalho em ativar hosts virtuais e gerar Certificado SSL e chaves.

Requisitos

Instale o Lemp com o banco de dados Mariadb no Arch Linux

Etapa 1: Ativar hosts virtuais no nginx

Um dos métodos mais simples de ativar Hosts virtuais está usando incluir Declarações no arquivo de configuração principal do NGINX, que torna o trabalho de outras configurações mais simples e eficientes, porque você pode criar arquivos simples para cada novo host e manter o arquivo de arquivo de configuração principal.

Esta abordagem funciona da mesma maneira que em Servidor da web apache, A primeira coisa que você precisa fazer é especificar o novo Uri Caminho onde o nginx deve ler as diretivas de arquivos.

1. Então, aberto nginx.conf arquivo principal localizado em /etc/nginx/ caminho do sistema e no fundo, antes do último suporte encaracolado “”Adicione o caminho em que os futuros arquivos de configuração do host virtual residirão.

$ sudo nano/etc/nginx/nginx.conf

No fundo, adicione a seguinte declaração.

Incluir/etc/nginx/sites-habilitado/*.conf;
Ativar hosts virtuais no nginx

Esta diretiva diz ao nginx que deve ler todos os arquivos que são encontrados em /etc/nginx/sites habilitados/ que termina com um .conf extensão.

2. O próximo passo é criar sites habilitados diretório e outro, chamado Sites disponíveis, onde você armazena todos os seus arquivos de configuração de hosts virtuais.

$ sudo mkdir/etc/nginx/sites-disponível/etc/nginx/sites-habilitados

3. Agora é hora de criar um novo host virtual. Este exemplo usará o endereço IP do sistema como nome do host virtual, então crie um novo arquivo chamado nome-ip.conf.

sudo nano/etc/nginx/sites-averable/name-ip.conf

Adicione o seguinte conteúdo.

## Conteúdo do arquivo ## servidor ouça 80; Server_name 192.168.1.33; Access_log/var/log/nginx/192.168.1.33.acesso.registro; error_log/var/log/nginx/192.168.1.33.erro.registro; raiz /srv /http; Localização / Índice Index.Índice HTML.Índice HTM.php; AutoIndex ligado; autoindex_exact_size off; autoindex_localtime on;  localização /phpmyadmin rewrite ^ /* /phpmyadmin last;  localização ~ \.php $ #fastcgi_pass 127.0.0.1: 9000; (Dependendo da sua configuração de soquete PHP-FPM) fastcgi_pass unix:/run/php-fpm/php-fpm.meia; Índice FastCGI_Index.php; Inclua fastcgi.conf; 
Crie novo host virtual

A diretiva que ativa o host virtual é nome do servidor declaração em porto de escuta. Além disso, outra diretiva importante aqui é raiz declaração que aponta o host virtual nginx para servir o conteúdo do arquivo de /srv/http/ caminho do sistema.

4. O último passo é criar /srv/http/ diretório e make nome-ip.conf Configuração de arquivos disponível para leitura nginx (usando link simbólico) e reinicie o daemon para tornar as novas configurações visíveis.

$ sudo mkdir/srv/http/$ sudo ln -s/etc/nginx/sites-averable/name-ip.conf/etc/nginx/sites-inabled/$ sudo systemctl reiniciar nginx
Inicie o Nginx Web Server

5. Para verificar, aponte seu navegador para arquear o endereço IP do sistema e você deve ver que o conteúdo da web é diferente de http: // localhost. Aqui eu adicionei um pequeno script PHP que também verifica Fastcgi php configurações como na captura de tela abaixo.

$ sudo nano/srv/http/info.php
## Conteúdo do arquivo ## 
Verifique as configurações do fastcgi php

6. Outro método que me desenvolvi para ativar ou desativar hosts virtuais no Nginx é mais elegante e é inspirado no Apache A2eniste roteiro.

Para usar este método, abra um editor de arquivos e crie um novo arquivo, chamado n2ensite, Nas suas $ Home caminho com o conteúdo abaixo, faça -o executável, execute -o com privilégios de raiz e passe como uma opção para o seu novo nome de host virtual sem .conf terminando (preencha livre para modificá -lo de acordo com suas necessidades).

$ sudo nano n2ensite
## Conteúdo do arquivo ## #!/bin/bash se teste -d/etc/nginx/sites -ALVACILADE && test -d/etc/nginx/sites -habilitados; Então echo "--------------------------------------------- "Caso contrário, mkdir/etc/nginx/sites e mkdir/etc/nginx/sites habilitados para sites, unham =/etc/nginx/sites que estão disponíveis/$ 1.Confabed =/etc/nginx/sites-inabled/site = "ls/etc/nginx/sites-anicable/" se ["$#" !"1"]; então eco "use script: n2ensite virtual_site" echo -e "\ hosts virtuais de navegação: \ n $ site" saia 0 else se test -e $ up; Então sudo ln -s $ datb $ habilitado, casond eco -e "$ datune host virtual não existe! Por favor, crie um!\ n $ site "saia 0 fi se teste -e $ habilitado/$ 1.conf; Então eco "sucesso!! Agora reinicie o servidor nginx: sudo systemctl reinicie nginx "else eco -e" host virtual $ uk!\ Nplease Consulte os hosts virtuais disponíveis: \ n $ site "Sair 0 fi fi
Use script A2eniste

Faça -o executável e executá -lo como show.

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

7. Para desativar os hosts virtuais, crie um novo n2dissite Arquive com o seguinte conteúdo e aplique as mesmas configurações acima.

$ sudo nano n2dissite
## Conteúdo do arquivo ## #!/bin/bash up =/etc/nginx/sites-habilitado/$ 1.confiled =/etc/nginx/sites-habilitado site = "ls/etc/nginx/sites-inabled/" se ["$#" !"1"]; então eco "use script: n2dissite virtual_site" echo -e "\ hosts virtuais de navegação: \ n $ sity" saia 0 else se teste -e $ aproveitado; então sudo rm $ datune mais echo -e "$ host virtual não existe! Saindo!"Saia 0 fi se teste -e $ habilitado/$ 1.conf; Então eco "erro!! Não foi possível remover $ host virtual!Sucesso "else eco -e"! $ datn foi removido!\ NPLESE reiniciar nginx: sudo systemctl reinicie nginx "saída 0 fi fi
Desative hosts virtuais

8. Agora você pode usar esses dois scripts para ativar ou desativar qualquer host virtual, mas se você quiser aplicá -lo como comandos amplos do sistema, basta copiar os dois scripts para /usr/local/bin/ E então você pode usá -lo sem especificar o caminho.

$ sudo cp n2ensite n2dissite/usr/local/bin/
Use o script n2ensite para ativar ou desativar hosts

Etapa 2: Ativar SSL com hosts virtuais no nginx

Ssl (Camada de soquetes seguros) é um protocolo projetado para criptografar conexões HTTP em redes ou internet, que fazem com que os dados fluam a serem transmitidos em um canal seguro usando chaves de criptografia simétrica/assimétrica e é fornecida no pacote Arch Linux by OpenSSL.

$ sudo pacman -s openssl
Instale o pacote OpenSSL

9. Para ativar as conexões HTTPS com o nginx, o primeiro pensa que você precisa fazer é gerar teclas de hosts virtuais. Além disso, para simplificar as coisas, desenvolvi pequenos scripts que geram automaticamente as chaves criptográficas em /etc/nginx/ssl Caminho do diretório, usando o nome do host virtual como nomes -chave.

Crie um arquivo chamado nginx_gen_sssl e adicione o seguinte conteúdo.

$ sudo nano nginx_gen_ssl
## Conteúdo do arquivo ## #!/bin/bash mkdir/etc/nginx/ssl cd/etc/nginx/ssl eco -e "Digite seu host virtual fqdn: \ \ \ \ \ \ \ \ \ \ \ \!"Leia o Cert OpenSSL GenpKey -Algorithm RSA -PKEYOPT RSA_KEYGEN_BITS: 2048 -OUT $ CERT.chave CHMOD 600 $ CERT.key OpenSSL Req -New -Key $ CERT.Chave -out $ certificado.CSR OpenSSL X509 -Req -Days 365 -Em $ CERT.CSR -SignKey $ CERT.Chave -out $ certificado.CRT eco -e "O certificado $ certificado foi gerado!\ NPLEASELE LINK -o ao site Nginx SSL disponível!"LS -Al/etc/nginx/ssl saída 0
Gerar teclas de hosts virtuais

10. Depois que o script foi criado, apleem as permissões de execução, execute -o e forneça suas opções de certificado, o mais importante sendo Nome comum Campo (adicione o nome de domínio oficial aqui) e deixe a senha e os campos opcionais da empresa em branco.

$ sudo chmod +x nginx_gen_sssl $ sudo ./nginx_gen_sssl
Definir permissões de execução Gerar teclas SSL

No final da tarefa de geração de chaves, uma listagem com todas as teclas disponíveis no diretório SSL NGINX será exibida.

Liste todas as chaves disponíveis

Além disso, se você deseja que este script seja usado como um comando do sistema, copie ou mova -o /usr/local/bin/.

$ sudo mv nginx_gen_ssl/usr/local/bin

11. Depois de gerarmos as chaves necessárias para o host virtual nginx SSL, é hora de realmente criar o arquivo de configuração do host virtual SSL. Use o mesmo endereço IP do sistema para host virtual como acima nome do servidor Diretiva, mas, altere um pouco o nome do arquivo virtual do host, anexando SSL antes .conf, para lembrá -lo que este arquivo significa nome-ip SSL Virtual Host.

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

Nesta mudança de arquivo ouvir Declaração de porta para 443 SSL e forneça os caminhos de arquivos de chave SSL e certificado com os criados anteriormente para se parecer com o trecho abaixo.

## Conteúdo do arquivo ## servidor Ouça 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.chave; ssl_session_cache compartilhado: ssl: 1m; ssl_session_timeout 5m; SSL_CIPHERS HIGH:!Anull:!Md5; ssl_prefer_server_ciphers on; Access_log/var/log/nginx/192.168.1.33-SSL.acesso.registro; error_log/var/log/nginx/192.168.1.33-SSL.erro.registro; raiz /srv /http; Localização / Índice Index.Índice HTML.Índice HTM.php; AutoIndex ligado; autoindex_exact_size off; autoindex_localtime on;  localização /phpmyadmin rewrite ^ /* /phpmyadmin last;  localização ~ \.php $ #fastcgi_pass 127.0.0.1: 9000; (Dependendo da sua configuração de soquete PHP-FPM) fastcgi_pass unix:/run/php-fpm/php-fpm.meia; Índice FastCGI_Index.php; Inclua fastcgi.conf; 
Crie hosts virtuais SSL

12. Depois que o arquivo foi criado, use n2ensite script ou ln linha de comando para ativá -la (cria um link simbólico de arquivo em sites habilitados diretório) e reinicie o daemon nginx para aplicar configurações.

$ sudo ./n2ensite name-ip-ssl ou $ sudo ln -s/etc/nginx/sites-anable/name-ip-ssl.conf/etc/nginx/sites-inabled/$ sudo systemctl reiniciar nginx
Hosts virtuais ativos SSL

13. Novamente aponte seu navegador para Arch IP URL Mas desta vez usando o protocolo HTTPS - https: // 192.168.1.33 no meu sistema- e um Conexão não confiável O erro de segurança deve aparecer ( Adicione e confirme a exceção de segurança ir além na página).

Verifique a conexão HTTPS Verifique o conteúdo do host virtual Verifique a configuração do PHP

Como você pode ver agora seu host virtual nginx serve o mesmo conteúdo que anterior nome-ip host, mas desta vez usando uma conexão segura HTTP.

Etapa 3: Access PhpMyadmin através do host virtual

Se o host virtual estiver ativado no nginx, não temos mais acesso a http: // localhost Conteúdo do caminho (o localhost geralmente serve conteúdo usando o endereço IP do loopback ou o endereço IP do sistema, se não estiver configurado de outra forma) porque usamos o sistema de arco IP como nome do servidor Então, nosso caminho de conteúdo mudou.

14. O método mais simples para obter acesso a Phpmyadmin através da Web é criar um vínculo simbólico entre /usr/share/webapps/phpmyadmin/ caminho e nosso novo caminho de hospedeiro virtual definido (/srv/http).

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

15. Depois de executar o comando acima, atualize sua página e você verá uma nova pasta phpmyadmin aparecer, se AutoIndex Declaração habilitada no host virtual nginx ou aponte seu URL diretamente para a pasta phpmyadmin https: // arch_ip/phpmyadmin.

16. Se você deseja higienizar a string phpmyadmin no navegador editar seus arquivos de hosts virtuais e adicionar o seguinte conteúdo em bloco de servidor.

localização /phpmyadmin rewrite ^ /* /phpmyadmin last; 
Acesse phpmyadmin via host virtual

Etapa 4: Ativar diretório protegido por senha no nginx

Ao contrário do Apache, o nginx usa Httpauthbasic módulo para ativar Diretórios protegidos por senha mas não fornece nenhuma ferramenta para criar um criptografado .htpasswd arquivo.

17. Para alcançar a proteção de senha do diretório com o nginx no Arch Linux Instalar o Apache Web Server e usar suas ferramentas para gerar um criptografar .htaccess arquivo.

$ sudo pacman -s apache

18. Depois de instalar o Apache, crie um novo diretório em /etc/nginx/ nomeado intuitivamente se passou por onde .htpasswd O arquivo será armazenado e usará htpasswd comando com -c Ligue o primeiro usuário adicionado para gerar arquivo, se você quiser adicionar mais usuários htpasswd sem -c trocar.

$ sudo mkdir/etc/nginx/passwd $ sudo htpasswd -c/etc/nginx/passwd/.htpasswd primeiro_user $ sudo htpasswd/etc/nginx/passwd/.htpasswd segundo_user $ sudo htpasswd/etc/nginx/passwd/.htpasswd terceiro_user
Ativar diretório protegido por senha

19. Para proteger nome-ip-ssl Raiz virtual host /srv/http/ Serviu caminho com todas as suas sub -pastas e arquivos abaixo dele, adicione as seguintes instruções dentro do seu bloco de servidor host virtual na diretiva raiz e aponte para absoluto .htpasswd caminho de arquivo.

auth_basic "site restrito"; auth_basic_user_file/etc/nginx/passwd/.htpasswd;
Configuração restrita do site

20. Depois de reiniciar o serviço Nginx, atualizará a página e um Autentificação requerida pop -up deve parecer exigente para suas credenciais.

Autentificação requerida

Agora você habilitou com sucesso o nginx Diretórios protegidos por senha Mas esteja ciente de que, ao mesmo tempo, o servidor web Apache está instalado em seu sistema, portanto, verifique se ele permanece desativado e, por qualquer meio.

Etapa 5: redirecionar http para https no nginx

21. Se você deseja que os navegadores redirem automaticamente todas as solicitações HTTP inseguras para o protocolo HTTPS aberto e edite não-SSL Host virtual e adicione a seguinte instrução em nome do servidor diretivo.

reescrever ^ https: // $ server_name $ request_uri? permanente;
Redirecionar http para https

Todas as configurações apresentadas neste artigo, quando feito em um Arch Linux O sistema que atua como um servidor, mas a maioria deles, especialmente aqueles em relação a arquivos de configurações nginx, estão disponíveis na maioria dos sistemas Linux com diferenças ligeiramente.