利用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。
发表评论