本次涉及的工具:Tomcat;Nginx;openssl;WinSCP
1.Tomcat部署一个简单站点页面
使用Tomcat之前要配置好JDK环境变量,此处不演示
Tomcat有3种部署Web应用的方法,这里我采用最简单的一种直接放到webapps目录下
进入Tomcat文件夹
再进入webapps文件夹
在webapps文件夹中新建一个文件夹jiandanwangye
在jiandanwangye中新建一个index.html文件(index是默认的欢迎界面)
index.html中写了点简单的html
保存html文件
进入Tomcat文件夹下的bin目录
双击startup.bat启动Tomcat
系统会弹出一个黑框
打开浏览器,在地址栏中输入http://localhost:8080/jiandanwangye
部署成功
2.使用Nginx做该站点反向代理
Tomcat的默认端口是8080,但一般我们使用的URL是省略了端口号,浏览器对于http协议默认采用的是80端口。
可以使用Nginx做反向代理,从而不需要更改Tomcat的默认端口来实现省略端口号访问。
进入nginx文件夹中的conf文件夹
编辑nginx.conf文件
将此段代码用#注释掉
新添加一段代码,通过proxy_pass配置反向代理
保存文件
在进入nginx文件夹,双击nginx.exe
Nginx不像Tomcat会弹出个黑框,但实际上Nginx已经启动,打开任务管理器可以看到Nginx的进程
打开浏览器,在地址栏中输入http://localhost/jiandanwangye
反向代理成功,可以看到请求从80端口转发到了Tomcat的8080端口。
3.站点改为https
SSL基于公用密钥和私人密钥,用户使用公用密钥来加密数据,但解密数据必须使用相应的私人密钥。使用SSL安全机制的通信过程如下:用户与服务器建立连接后,服务器会把数字证书与公用密钥发送给用户,用户端生成会话密钥,并用公共密钥对会话密钥进行加密,然后传递给服务器,服务器端用私人密钥进行解密,这样,用户端和服务器端就建立了一条安全通道。
SSL安全机制是依靠数字证书来实现,所以需要先生成证书,这里通过Linux中自带openssl来生成自签名证书
生成自签名证书的基本步骤如下:
1.生成私钥(Private Key)文件
2.生成证书(签名)请求文件CSR,需要使用私钥
3.生成自签名证书文件,需要使用证书请求文件
1.生成私钥文件
openssl genrsa -aes128 -out cert.key 2048 生成一个名为cert.key,长度为2048位,并用aes128加密的私钥
之后会提示设置私钥密码,需要输入两次
openssl rsa -in cert.key -out cert.key 删除密钥中的密码。如果不删除密码,在应用加载的时候会出现输入密码进行验证的情况,不方便自动化部署。
2.生成证书(签名)请求文件CSR
openssl req -new -key cert.key -out cert.csr 生成证书请求文件
需要依次输入国家,地区,城市,组织,组织单位,Common Name和Email。其中Common Name为必填项,写域名
3.生成自签名证书(Certificate)文件,需要使用证书请求文件
openssl req -x509 -days 3650 -sha256 -key cert.key -in cert.csr -out cert.crt 生成一个有效期为10年,sha256签名的证书
3步操作共生成了3个文件
使用WinSCP工具将cert.crt和cert.key传到Windows系统中
将cert.crt和cert.key放到nginx文件夹中的conf文件夹里
编辑nginx.conf文件
将监听80端口和443端口的配置改为
server {
listen 80;
server_name localhost;
return 301 https://$server_name$request_uri; #将http访问转为https
}
server {
listen 443 ssl;
server_name localhost;
ssl_certificate cert.crt;
ssl_certificate_key cert.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://localhost:8080;
}
}
保存文件,开启Tomcat和Nginx。
在浏览器中输入http://localhost/jiandanwangye
可以看到站点已经从http改为https(不安全是由于证书是自签名证书)
总结:通过以上配置,浏览器发送的请求是发送到 Nginx ,Nginx 作为代理服务器再转发到 Tomcat,浏览器和 Nginx 之间以 HTTPS 协议传输数据,而 Nginx 和 Tomcat 之间通过 以 HTTP 协议传输数据。
Nginx 作为中间的代理服务器,Tomcat作为应用服务器。