目录
一、准备工作
1、首先你要有一台服务器,本篇文章是创建在腾讯云服务器的基础上的,仅供参考
2、在服务器上注册域名,这个域名注册等待审核时间较长,建议提早注册,在服务器的控制台搜索域名注册即可
3、在服务器上申请SSL证书,这个证书可以免费申请
4、证书申请成功之后,选择证书后边的下载,下载nginx版本的证书,先保存到本地,之后会上传到服务器上
5、解析域名
使用云解析即可
点击添加记录,他会有提示,一般选择解析主域名,选择@即可,如果你想使用其他的域名,那么就选择其他的解析方式
5、在你的服务器上安装tomcat,设置端口号为8080
6、安装nginx,端口号为80,运用yum指令安装即可
二、部署项目
找到你tomcat安装的位置,选择里面的webapp目录,然后rz上传即可,再重启tomcat,他会自己解压war包
三、修改nginx的配置文件
1、首先去到nginx的配置文件目录,然后编辑nginx的配置文件nginx.conf
cd /usr/local/nginx/conf
vim nginx.conf
2、进入后,开始配置https所需的内容,这里配置文件要求十分严格,少了什么都不行,其他版本可能不会有这个问题,如果遇到这个问题,那么你可以严格的按着本文的来写
这里只展示443的配置代码:
server {
#SSL 访问端口号为 443
listen 443 ssl;
#填写绑定证书的域名
server_name "证书上你的域名"; #实际填写的时候不要加引号!!!
#证书文件名称
ssl_certificate "sslfile/你的域名_bundle.crt";
#私钥文件名称
ssl_certificate_key "sslfile/你的域名.key";
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1.2 TLSv1.3;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
#网站主页路径:此路径仅供参考,具体请您按照实际目录操作。
#例如,您的网站运行目录在/etc/www下,则填写/etc/www。
#root /etc/www;
proxy_pass "http://服务器ip地址(有域名就写域名)";
}
}
我的配置:
第一套方案:nginx自己的项目配置https(443中用proxy_pass) ——> 只是为了测试而已,这样不好
注1:这里的方案是无法实现http强制跳转为htpps的,因为这两个都是要访问的nginx上面的项目,那么跳来跳去只是http和https在互相跳转,形成了重定向的死循环,会把浏览器搞崩溃!!!
注2:如果重定向过多导致浏览器始终拒绝访问某个网站,那么可以清除缓存,清除cookie即可重新访问!
# HTTP 配置
server {
listen 80;
server_name fishbones.com.cn; #或者localhost
# rewrite ^(.*)$ https://${server_name}$1 permanent; #不能写这个!!
location / {
root html;
index index.html index.htm;
}
}
# HTTPS 配置
server {
listen 443 ssl;
server_name fishbones.com.cn;
ssl_certificate sslfile/fishbones.com.cn_bundle.crt;
ssl_certificate_key sslfile/fishbones.com.cn.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://fishbones.com.cn;
}
}
第二套方案:nginx自己的项目配置https(443中用root/alias)——> 一般是部署前端vue项目时这样配置,非常完美的方式!
# HTTP 配置
server {
listen 80;
server_name fishbones.com.cn;
rewrite ^(.*)$ https://${server_name}$1 permanent; #强制跳转为https
#或者:return 301 https://$server_name$request_uri;
#下面其实应该有没有都行,因为不会走到这里,上面直接重定向了!
location / {
root html;
index index.html index.htm;
}
}
# HTTPS 配置
server {
listen 443 ssl;
server_name fishbones.com.cn;
ssl_certificate sslfile/fishbones.com.cn_bundle.crt;
ssl_certificate_key sslfile/fishbones.com.cn.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
# root html/dist; #访问https://fishbones.com.cn/test,实际上是访问目录的html/dist/test/index.html文件!
root html;
}
}
第三套方案:nginx代理其他端口的项目配置https(以tomcat为例)——> 一般是要把后台当做服务器,才会这么配置!
# HTTP 配置
server {
listen 80;
server_name fishbones.com.cn;
rewrite ^(.*)$ https://${server_name}$1 permanent; #强制跳转为https
#或者:return 301 https://$server_name$request_uri;
#下面其实应该有没有都行,因为不会走到这里,上面直接重定向了!
location / {
proxy_pass http://fishbones.com.cn:8080/;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
}
}
# HTTPS 配置
server {
listen 443 ssl;
server_name fishbones.com.cn;
ssl_certificate sslfile/fishbones.com.cn_bundle.crt;
ssl_certificate_key sslfile/fishbones.com.cn.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
# 注意:这样可以跳转到tomcat,但是就看不到nginx下的网页了!
proxy_pass http://fishbones.com.cn:8080/; #
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
}
}
检查配置文件书写是否正确:
nginx -t
3、可以看到上边的代码中,有.crt文件和.key文件,这就是你在第一中的4步中下载的证书中的内容,需
要你在nginx的目录内,创建一个sslfile文件夹,当然这个文件夹的名字可以随便取,只要对应就可以,
在这个文件夹内rz上传对应的.crt文件和.key文件。
cd /usr/local/nginx/conf //进入到nginx配置文件目录下
mkdir sslfile //创建名为sslfile的文件夹
cd sslfile //进入文件夹
rz //上传文件:.crt文件和.key文件
4、配置完成后重启nginx,下面是关于nginx的相关指令
systemctl status nginx //查看nginx的运行状态
systemctl start nginx // 启动nginx
systemctl stop nginx // 关闭nginx
systemctl restart nginx //重启nginx
5、在浏览器输入https://你的域名 如果出现你的网站未备案,或者出现welcome to nginx,那么就说明你的域名的https已经搭建完成,未备案的进行备案,其他的问题请查看nginx的运行日志。
访问成功:
注1:配置http强制转换https访问
在nginx.conf文件中配置,在http配置中添加return 301 https://$server_name$request_uri;
(重定向)
然后保存
注2:可能出现的问题:没有开启ssl模块
可能出现的报错情况:
nginx: [emerg] unknown directive "ssl_certificate1" in /usr/local/nginx/conf/ngi...
nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in ......
解决方案:
首先,我们查看自己的Nginx是否开启了ssl模块,命令如下(注意这里是大写的V,如果是小写的v只会显示nginx的version):
nginx -V
如果显示如下信息表示SSL功能已经开启,否则就是没安装:
安装ssl模块:
编译Nginx的时候添加ssl参数安装,上一期我们在编译的时候只执行了:
./configure
这个不带任何参数的安装时最小安装,这里是不带SSL的,如果需要开启ssl功能则还需要添加参数:
./configure --with-http_ssl_module
然后再执行一下命令即可:
# make && make install
# 注:我们应当关闭nginx,然后执行make install,否则可能会失败!
make install
再检查一下安装是否成功:
nginx -V