SSL证书部署方式有多种,①可以使用springboot自带的配置进行部署,②可以使用tomcate单独部署,③使用nginx反向代理进行部署。在此只介绍nginx相关的。

目录:

一、安装nginx

1.官网下载安装包

2.安装依赖环境

3.编译安装

4.启动nginx

二、准备ssl证书

三、配置nginx

1.配置nginx的https代理

2.配置文件服务

3.配置http自动跳转https

四、启动应用与nginx,验证

一、安装nginx

1.nginx官网下载地址:https://nginx.org/en/download.html。

这里我们下载nginx-1.20.2版本。下载后通过工具(例:xftp)传输到linux服务器上。

或者直接在服务器上下载:(最好在root用户下执行,后续安装需要一些权限)

cd /opt/software

wget https://nginx.org/download/nginx-1.20.2.tar.gz

//下载后文件名为:nginx-1.20.2.tar.gz

//下载后解压

tar -zxvf nginx-1.20.2.tar.gz -C /opt/software/

2.安装依赖环境。

yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel

3.编译安装

在nginx安装目录下操作

cd /opt/software/nginx-1.20.2

//这里注意,需要安装ssl模块

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

make&&make install

4.启动nginx

进入nginx安装后的sbin目录启动nginx

cd /usr/local/nginx/sbin

./nginx

最后输入服务器ip地址,显示如下界面说明安装成功。例如:http://*.*.*.*/

二、准备ssl证书。

这里请自行准备ssl证书,一般云服务商都会提供免费证书,也可以通过Let's Encrypt等网站自行申请。

这里我以腾讯云举例:

打开ssl证书控制台后,按照步骤即可领取免费ssl证书。获取证书后,下载nginx服务器所需要的证书文件。

下载证书后解压文件,并将解压后的证书上传至服务器待用。

上传目录:/urs/local/nginx/cert

三、配置nginx

1.配置nginx的https代理

因博客前后端分离,前端地址为:http://localhost:8443,后端地址为:http://localhost:8085

所以两个地址都需要配置,配置文件地址为:/urs/local/nginx/conf/nginx.conf

详细配置文件如下(部分):

# HTTPS server

