关于nginx-tomcat负载均衡的配置前面已经写过一篇文章,感兴趣的同学可以去看看《【Nginx+Tomcat】集群配置+Nginx配置》,本文主要教大家怎么配置nginx下网站实现https请求和http强制跳转https请求。
1、申请ssl证书(本文说明使用的是阿里云的免费ssl证书,免费证书只能绑定一个具体的二级域名,如果需要解析很多二级域名到你的网站,那就买收费的ssl证书吧)
登录阿里云,申请自己的ssl证书
支付0元,下单成功后继续进入证书管理界面,申请证书。
按要求填写即可,完成申请。
2、申请成功后,下载证书。
下载的Nginx证书压缩文件解压后包含:
.pem:证书文件。PEM文件的扩展名为CRT格式。
.key:证书密钥文件。申请证书时如果未选择自动创建CRS,则下载的证书文件压缩包中不会包含.key文件,需要您自己手动创建证书密钥文件。
3、让自己的nginx支持ssl请求,ssl模块不是nginx的基础模块所以需要在编译的时候配置上相关的配置。
#如果你没安装过nginx
cd /usr/local/nginx.1.18.0/
./configure --prefix=/usr/local/nginx --with-http_ssl_module
make
make install
=======================================================================
#如果你已经安装过了,重新编译下但是不用执行 make install
#只用覆盖掉最后的nginx执行文件即可,要不很多设置的参数还需要重新配置
cd /usr/local/nginx.1.18.0/
./configure --prefix=/usr/local/nginx --with-http_ssl_module
make
cp ./objs/nginx /usr/local/nginx/sbin/
4、创建cert文件夹,配置nginx,支持https访问
#在/usr/local/nginx/conf/创建cert文件夹用于存放证书
cd /usr/local/nginx/conf/
mkidr cert
#把证书解压缩放到cert下面,接着修改nginx的配置文件
cd /usr/local/nginx/conf/
vim nginx.conf
#这里是你的项目对应的域名,对应的tomcat转发设置
upstream your.domain{
server 127.0.0.1:8080 weight=1;
}
server {
#Nginx 1.15.0以上版本请使用listen 443 ssl代替listen 443和ssl on。
listen 443 ssl;
#将www.xacom.cn修改为您证书绑定的域名
#如果您购买的是通配符域名证书,要修改为通配符域名,例如:*.example.com。
server_name www.xacom.cn;
##将domain name.pem替换成您证书的文件名称。
ssl_certificate cert/domain name.pem;
#将domain name.key替换成您证书的密钥文件名称。
ssl_certificate_key cert/domain name.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;
location / {
proxy_pass http://your.domain;
proxy_redirect default;
}
}
#设置完记得重启你的nginx
#Tip:设置完参数你可以检测下设置的是否正确
cd /usr/local/nginx/sbin/
./nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
5、请求http转发https,所有http的请求都会自动转发到对应的https请求上。
#再加入一个http请求-80端口的监听,让他把所有的请求都跳转到https请求上即可
server {
listen 80;
server_name www.xacom.cn;
rewrite ^(.*)$ https://$host$1 permanent;
}