Nginx配置ssl证书
in 服务器 with 0 comment

Nginx配置ssl证书

in 服务器 with 0 comment

获取证书

以腾讯云为例,解析好域名后,前往证书申请页ssl证书申请,因为我的域名也是在腾讯云,所以点击申请后,可以配置自动DNS验证,如果域名不在腾讯云则需要去域名商添加解析,具体看文档指引。

微信截图_20200107085719.png
微信截图_20200107085643.png

申请完后等待审核即可,免费证书有效期为一年,一年后重新申请再替换文件就行,所以也是OK的。

配置动态端口转发

下载证书并上传到服务器

审核通过后会有邮件提示,前往证书列表页,下载对应的证书。
微信截图_20200107085915.png

是一个压缩包。里面有好几种服务器类型,我们选Nginx的,将里面两个文件上传到服务器上任意位置即可,我这里上传的是Nginx的conf文件夹下/usr/local/nginx/conf/cert,这样在配置的时候可以使用相对路径。

配置Nginx

我这里配置是用于小程序的后端API,服务器是使用Nginx + Springboot内置tomcat,假如springboot端口为8080,则在nginx的配置文件/usr/local/nginx/conf/nginx.conf中添加如下配置

server {
    listen 443;
    #填写绑定证书的域名
    server_name 域名;
    ssl on;
        location / {
            #填写域名转发的端口
            proxy_pass http://localhost:8080;
            proxy_set_header   Host    $host;
            proxy_set_header   X-Real-IP   $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    #填写两个证书的位置
    ssl_certificate  cert/xxx.com_bundle.crt;
    ssl_certificate_key cert/xxx.com.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
}

你在配置的时候只需要修改上面配置中的域名端口ssl两个证书的位置这三处就行。修改完成后,执行/usr/local/nginx/sbin/nginx -t检查配置是否有问题,没问题则执行/usr/local/nginx/sbin/nginx -s reload重启Nginx即可。

开启HTTP请求转发到HTTPS请求

例如访问http://www.baidu.com会自动跳转到https://ww.baidu.com的功能。
只需要添加如下配置:

server {
    listen 80;
    #填写绑定证书的域名
    server_name 域名;
    rewrite ^(.*)$ https://$host$1 permanent;
}

添加完后重启Nginx,尝试访问http请求,看看地址栏能否正确转发到https,一般都OJBK

配置静态转发

当不转发端口,想用域名访问纯静态的网站,可以进行如下配置。

server {
     #SSL 访问端口号为 443
     listen 443; 
     #填写绑定证书的域名
     server_name www.domain.com; 
     #启用 SSL 功能
     ssl on;
     #证书文件名称
     ssl_certificate 1_www.domain.com_bundle.crt; 
     #私钥文件名称
     ssl_certificate_key 2_www.domain.com.key; 
     ssl_session_timeout 5m;
     #请按照以下协议配置
     ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
     #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
     ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; 
     ssl_prefer_server_ciphers on;
     location / {
        #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
         root /var/www/www.domain.com; 
         index  index.html index.htm;
     }
 }

这样访问域名可以直接访问文件夹下的文件。

Responses