V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
rupert
V2EX  ›  NGINX

反向代理中 Nginx 的作用是什么

  •  
  •   rupert · 2016-11-04 20:36:30 +08:00 · 4089 次点击
    这是一个创建于 2976 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如我服务器开了个 http 服务,端口为 3000, 我必须用 Nginx 反代,然后外网才能访问, 在这个过程中, Nginx 的作用是什么? 如果不用 Nginx 外网就不能访问了?

    第 1 条附言  ·  2016-11-04 22:20:37 +08:00
    我现在用的是 青云, 我不知道是不是和系统设置有关, 云的 IP 是 121.201.24.XX , 我启动了个 80 端口,外网也不能访问,但是用 Nginx 转发后才可以, 故有此一问
    12 条回复    2016-11-06 05:42:16 +08:00
    wevsty
        1
    wevsty  
       2016-11-04 20:48:28 +08:00
    很显然,如果你开了端口 3000 ,那么外网直接访问就必须显式标明 3000 端口号才能访问,如果想不带端口号,那么必须监听 80or443 端口。那么这里 Nginx 的作用就是帮你转发 80 的请求。
    当然,你也可以直接监听 80 ,不用反向代理,这完全看你自己的选择。
    使用反向代理的好处在于,有助于提高吞吐量,另外如果有需要可以方便实现均衡负载。
    yidinghe
        2
    yidinghe  
       2016-11-04 21:16:42 +08:00 via Android
    nginx 接受请求,然后转发给真正的服务器,并将服务器的返回结果再转发回给浏览器。真正的服务器可以是本机的,也可以是内网的其他服务器,可以是一台,也可以是多台,而 nginx 永远只要一个。
    kslr
        3
    kslr  
       2016-11-04 21:39:14 +08:00 via Android
    补充楼上两位, nginx 是异步的,比你直接监听性能高。也可以在第一层拦截静态文件,缓解后方压力。
    k9982874
        4
    k9982874  
       2016-11-04 21:56:48 +08:00 via iPad
    你为啥不直接用 nginx 当 web 服务器,直接在 80 端口提供服务。
    如果非要在 3000 端口服务后端用 nginx ,前面挂 Squid , Varnish 解决。
    skydiver
        5
    skydiver  
       2016-11-04 22:47:57 +08:00 via Android   ❤️ 2
    监听外网 ip 才能从外网访问,监听 127.0.0.1 只能内网访问,监听 0.0.0.0 内外网都能访问
    rupert
        6
    rupert  
    OP
       2016-11-05 00:20:42 +08:00
    msg7086
        7
    msg7086  
       2016-11-05 02:56:26 +08:00
    3000 端口的十有八九是在说 Ruby 或者 Python 之类的独立 Web Server 吧。
    为了安全考虑,直接启动的话是无法被外网访问的。你需要手动指定监听地址,明确要求程序监听外网才行。

    另外 Nginx 的目的是转发请求,把外网发来的请求转发到内网里去。
    Remember
        8
    Remember  
       2016-11-05 04:03:53 +08:00
    @skydiver 监听 127.0.0.1 只能本机访问
    panda1001
        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 官网的原话,测试服务器不要用在实际部署中,其它的框架同理也一样
    skydiver
        10
    skydiver  
       2016-11-05 07:58:51 +08:00 via Android
    @Remember 笔误了……
    ryd994
        11
    ryd994  
       2016-11-05 16:17:41 +08:00
    gunicron+nginx 啦
    或者 gunicorn async worker 也行
    网上有很多测试结果说, gunicorn 的 qps 加不加 nginx 差不多,这是不对的。 nginx 的作用在于 buffer 请求,从而减少 gunicorn 的并发。
    不信用 slowloris 打一下试试?
    ibigbug
        12
    ibigbug  
       2016-11-06 05:42:16 +08:00
    第一, nginx 的主要作用是利用异步 io 特性提供高并发支持,还有一个基础功能是卸载 HTTPS 证书
    第二, 3000 也能访问,但是你不能监听 127.0.0.1
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2745 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 13:51 · PVG 21:51 · LAX 05:51 · JFK 08:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.