您的位置:

使用Nginx配置HTTPS

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配置是否正确:

  1. 在Web浏览器中,导航到您的Web服务器的域名或IP地址,以http:// 或 https:// 开头。
  2. 在地址栏中,输入https:// 和您的Web服务器的域名或IP地址。
  3. 如果浏览器显示网站并没有任何警告,则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应用程序和用户数据。