server {

    listen       443 ssl;

    server_name  www.kuailedelxl.top;   #替换成自己的域名

#证书和密钥

    ssl_certificate      /usr/local/nginx/cert/***.crt;   #ssl证书的crt文件路径

    ssl_certificate_key   /usr/local/nginx/cert/***.key;   #ssl证书的key文件位置

    ssl_session_timeout 5m;                #设置ssl会话超时为5分钟 

    ssl_protocols TLSv1.2 TLSv1.3;           #指定支持的版本

    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; #指定支持的加密算法和优先级

    ssl_prefer_server_ciphers on;  #开启服务器优先选择加密套件功能

    limit_conn_zone $binary_remote_addr zone=concurrent:10m;      

    limit_conn concurrent 10;   #限制每个ip的并发连接为10个

    limit_req_zone $binary_remote_addr zone=ratelimit:10m rate=10r/s; #限制每个IP每秒请求速率不超过十个 

    limit_req zone=ratelimit burst=20 nodelay; #限制突发请求下,突发请求达到20个

    #location定义了请求处理的位置

    location / {

        proxy_pass http://127.0.0.1:8443;         #指定要转发的地址,也就是将访问nginx的请求转发到本地的127.0.0.1:8443

        proxy_set_header Host $host:$server_port;   

        proxy_set_header X-Real-Ip $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    #proxy_set_header是为了设置了一些请求头信息,可以将这些信息同步传输到转发地址

        client_max_body_size    10m;         #设置请求体最大大小为10M

    }

}

修改红色字体部分,将信息改为自己的信息,将这个server块添加到nginx.conf文件的末尾,最后一个大括号之内。

如何解决前后端分离,同服务器,不同端口不同应用问题。可以配置多个server解决,或者配置多个location解决,这里建议配置多个server,并且配置不同的二级域名,实现前后端分离互不影响。

因此,在上面的配置下继续添加:

server {

    listen       443 ssl;

    server_name  manager.kuailedelxl.top;   #替换成自己的管理节点域名

#证书和密钥 

    ssl_certificate      /usr/local/nginx/cert/***.crt;   #manager的ssl证书的crt文件路径

    ssl_certificate_key   /usr/local/nginx/cert/***.key;   #manager的ssl证书的key文件位置

    ssl_session_timeout 5m;                #设置ssl会话超时为5分钟 

    ssl_protocols TLSv1.2 TLSv1.3;           #指定支持的版本

    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; #指定支持的加密算法和优先级

    ssl_prefer_server_ciphers on;  #开启服务器优先选择加密套件功能

    limit_conn_zone $binary_remote_addr zone=concurrent:10m;      

    limit_conn concurrent 10;   #限制每个ip的并发连接为10个

    limit_req_zone $binary_remote_addr zone=ratelimit:10m rate=10r/s; #限制每个IP每秒请求速率不超过十个 

    limit_req zone=ratelimit burst=20 nodelay; #限制突发请求下,突发请求达到20个

    #location定义了请求处理的位置

    location / {

        proxy_pass http://127.0.0.1:8085;         #指定要转发的地址,也就是将访问nginx的请求转发到本地的127.0.0.1:8085

        proxy_set_header Host $host:$server_port;   

        proxy_set_header X-Real-Ip $remote_addr;

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    #proxy_set_header是为了设置了一些请求头信息,可以将这些信息同步传输到转发地址

        client_max_body_size    10m;         #设置请求体最大大小为10M

    }

}

此时,就可以完成ssl证书配置,并且通过访问不同二级域名分别代理不同端口,进行前后端分离。

注意,我们只是给nginx服务器配置了ssl证书,实际上应用程序是没有ssl加密的(http://127.0.0.1:8443)如果未设置防火墙的话,我们是可以继续从其他网络访问这个http链接的。这样是不安全的。

我们只是通过nginx代理了应用程序的请求与流量,因此需要关闭8443与8085对外端口。

2.配置文件服务

文件服务器与ssl代理类似,一个是代理转发流量,文件服务器本质是代理指定的文件目录,使服务可以直接读取到。

server {

    listen 443 ssl;

    server_name oneblog.kuailedelxl.top;    #建议配置不同的二级域名,更易分辨

    root /usr/local/nginx/data/;  #指定了服务器的根目录,即该域名下的文件将从此目录中提供。是文件服务的关键

    charset utf-8;

#证书和密钥,文件服务器也是可以走ssl证书加密的,强烈推荐

    ssl_certificate      /usr/local/nginx/cert/oneblog.kuailedelxl.top.crt;

    ssl_certificate_key  /usr/local/nginx/cert/oneblog.kuailedelxl.top.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;

   #auth_basic "Please enter the user name and password";

   #auth_basic_user_file /usr/local/nginx/htpasswd; #用户密码验证,这里不需要配置

    error_page 403 /error.html;   #指定了当发生 403 错误时,将返回error.html。

    location = /error.html {      #指定了对 /error.html 页面的处理,也就是403返回404

        return 404;

    }

#禁用了自动目录索引,意味着当用户访问一个目录时,不会显示该目录下的文件列表。单独的文件服务器需要打开这个

    autoindex off;   

    autoindex_exact_size off; #禁用了精确的文件大小显示

    autoindex_localtime off;   #使用服务器的时间显示文件修改时间

    location ^~ / {   

        proxy_set_header Host $host:$server_port;  #用于处理所有请求,并设置了代理请求头

    }

    location ~*\.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar|js|css)$ { #处理特定的静态文件,jpg、gif等

        expires 30d;    #静态文件的缓存过期时间为 30 天

        valid_referers oneblog.kuailedelxl.top; #只有来自 oneblog.kuailedelxl.top 的请求才能访问这些静态文件

        if ($invalid_referer) {   #防盗链,请求无效返回特定图片,需要修改图片地址

            rewrite ^/ /usr/local/nginx/data/404/C5942ZUE2QB2P.png;

        }

    }

}

3.配置http自动跳转https

简单的配置下重定向到443就可以。

配置80端口的server:

server {

    listen       80;

    server_name  *.kuailedelxl.top;

    return 301 https://$server_name$request_uri;

}

四、启动应用与nginx,验证

nginx重启命令(在nginx的sbin目录下):./nginx -s reload

访问网站已经可以看到小锁的标记了

可以看到文件服务器是没办法直接打开欢迎目录的:

但是我们可以直接访问资源中的文件:

到此整个配置就全部完成了。

推荐链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。