最详细的Nginx+Tomcat+Https配置教程(阿里云)
因为之前学校的项目使用的云服务器是微软云的,导致为其配置https时
不太方便,需要自己到处找免费证书,很麻烦,曾写过一篇Ubuntu 16.04——配置Nginx及Https服务,里面用的是certbot
的免费证书。
本文使用的则是在阿里云申请的免费证书(Symantec),以下是证书的配置过程。
前提
购买一个域名并将其绑定至服务器上(做域名解析),在阿里云管理控制台的域名
页面中选择进入域名解析列表
,并在解析设置
中的新手引导
,按照提示输入服务器IP地址
即可。
虽然图中说“添加成功后可以www.xxx.xx或xxx.xx(设域名为xxx.xx)方式访问网站,但实际上是要先对网站进行备案的,否则就会出现这个页面:
当初我可是看了N多教程都没明白究竟怎样才能直接通过域名访问网站,因为各种教程不是缺这就是缺那,走了一些弯路,最后才搞明白实际上流程如下:
购买证书
进入云盾证书购买页面,在选择品牌处选择Symantec,证书类型选择增强型OV SSL后会出现免费型DV SSL(期限一年)
申请证书
购买完成,进入证书控制台,点击申请
,填写相关信息(注意填写的域名最好与新手引导中的域名相同),点击下一步
验证DNS信息后就可提交审核,等待5-10分钟。
下载证书
审核通过后,点击下载
就可以准备放到服务器上了,接下来主要是针对Nginx的配置过程。
将下载的证书上传至服务器的nginx目录中(可新建一个/etc/nginx/cert
目录以存放证书)
在Nginx上配置证书
最初参考的是阿里云官网上的Nginx/Tengine服务器安装SSL证书,但其中内容和实际情况有些出入,故补上详细内容。
很多教程里说在nginx/nginx.conf
中找到被注释的关于ssl的内容并稍加修改即可成功,然鹅事实并非如此
实际上应该在/etc/nginx/sites-available/default
中配置。
1.若只配置https,在default
文件中找到或加上如下内容即可:
server_name 自己的域名 www.自己的域名;
listen [::]:443 ssl ipv6only=on;
listen 443 ssl;
ssl on;
#root html;目前使用中看来这句没啥用
#index index.html index.htm;同上
ssl_certificate cert/自己的证书.pem;
ssl_certificate_key cert/自己的证书.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;
2.如果还要通过Nginx代理Tomcat,则加入以下内容即可:
listen 80 default_server;
listen [::]:80 default_server;
location / {
proxy_pass http://localhost:8080;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
#针对图片访问的据说不加会受影响(首先路径得对),虽然我还没遇到过
location /images/{
root /var/www/;
autoindex off;
}
location ~ .*.[jsp|do|action]$ { #所有jsp页面以及do/action请求均交由tomcat处理
index index.jsp;
proxy_pass http://localhost:8080; #转向tomcat处理
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { #设定访问静态文件直接读取不经过tomcat
expires 30d;
proxy_pass http://localhost:8080; #转向tomcat处理
}
location ~ .*\.(js|css)?$ {
expires 1h;
}
3.Tomcat中需要修改一下/tomcat/conf/server.xml中的内容
4.最后不要忘记测试一下Nginx的配置是否正确,无误后重启即可。
sudo nginx -t
sudo systemctl restart nginx
测试结果
经过反复尝试,最后得出这种办法,希望内容足够详细并能帮助到一些迷路儿童!!!