Nginx 安全控制
当我们的内容很有价值,并且我们理所当然地关心用户的隐私和安全时,我们可以使用 Nginx 来控制和保护访问我们的服务和我们管理的数据。
Nginx SSL 终止
SSL(安全套接字层)连接在从客户端计算机发送加密数据之前使用证书进行身份验证到网络服务器。 SSL 终止是 SSL 卸载(解密)的一种形式,将部分责任从网络服务器转移到不同的机器上。 SSL 终止用于识别加密数据。
在本节中,我们将介绍如何在 Nginx Plus 和 Nginx 上配置 HTTPS 服务器。
在我们的Nginx.conf 文件,在 server 块中的 listen 指令中添加 ssl 参数,然后指定服务器证书和私钥文件的位置:
server { listen 443 ssl; server_name www.example.com; ssl_certificate www.example.com.crt; ssl_certificate_key www.example.com.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; #... }
服务器证书是公共实体。它被发送到每个连接到 Nginx Plus 或 Nginx 的客户端。
私钥是一个安全的密钥或实体,应该存储在一个限制访问的文件中。但是Nginx的master进程必须能够读取这个文件。我们也可以将私钥存储在与证书相同的文件中。
ssl_certificate www.example.com.cert; ssl_certificate_key www.example.com.cert;
ssl_protocol 和 ssl_ciphers 指令可用于要求客户端在建立连接时仅使用 SSL/TLS 的强版本和密码。
TCP 上游服务器的 SSL 终止
获取 SSL 证书
首先,我们需要获取服务器证书和私钥并将它们放在服务器上。证书可以从受信任的 CA(证书颁发机构)获取或使用 SSL 库(如 OpenSSL)生成。
配置 Nginx Plus
要配置 SSL 终止,请在 Nginx Plus 配置中包含以下指令:
启用 SSL
要启用 SSL,请定义将连接传递到上游服务器组的 TCP 服务器的 listen 指令的 ssl 参数:
stream { server { listen 12345 ssl; proxy_pass backend; #... } }
添加 SSL 证书
要添加 SSL 证书,请使用 ssl_certificate 指令定义证书的路径,并指定私钥的路径在 ssl_certificate_key 指令中:
server { #... ssl_certificate /etc/ssl/certs/server.crt; ssl_certificate_key /etc/ssl/certs/server.key; }
此外,ssl_protocols 和 ssl_ciphers 指令可用于限制连接并仅添加 SSL/TLS 的强版本和密码:
server { #... ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; }
使用 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/
为 HTTP 基本身份验证配置 Nginx Plus 和 Nginx
1.在我们要保护的位置内,定义 auth_basic 指令并为受密码保护的区域命名。请求凭据时,区域名称将显示在用户名和密码对话框中。
location /api { auth_basic "Administrator's Area"; #... }
2、使用包含用户/密码对的 .htpasswd 文件的路径定义 auth_basic_user_file 指令:
location /api { auth_basic "Administrator's Area"; auth_basic_user_file /etc/apache2/.htpasswd; }
下一章:Nginx 内容缓存
缓存是指在本地存储信息以加速客户端(例如 Web 服务器)之间的通信。缓存可以位于客户端、服务器端或两者。缓存对于处理静态或不经常更改的数据的重复请求很有用。内容缓存驻留在客户端和源服务器之间,并保存它看到的所有内容的 ...