nginx怎么配置支持https
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可以对网站传输的数据进行加密,防止被第三方窃取信息,同时也可以提高网站的可信度和搜索排名。
