侧边栏壁纸
  • 累计撰写 208 篇文章
  • 累计创建 16 个标签
  • 累计收到 5 条评论

目 录CONTENT

文章目录

使用SSL证书,然后用nginx反向代理https

Wake
2022-08-16 / 0 评论 / 0 点赞 / 1,688 阅读 / 1,131 字

环境:使用的阿里云平台购买的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 文件一打开,嗯…没错是它了
image-1660649104740
注意:如果需要反向代理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指令语句写在最后,否则不能生效。

0

评论区