Nginx配置ssl实现https的全过程记录

  

下面是“Nginx配置ssl实现https的全过程记录”的完整攻略。

Nginx配置ssl实现https的全过程记录

什么是ssl

SSL(Secure Sockets Layer),即安全套接字层,SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通信提供安全支持。为了使用SSL协议,必须向证书授权中心(CA)申请证书。

获取ssl证书

在申请SSL证书之前,我们需要购买域名,可以通过阿里云、腾讯云等专业服务商购买。

在购买了域名之后,可以通过以下步骤申请SSL证书:

  1. 安装certbot工具:该工具可以自动从LetsEncrypt申请免费的证书。
sudo apt install certbot
  1. 申请证书:使用certbot工具申请证书,输入以下命令即可。
sudo certbot certonly --webroot -w /var/www/html/mydomain.com/ -d mydomain.com

其中-w参数指定了网站文件的路径,-d参数指定了域名。

  1. 证书获取成功后,会存在/etc/letsencrypt/live/mydomain.com/目录下,包括cert.pemchain.pemfullchain.pem等文件,这些文件我们配置nginx会用到。

配置Nginx实现https

  1. 修改Nginx配置文件:进入nginx的配置目录,cd /etc/nginx/conf.d/ ,新建mydomain.com.conf文件,添加如下内容:
server {
    listen 80;
    server_name mydomain.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    server_name mydomain.com;

    ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
    ssl_session_cache shared:SSL:10m;

    root /home/wwwroot/mydomain.com;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ /index.html;
    }
}

  1. 验证Nginx配置:使用以下命令重载nginx配置文件:
nginx -t
nginx -s reload
  1. 打开浏览器,在地址栏输入mydomain.com,即可查看网站是否已成功实现https。

示例1:Nginx配置MVC项目实现https

在实现MVC项目的https之前,需要确保.NET Core SDK已安装。

  1. 安装Let’s Encrypt的Certbot:可以在Certbot官网找到对应的安装方法。

  2. 申请证书:执行以下命令即可。

sudo certbot certonly --webroot -w /var/www/html/myproject.com/ -d myproject.com
  1. 修改Nginx配置文件myproject.conf:添加以下内容。
server {
    listen 80;
    server_name myproject.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    server_name myproject.com;
    root /home/wwwroot/myproject.com;
        index index.html index.htm;

    # SSL parameters
    ssl_certificate /etc/letsencrypt/live/myproject.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/myproject.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/myproject.com/fullchain.pem;

    # security settings
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;

    # ASP.NET Core configuration
    location / {
        proxy_pass         http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}
  1. 验证Nginx配置:使用以下命令重载nginx配置文件并运行asp.net core项目。
dotnet publish -c Release
dotnet myproject.dll
nginx -t
nginx -s reload
  1. 打开浏览器,在地址栏输入myproject.com,即可查看MVC项目是否已成功实现https。

示例2:Nginx配置WordPress实现https

在实现WordPress的https之前,需要确保已正确安装Wordpress。

  1. 申请证书:使用以下命令申请证书。
sudo certbot certonly --webroot -w /var/www/html/mywp.com/ -d mywp.com
  1. 修改Nginx配置文件mywp.conf:添加以下内容。
server {
    listen 80;
    server_name mywp.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    server_name mywp.com;

    root /home/wwwroot/mywp.com;
    index index.php index.html index.htm;

    ssl_certificate /etc/letsencrypt/live/mywp.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/mywp.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/mywp.com/fullchain.pem;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
    ssl_session_cache shared:SSL:10m;

    location / {
        try_files $uri $uri/ /index.php?q=$uri&$args;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

}
  1. 验证Nginx配置:使用以下命令重载nginx配置文件。
nginx -t
nginx -s reload
  1. 打开浏览器,在地址栏输入mywp.com,即可查看WordPress是否已成功实现https。

完成了以上两个示例,我们就可以成功地在Nginx上实现https协议,有了https的加持,可以保障用户的信息安全,使网站更加安全可靠。

相关文章