关于 nginx 验证 url 请求和 PHP 验证 url 请求效率问题

2018-11-22 16:13:26 +08:00
 2384036992
有类似这样的 url 请求: http://aaabbbccc.com/aaa.php?uid=123456&timestamp=1542871794&nonce=abcdefghij&sign=86b2d2fe14824347a376d2a551b7c07b

我想的是在 nginx 就验证 url 是否合法,不合法直接 return 403。
webserver 用的是 openresty-1.13.6.2,php 是 php7.1,nonce 是存在 redis 里的 60 秒过期,需要从 redis 读取 nonce 值是否存在, 如果在 nginx 层面验证 timestamp,nonce 和 sign,效率会不会比在 php 里面验证效率高?会不会导致别的不需要验证的 url 请求阻塞?
验证方法写在 location /aaa.php { } 里面吗?
谢谢各位指点帮助!
3465 次点击
所在节点    NGINX
8 条回复
raysonx
2018-11-22 16:18:38 +08:00
合适的工具做合适的事,Ngnix 就让它老老实实地做反向代理以及提供静态资源,把逻辑放在程序代码里。
raysonx
2018-11-22 16:19:29 +08:00
Nginx 官方有一篇文章,楼主英语好的话可以去读一下 https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/
2384036992
2018-11-22 16:21:39 +08:00
@raysonx 我先看下哈
v2dead
2018-11-22 16:36:38 +08:00
这种简单的事情不需要问啊,跑几个压力测试就知道了。别人的经验不见得对你的真实业务有所帮助。而且这点效率本身不见得有什么值得优化的,要是一定要上 php 的话,从部署和开发的简单性来看,肯定放到 php 端简单很多。
而且上面发的是 if is evil,但你用的是 openresty,靠 lua 模块做验证和这个似乎没什么关系。
v2dead
2018-11-22 16:38:58 +08:00
对了,这篇 ifisevil 是有中文版的,记得就在《 openresty 最佳实践》里面有介绍。
oott123
2018-11-22 17:54:17 +08:00
理论上讲你逻辑都写在 openresty 效率更高,甚至你干脆做成 nginx 模块效率还要高一些。不过程序设计总讲究一个取舍,业务逻辑放 php 会不会更好理解?修改起来会不会更方便?写代码的人会不会更开心?
lihongjie0209
2018-11-22 20:12:33 +08:00
这个就和把业务逻辑写在储存过程中一样



1. 违反了单一职责原则, 你把代码和部署环境强耦合了.
2. 违反了开闭原则, 扩展性和灵活性肯定不如写在代码中好.
3. 违反了依赖倒置原则, web 服务器是一种部署方式, 是细节, 业务代码不应该依赖于任何细节.
4. 违反了过早优化原则, 没有经过测试的优化都是瞎搞.
2384036992
2018-11-22 22:20:29 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/510447

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX