在昨天的文章(配置https实现请求安全)里,我介绍了nginx配置全站的https访问,这样对所有请求都会加密,会减慢响应速度。
在实际的项目中,我们也没有必要对所有请求加密,比如浏览一个帖子列表,查看一个商品信息等等,只需要对一些包含敏感数据的请求加密就可以了。
因此,今天尝试配置了nginx部分的https访问,这里的测试会继续使用到昨天生成的秘钥和证书,对登陆页面进行加密,配置的代码如下:
upstream site{ server localhost:8081; server localhost:8082; server localhost:8083; } server { listen 9001; server_name localhost; index index.jsp index.html; root /home/default; location ~ .* { proxy_pass http://site; proxy_set_header X-Real-IP $remote_addr; } location ^~ /test/login.jsp{ rewrite ^ https://$server_addr:443$request_uri? permanent; } } server { listen 443 ssl; server_name localhost; ssl on; ssl_certificate /home/dayuanzi/temp/rsamiyao.csr; ssl_certificate_key /home/dayuanzi/temp/rsamiyaonopw.key; location / { rewrite ^ http://$server_addr:9001$request_uri? permanent; } location ^~ /test/login.jsp{ proxy_pass http://127.0.0.1:8081; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-Ip $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
部署服务器详情:
三台tomcat:
localhost:8081,localhost:8082,localhost:8083
一台nginx
在上面的配置实现了以下功能:1、nginx作为一个负载均衡器,除了login.jsp请求,其他请求都会平均分发到其他三个本地服务器
2、http://localhost:9001/test/login.jsp时,会重定向为https://localhost/test/login.jsp,对login.jsp加密
3、https://localhost/test/* 时,会重定向为http://locathost:9001/* ,一般请求不加密
这里简单说一下rewrite语法:rewrite regex replacement [flag];
flag可以有四个取值:
last : 相当于Apache的[L]标记,表示完成rewrite
break : 停止执行当前虚拟主机的后续rewrite指令集
redirect : 返回302临时重定向,地址栏会显示跳转后的地址
permanent : 返回301永久重定向,地址栏会显示跳转后的地址
另外,测试时,如果是在另一台机器访问,上面rewrite ^ http://$server_addr:9001$request_uri?中,必须要用$server_addr不能用$server_name,否则会重定向到本机
在nginx配置部分https
最新推荐文章于 2024-08-06 10:50:55 发布