环境:使用的阿里云平台购买的CA证书,其他可能会有一些差异
Ubuntu 20.04
重点:养成习惯,修改之前先备份
需先要购买和认证CA证书
在证书控制台下载Nginx版本证书。下载到本地的压缩文件包解压后包含:
.crt文件:是证书文件,crt是pem文件的扩展名。 .key文件:证书的私钥文件(申请证书时如果没有选择自动创建CSR,则没有该文件)。
1.在Nginx的安装目录下创建cert目录,并且将下载的全部文件拷贝到cert目录中。如果申请证书时是自己创建的CSR文件,请将对应的私钥文件放到cert目录下并且命名为a.key;
之前nginx的安装目录在/etc/nginx 下
2.在nginx安装目录下conf目录中的nginx.conf文件,修改为:
server {
listen 443;
server_name localhost; //主机名称
ssl on;
root html;
index index.html index.htm;
ssl_certificate cert/a.pem;
ssl_certificate_key cert/a.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://abc.com:8080; //选择需要反向代理的地址
#root html;
#index index.html index.htm;
}
}
保存退出 4.重启nginx
延伸:如果80端口被占用,如何修改默认端口:
我之前配置的默认端口在 /etc/nginx/conf.d/default.conf
当然不同linux系统下,肯定有其他配置文件命名的差异:
ubuntu系统下,有些nginx默认文件在/etc/nginx/sites-available/default上
不过别着急,listen 80 肯定是有的,只不过没在这里面放了。你看,不是有 include 文件吗?在那里面也说不定。
好,然后去看看 sites-enabled 文件夹下有什么
好吧,这个文件又指向了 site-available/default default 文件一打开,嗯…没错是它了
注意:如果需要反向代理80端口和443端口,必须修改default_server默认端口和注释掉ssl使用的443端口。 默认是注释第二行,否则有些情况会造成nginx无法启动的情况。 一般是把 80 改成 81,其实改别的也行。
将反向代理的http跳转到https
项目前期使用http,后期为了安全方面的考虑,启用了https。 项目架构:前端使用nginx作为多个tomcat实例的反向代理和负载均衡。 实际上只需要在nginx上启用https即可,使客户端与nginx之后使用https方式通信,而nginx与tomcat之间依然以http方式通信。
现在需要将之前客户端所有的http请求全部都自动重定向为https,只需要在nginx上添加相应配置即可。 如下配置实现来源于Nginx HTTP 跳转至 HTTPS,但是我都实践验证过。 另外,也加入了一些自己的理解整理而成。
方式1:使用rewrite指令
server {
listen 80;
server_name domain.com;
rewrite ^(.*) https://$server_name$1 permanent;
}
server {
listen 443 ssl;
server_name domain.com;
ssl on;
ssl_certificate /etc/nginx/ssl/domain.com.crt;
ssl_certificate_key /etc/nginx/ssl/domain.com.crt;
# other
}
如果此时nginx作为Tomcat的前端反向代理的话,需要将相应配置放在配置ssl的server块中。
方式2:使用return指令
server {
listen 80;
server_name domain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name domain.com;
ssl on;
ssl_certificate /etc/nginx/ssl/domain.com.crt;
ssl_certificate_key /etc/nginx/ssl/domain.com.crt;
# other
}
如果此时nginx作为Tomcat的前端反向代理的话,需要将相应配置放在配置ssl的server块中。
方式三:使用error_page指令
只允许HTTP来访问时,用HTTP访问会让Nginx报497错误,然后利用error_page将链接重定向至HTTPS上。
server {
listen 80;
listen 443 ssl;
server_name domain.com;
ssl on;
ssl_certificate /etc/nginx/ssl/domain.com.crt;
ssl_certificate_key /etc/nginx/ssl/domain.com.crt;
# other
error_page 497 https://$server_name$request_uri;
}
使用error_page指令时,将http和https的监听配置写在同一个server块中,对应的其他配置也需要在该server配置块中完成。 需要注意的是,此时需要将error_page指令语句写在最后,否则不能生效。
评论区