HTTPS是现代Web应用程序的安全标准。这篇文章将介绍如何使用Nginx配置HTTPS,从生成和签名SSL证书,到配置Nginx以使用该证书来提供安全通信。
一、生成自签名的SSL证书
在使用HTTPS之前,必须为您的网站生成一个SSL证书。本部分将介绍如何使用OpenSSL生成自签名的SSL证书。
sudo openssl req -x509 -nodes -days 365 \
-newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key \
-out /etc/nginx/ssl/nginx.crt
此命令将在/etc/nginx/ssl目录中生成名为nginx.key和nginx.crt的SSL证书。其中,nginx.key 是用于加密和解密HTTPS流量的私钥,nginx.crt 是用于验证安全通信的公钥。
然后,将SSL证书放在一个可访问的位置,以便Nginx能够找到它们。
sudo mkdir -p /etc/nginx/ssl
sudo cp /path/to/your/nginx.crt /etc/nginx/ssl/
sudo cp /path/to/your/nginx.key /etc/nginx/ssl/
二、安装和配置Nginx
本部分将介绍如何安装Nginx并配置SSL。
首先,安装Nginx。
sudo apt-get update
sudo apt-get install nginx
接下来,编辑Nginx的配置文件,启用SSL和处理HTTP请求的块,并指定SSL证书位置。
sudo nano /etc/nginx/sites-enabled/default
在server块中,添加以下内容:
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
该文件现在应该类似于:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
}
保存并关闭文件。
最后,重新启动Nginx以使更改生效:
sudo systemctl restart nginx
三、测试HTTPS配置
完成以下步骤以测试SSL配置是否正确:
- 在Web浏览器中,导航到您的Web服务器的域名或IP地址,以http:// 或 https:// 开头。
- 在地址栏中,输入https:// 和您的Web服务器的域名或IP地址。
- 如果浏览器显示网站并没有任何警告,则HTTPS已成功配置。
四、重定向HTTP到HTTPS
现在您已经配置了HTTPS,但可能仍然允许使用HTTP访问您的服务器,该配置旨在将HTTP请求重定向到HTTPS。
将以下内容添加到您的Nginx配置文件(在server块中):
if ($scheme != "https") {
return 301 https://$server_name$request_uri;
}
该文件现在应该类似于:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
if ($scheme != "https") {
return 301 https://$server_name$request_uri;
}
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
}
保存并关闭文件,然后重新启动Nginx以使更改生效。
sudo systemctl restart nginx
现在,对于任何HTTP请求,都将自动重定向到HTTPS。
五、启用HSTS
HTTP Strict Transport Security(HSTS)是一个安全标志,通过设置响应标头,将客户端浏览器钦定为只与您的网站使用SSL通信。启用HSTS可以提高安全性。
编辑Nginx配置文件,设置以下内容(在server块中):
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
该文件现在应该类似于:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
if ($scheme != "https") {
return 301 https://$server_name$request_uri;
}
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
}
保存并关闭文件,然后重新启动Nginx以使更改生效。
sudo systemctl restart nginx
现在,浏览器将始终使用HTTPS与您的服务器通信,即使用户手动使用HTTP也是如此。
六、结论
通过执行上述步骤,您可以对Nginx配置HTTPS进行全面安全性设置,从而更好地保护您的Web应用程序和用户数据。