nginx配置ssl证书实现https访问(宝塔面板为例)

一,环境说明

操作系统:Linux/centos

服务器系统:nginx

域名:www.test.com

二,域名解析

在阿里云控制台-产品与服务-云解析DNS-找到需要解析的域名点“解析”,进入解析页面后选择【添加解析】按钮会弹出如下页面:

主机记录这里选择@,记录值就是服务器ip地址,确认。

三,申请ca证书(免费)

https://yundun.console.aliyun.com/?spm=a2c1d.8251892.aliyun_sidebar.aliyun_sidebar_yundun_overview.27975b76oZfxQl#/all

在阿里云控制台-产品与服务-云盾控制台-证书服务(应用安全),点击证书服务进入

点击购买证书进入,选择“免费版DV SSL”,点击立即购买:

然后点去支付:

最后确认支付:

就会回到管理界面:

点击“补全”,输入要解析的域名,点下一步:

说明:因为我们这里申请的是开发版免费证书,所以一个证书仅支持一个域名认证,不支持通配符。

等待几分钟,证书状态变为“已签发”后,证书就申请成功了。

四,下载证书

列表中找到已签发的证书,下载:

得到两个文件:

1,cert-1542189617759_regiment.xiongsongedu.cn.crt

2,cert-1542189617759_regiment.xiongsongedu.cn.key

将两个文件转换名称和后缀:

cert-1542189617759_regiment.xiongsongedu.cn.crt  ====>  fullchain.pem

cert-1542189617759_regiment.xiongsongedu.cn.key  ====>  privkey.pem

五,配置ca证书(配置https)

1,把fullchain.pem和privkey.pem上传到www.test.com文件夹下

在etc新建目录为:/etc/letsencrypt/live/www.test.com。进入目录,把fullchain.pem和privkey.pem上传到www.test.com文件夹下

2,在宝塔面板中修改网站对应的NGINX配置文件

说明:下面的配置是对443端口和80端口进行监听,443端口要启用ssl。监听443端口的server配置可以仿照上面ca认证页面的nginx配置示例进行一下两种配置。

第一种:

server
{
    listen 443;
    server_name www.test.com;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/www.test.com;
    
    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
    ssl on;
    ssl_certificate    /etc/letsencrypt/live/www.test.com/fullchain.pem;
    ssl_certificate_key    /etc/letsencrypt/live/www.test.com/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    error_page 497  https://$host$request_uri;
    #SSL-END
    
    location / {
        index index.php index.html index.htm default.php default.htm default.html;
    }
    
    #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
    error_page 404 /404.html;
    error_page 502 /502.html;
    #ERROR-PAGE-END
    
    #PHP-INFO-START  PHP引用配置,可以注释或修改
    include enable-php-56.conf;
    #PHP-INFO-END
    
    #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
    include /www/server/panel/vhost/rewrite/www.test.com.conf;
    #REWRITE-END
    
    
    #禁止访问的文件或目录
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
    {
        return 404;
    }
    
    #一键申请SSL证书验证目录相关设置
    location ~ \.well-known{
        allow all;
    }
    
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires      30d;
        error_log off;
        access_log off;
    }
    
    location ~ .*\.(js|css)?$
    {
        expires      12h;
        error_log off;
        access_log off; 
    }
    access_log  /www/wwwlogs/www.test.com.log;
    error_log  /www/wwwlogs/www.test.com.error.log;
}

server {
    listen 80;
    server_name www.test.com; # 你的域名
    rewrite ^(.*)$ https://$host$1 permanent; # 把http的域名请求转成https
}

第二种:

server
{
    listen 80;
	listen 443 ssl http2;
    server_name www.gdzzedu.com gdzzedu.com;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/gdzzedu.com/www;
    
    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
    #error_page 404/404.html;
    #HTTP_TO_HTTPS_START
    if ($server_port !~ 443){
        rewrite ^(/.*)$ https://$host$1 permanent;
    }
    #HTTP_TO_HTTPS_END
    ssl_certificate    /etc/letsencrypt/live/www.gdzzedu.com/fullchain.pem;
    ssl_certificate_key    /etc/letsencrypt/live/www.gdzzedu.com/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    error_page 497  https://$host$request_uri;

	#301-START
		if ($host ~ '^www.xiongsongedu.cn'){
			return 301 http://www.gdzzedu.com$request_uri;
		}
		if ($host ~ '^gdzzedu.com'){
			return 301 http://www.gdzzedu.com$request_uri;
		}        
	#301-END
    #SSL-END
    
    #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
    error_page 404 /404.html;
    error_page 502 /502.html;
    #ERROR-PAGE-END
    
    #PHP-INFO-START  PHP引用配置,可以注释或修改
    include enable-php-54.conf;
    #PHP-INFO-END
    
    #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
    include /www/server/panel/vhost/rewrite/www.gdzzedu.com.conf;
    #REWRITE-END
    
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires      30d;
        access_log off; 
    }
    
    location ~ .*\.(js|css)?$
    {
        expires      12h;
        access_log off; 
    }
    access_log  /www/wwwlogs/www.gdzzedu.com.log;
}

配置完成后,检查一下nginx配置文件是否可用,有successful表示可用。

$ nginx -t // 检查nginx配置文件

配置正确后,重新加载配置文件使配置生效:

$ nginx -s reload // 使配置生效

至此,nginx的https访问就完成了,并且通过rewrite方式把所有http请求也转成了https请求,更加安全。

如需重启nginx,用以下命令:

$ service nginx stop // 停止
$ service nginx start // 启动
$ service nginx restart // 重启

六,访问效果

输入http://www.test.com也会自动跳转至https页面。若无法访问检测是否放行443端口。

说明:如果是云服务器比如阿里云ECS,需要到阿里云ECS的管理后台的安全组,修改端口过滤规则把80端口和443端口开放才能访问到。

七:参考资料

地址:https://www.cnblogs.com/tianhei/p/7726505.html

地址:https://help.aliyun.com/knowledge_detail/42512.html?spm=5176.11065259.1996646101.searchclickresult.29183e78EEKIEw

猜你喜欢

转载自blog.csdn.net/a898712940/article/details/84257071