比如我服务器开了个 http 服务,端口为 3000, 我必须用 Nginx 反代,然后外网才能访问, 在这个过程中, Nginx 的作用是什么? 如果不用 Nginx 外网就不能访问了?
1
wevsty 2016-11-04 20:48:28 +08:00
很显然,如果你开了端口 3000 ,那么外网直接访问就必须显式标明 3000 端口号才能访问,如果想不带端口号,那么必须监听 80or443 端口。那么这里 Nginx 的作用就是帮你转发 80 的请求。
当然,你也可以直接监听 80 ,不用反向代理,这完全看你自己的选择。 使用反向代理的好处在于,有助于提高吞吐量,另外如果有需要可以方便实现均衡负载。 |
2
yidinghe 2016-11-04 21:16:42 +08:00 via Android
nginx 接受请求,然后转发给真正的服务器,并将服务器的返回结果再转发回给浏览器。真正的服务器可以是本机的,也可以是内网的其他服务器,可以是一台,也可以是多台,而 nginx 永远只要一个。
|
3
kslr 2016-11-04 21:39:14 +08:00 via Android
补充楼上两位, nginx 是异步的,比你直接监听性能高。也可以在第一层拦截静态文件,缓解后方压力。
|
4
k9982874 2016-11-04 21:56:48 +08:00 via iPad
你为啥不直接用 nginx 当 web 服务器,直接在 80 端口提供服务。
如果非要在 3000 端口服务后端用 nginx ,前面挂 Squid , Varnish 解决。 |
5
skydiver 2016-11-04 22:47:57 +08:00 via Android 2
监听外网 ip 才能从外网访问,监听 127.0.0.1 只能内网访问,监听 0.0.0.0 内外网都能访问
|
7
msg7086 2016-11-05 02:56:26 +08:00
3000 端口的十有八九是在说 Ruby 或者 Python 之类的独立 Web Server 吧。
为了安全考虑,直接启动的话是无法被外网访问的。你需要手动指定监听地址,明确要求程序监听外网才行。 另外 Nginx 的目的是转发请求,把外网发来的请求转发到内网里去。 |
9
panda1001 2016-11-05 07:52:25 +08:00
> Django ’ s chock-full of shortcuts to make Web developer ’ s lives easier, but all those tools are of no use if you can ’ t easily deploy your sites. Since Django ’ s inception, ease of deployment has been a major goal.
https://docs.djangoproject.com/en/1.9/howto/deployment/ 这是 django 官网的原话,测试服务器不要用在实际部署中,其它的框架同理也一样 |
11
ryd994 2016-11-05 16:17:41 +08:00
gunicron+nginx 啦
或者 gunicorn async worker 也行 网上有很多测试结果说, gunicorn 的 qps 加不加 nginx 差不多,这是不对的。 nginx 的作用在于 buffer 请求,从而减少 gunicorn 的并发。 不信用 slowloris 打一下试试? |
12
ibigbug 2016-11-06 05:42:16 +08:00
第一, nginx 的主要作用是利用异步 io 特性提供高并发支持,还有一个基础功能是卸载 HTTPS 证书
第二, 3000 也能访问,但是你不能监听 127.0.0.1 |