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
访问网站已经可以看到小锁的标记了
可以看到文件服务器是没办法直接打开欢迎目录的:
但是我们可以直接访问资源中的文件:
到此整个配置就全部完成了。
推荐链接
发表评论