Nginx 安全控制

当我们的内容很有价值,并且我们关心用户的隐私和安全时,我们可以使用 Nginx 来控制和保护对服务和数据的访问。

Nginx SSL 连接

SSL(安全套接字层)连接在将加密数据从客户端计算机发送到网络服务器之前使用证书进行身份验证。

在本节中,我们将介绍如何在  NGINX 上配置 HTTPS 服务器。

要在我们的 nginx.conf 文件中设置 HTTPS 服务器,请将 ssl 参数添加到 server 块中的 listen 指令,然后指定服务器证书和私钥文件的位置:

server {  
    listen              443 ssl;  
    server_name         www.cainiaoplus.com;
    ssl_certificate     www.cainiaoplus.com.crt;
    ssl_certificate_key www.cainiaoplus.com.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;  
    ssl_ciphers         HIGH:!aNULL:!MD5;  
    #...  
} 

服务器证书是一个公共实体。它被发送到连接到 Nginx 的每个客户端。

私钥是安全的密钥或实体,应存储在访问受限的文件中。但是 nginx 的 master 进程必须能够读取这个文件。我们还可以将私钥存储在与证书相同的文件中。

ssl_certificate     www.cainiaoplus.com.cert;
ssl_certificate_key www.cainiaoplus.com.cert;  

ssl_protocol 和 ssl_ciphers 指令可用于要求客户端在建立连接时使用的 SSL/TLS 版本和加密方案。

使用 HTTP 基本身份验证限制访问

我们可以通过实施用户名和密码身份验证来限制对我们网站或其某些部分的访问。用户名和密码取自密码文件创建工具(例如 apache2-utils)创建。

创建密码文件

要创建用户名-密码对,请使用密码文件创建实用程序,例如 httpd-tools 或 apache2-utils:

1. 首先,验证是否安装了 httpd-tools 或 apache2-utils。

2. 创建密码文件和第一个用户,运行带有 -c 标志的 htpasswd 实用程序,用于创建新文件,文件路径名作为第一个参数,用户名作为第二个参数。

$ sudo htpasswd -c /etc/apache2/.htpasswd user1  

按 Enter 并在出现提示时输入 user1 的密码。

3. 创建额外的用户名-密码对。省略 -c 标志,因为文件已经存在:

$ sudo htpasswd /etc/apache2/.htpasswd user2

4. 我们可以确保文件包含配对的用户名和加密密码:

$ cat /etc/apache2/.htpasswd  
user1:$apr1$/woC1jnP$KAh0SsVn5qeSMjTtn0E9Q0  
user2:$apr1$QdR8fNLT$vbCEEzDj7LyqCMyNpSoBh/  
user3:$apr1$Mr5A0e.U$0j39Hp5FfxRkneklXaMrr/  

配置 Nginx HTTP 基本身份验证 

1. 在我们要保护的 location 内,定义 auth_basic 指令并为受密码保护的区域命名。当要求提供凭据时,该区域的名称将显示在用户名和密码对话框中。

location /api {  
    auth_basic "Administrator's Area";  
    #...  
}  

2. 使用 auth_basic_user_file 指令指定包含用户/密码对的 .htpasswd 文件:

location /api {  
    auth_basic           "Administrator's Area";  
    auth_basic_user_file /etc/apache2/.htpasswd;   
}