比如我服务器开了个 http 服务,端口为 3000, 我必须用 Nginx 反代,然后外网才能访问, 在这个过程中, Nginx 的作用是什么? 如果不用 Ngin大带宽服务器x 外网就不能访问了?
很显然,如果你开了端口 3000 ,那么外网直接访问就必须显式标明 3000 端口号才能访问,如果想不带端口号,那么必须监听 80or443 端口。那么这里 Nginx 的作用就是帮你转发 80 的请求。
当然,你也可以直接监听 80 ,不用反向代理,这完全看你自己的选择。
使用反向代理的好处在于,有助于提高吞吐量,另外如果有需要可以方便实现均衡负载。
nginx 接受请求,然后转发给真正的服务器,并将服务器的返回结果再转发回给浏览器。真正的服务器可以是本机的,也可以是内网的其他服务器,可以是一台,也可以是多台,而 nginx 永远只要一个。
补充楼上两位, nginx 是异步的,比你直接监听性能高。也可以在第一层拦截静态文件,缓解后方压力。
你为啥不直接用 nginx 当 web 服务器,直接在 80 端口提供服务。
如果非要在 3000 端口服务后端用 nginx ,前面挂 Squid , Varnish 解决。
监听外网 ip 才能从外网访问,监听 127.0.0.1 只能内网访问,监听 0.0.0.0 内外网都能访问
赞
3000 端口的十有八九是在说 Ruby 或者 Python 之类的独立 Web Server 吧。
为了安全考虑,直接启动的话是无法被外网访问的。你需要手动指定监听地址,明确要求程序监听外网才行。
另外 Nginx 的目的是转发请求,把外网发来的请求转发到内网里去。
监听 127.0.0.1 只能本机访问
> 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 官网的原话,测试服务器不要用在实际部署中,其它的框架同理也一样
笔误了……
gunicron+nginx 啦
或者 gunicorn async worker 也行
网上有很多测试结果说, gunicorn 的 qps 加不加 nginx 差不多,这是不对的。 nginx 的作用在于 buffer 请求,从而减少 gunicorn 的并发。
不信用 slowloris 打一下试试?
第一, nginx 的主要作用是利用异步 io 特性提供高并发支持,还有一个基础功能是卸载 HTTPS 证书
第二, 3000 也能访问,但是你不能监听 127.0.0.1