利用Nginx+iptables实现对Tomcat页面添加https访问,并且将原http页面跳转至最新的https页面。

本次方案将会利用Nginx对一个页面添加https访问,由于Tomcat和Nginx属不同的程序,导致端口冲突无法复用,故此原有页面的跳转导致端口访问是请求的Tomcat,但我们不想对Tomcat进行配置让他回访至Nginx去做网页重定向,所以我们需要iptables来进项端口的调回。


假设Tomcat的访问端口是8081,新增的https端口为81。


Nginx的配置文件http{}中添加以下配置,以达到https的访问(以下配置跳过了证书制作的步骤,需要制作Nginx的ssl证书文件并修改路径):

server {
        listen 81 ssl;
        server_name _;
                ssl_certificate      /usr/local/nginx/ssl/server.crt;
                ssl_certificate_key  /usr/local/nginx/ssl/server.key;
                ssl_session_cache    shared:SSL:1m;
                ssl_session_timeout  5m;
                ssl_ciphers  HIGH:!aNULL:!MD5;
                ssl_prefer_server_ciphers  on;

        location /{
                proxy_pass http://localhost:8081/;
        }

}


此时https访问已经完成,但原有页面仍是http的方式访问并且可以打开,我们这次使用的是一个新端口,所以需要将原有页面端口的访问指向Nginx,加上一层https。

在不修改原有Tomcat的情况下,我们需要添加一条iptables配置。

iptables -t nat -A PREROUTING -p tcp --dport 8081 -j REDIRECT --to-ports 82

以上命令是将来自外部8081端口的请求转发给82端口;这里我们也可以直接转发给81端口,但为了防止部分用户出现400报错(此链接需要https访问,但你使用了http)不知道如何解决,所以我们转发给一个新的端口82并在Nginx上进行配置。


然后在Nginx添加配置:

       server {
                listen 82;
                server_name _;
                rewrite ^/(.*)$ https://访问IP或域名:81/$1;
        }

以上配置配合iptables就可以将页面带后缀的重新定向给新的https链接。


注意,iptables是解决的外部访问8081端口的问题,所以在服务器内部访问8081端口将不会被转发给82。

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。