欢迎访问宙启技术站
智能推送

nginx怎么配置支持https

发布时间:2023-05-18 04:37:34

Nginx是一个开源的高性能Web服务器软件,它可以用来作为反向代理、负载均衡器和网关等多种用途。在实际应用中,我们需要保证网站的安全性,这就需要使用HTTPS来进行加密传输,本篇文章将介绍如何在Nginx上配置支持HTTPS。

一、证书申请

在启用HTTPS之前,我们需要先申请SSL证书,并将证书安装到服务器上。SSL证书可以通过购买或免费颁发的方式获取。以下是使用Let's Encrypt免费申请SSL证书的步骤:

1.安装Certbot

Certbot是一个自动化证书颁发工具,可以帮助我们快速申请SSL证书,并自动配置Nginx服务器。

我们可以在官网选择对应的操作系统,下载并安装Certbot。

2.申请证书

运行以下命令,申请证书:

sudo certbot certonly --webroot -w /var/www/html/ -d example.com -d www.example.com

其中,example.com是您的域名,-d参数可以添加多个域名,中间用空格隔开。

此命令会将证书文件下载到/etc/letsencrypt/live/example.com/目录下。

二、Nginx配置HTTPS

1.配置文件备份

在我们修改Nginx配置文件之前,我们需要先备份Nginx的配置文件,以防止出现配置不当而导致无法访问的问题。

进行备份:

sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak

2.配置文件修改

找到Nginx默认的配置文件/etc/nginx/nginx.conf,修改以下内容:

a.添加SSL证书和私钥文件路径

在http模块下添加ssl_certificate和ssl_certificate_key参数:

http {

    ...

    # 添加ssl_certificate和ssl_certificate_key参数

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;

    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    ...

}

b.添加SSL协议和密钥交换算法

在server模块下添加ssl_protocols和ssl_ciphers参数:

server {

    ...

    # 添加ssl_protocols和ssl_ciphers参数

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA;

    ...

}

c.添加ssl_session_timeout和ssl_session_cache参数

在server模块下添加ssl_session_timeout和ssl_session_cache参数:

server {

    ...

    # 添加ssl_session_timeout和ssl_session_cache参数

    ssl_session_timeout 10m;

    ssl_session_cache shared:SSL:10m;

    ...

}

d.添加https监听

在server模块下添加以下内容:

server {

    listen 443 ssl;

    server_name example.com www.example.com;

    root /var/www/html;

    index index.html;

    # 添加SSL证书和私钥文件路径

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;

    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    # 添加SSL协议和密钥交换算法

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA;

    # 添加ssl_session_timeout和ssl_session_cache参数

    ssl_session_timeout 10m;

    ssl_session_cache shared:SSL:10m;

    # 开启HTTP/2协议

    http2_push_preload on;

    # 配置HTTPS 301重定向

    if ($scheme != "https") {

        return 301 https://$server_name$request_uri;

    }

    location / {

        try_files $uri $uri/ =404;

    }

}

其中,listen 443 ssl表示https监听端口,server_name表示Nginx要监听的域名,root表示网站根目录。

3.保存配置文件并重启Nginx

保存修改后的配置文件,重启Nginx服务:

sudo service nginx restart

重启完成后,在浏览器中输入https://example.com,如果可以正常访问网站,则证明已经成功配置了HTTPS。

总结

以上就是在Nginx上配置HTTPS的步骤。为了保证网站的安全性,使用HTTPS是非常必要的。HTTPS可以对网站传输的数据进行加密,防止被第三方窃取信息,同时也可以提高网站的可信度和搜索排名。