下面是“Nginx配置ssl实现https的全过程记录”的完整攻略。
Nginx配置ssl实现https的全过程记录
什么是ssl
SSL(Secure Sockets Layer),即安全套接字层,SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通信提供安全支持。为了使用SSL协议,必须向证书授权中心(CA)申请证书。
获取ssl证书
在申请SSL证书之前,我们需要购买域名,可以通过阿里云、腾讯云等专业服务商购买。
在购买了域名之后,可以通过以下步骤申请SSL证书:
- 安装
certbot
工具:该工具可以自动从LetsEncrypt申请免费的证书。
sudo apt install certbot
- 申请证书:使用
certbot
工具申请证书,输入以下命令即可。
sudo certbot certonly --webroot -w /var/www/html/mydomain.com/ -d mydomain.com
其中-w
参数指定了网站文件的路径,-d
参数指定了域名。
- 证书获取成功后,会存在
/etc/letsencrypt/live/mydomain.com/
目录下,包括cert.pem
、chain.pem
、fullchain.pem
等文件,这些文件我们配置nginx会用到。
配置Nginx实现https
- 修改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;
}
}
- 验证Nginx配置:使用以下命令重载nginx配置文件:
nginx -t
nginx -s reload
- 打开浏览器,在地址栏输入
mydomain.com
,即可查看网站是否已成功实现https。
示例1:Nginx配置MVC项目实现https
在实现MVC项目的https之前,需要确保.NET Core SDK已安装。
-
安装Let’s Encrypt的Certbot:可以在Certbot官网找到对应的安装方法。
-
申请证书:执行以下命令即可。
sudo certbot certonly --webroot -w /var/www/html/myproject.com/ -d myproject.com
- 修改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;
}
}
- 验证Nginx配置:使用以下命令重载nginx配置文件并运行asp.net core项目。
dotnet publish -c Release
dotnet myproject.dll
nginx -t
nginx -s reload
- 打开浏览器,在地址栏输入
myproject.com
,即可查看MVC项目是否已成功实现https。
示例2:Nginx配置WordPress实现https
在实现WordPress的https之前,需要确保已正确安装Wordpress。
- 申请证书:使用以下命令申请证书。
sudo certbot certonly --webroot -w /var/www/html/mywp.com/ -d mywp.com
- 修改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;
}
}
- 验证Nginx配置:使用以下命令重载nginx配置文件。
nginx -t
nginx -s reload
- 打开浏览器,在地址栏输入
mywp.com
,即可查看WordPress是否已成功实现https。
完成了以上两个示例,我们就可以成功地在Nginx上实现https协议,有了https的加持,可以保障用户的信息安全,使网站更加安全可靠。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Nginx配置ssl实现https的全过程记录 - Python技术站