• veyron睿
    2018-11-26
    谢谢老师解答,您说的这个我能想明白。我想问的问题可能比这种情况简单。假设Nginx直接就充当静态服务器,不做反向代理,我指的拿到IP直接就是access.log日志中最开头的那个用户访问过来的公网ip,我测试了一下,两个连接同一个wifi然后访问过来的手机,出现在这个日志中的ip是同一个公网ip,假设手机型号浏览器完全相同,我怎么区分到底是哪个手机访问了呢?有登陆系统的话根据用户token可以区分,如果也没有登陆系统,是不是没法区分了?

    作者回复: 是的,这个时候就没有办法区分了。

    
     4
  • 拯救不开心
    2019-11-21
    老师您好,视频中您说到

    应用层发送了 get 请求,
    传输层,会将浏览器打开了的端口、Nginx 打开的端口(比如80,443)记下来。
    网络层,记录我们主机的 IP,以及Nginx所在服务器的公网 IP,

    此时的传输层和网络层怎么知道Nginx相关的信息?
    现在不是还在我的个人电脑上呢,也就是数据流那个图的最左边这部分。
    展开

    作者回复: 传输层并不知道是哪个进程、哪个应用(Nginx还是浏览器),它只知道端口!所以,同一个端口只能被一个进程打开,如果另一个进程也打开,就会提示端口已被占用。

    
    
  • 六便士
    2019-11-02
    nginx崩溃的时候 能够保证子进程正确退出嘛 会注册at_exit嘛
    
    
  • john-jy
    2019-01-23
    您好,请教个问题。之前浏览资料,在https://blog.csdn.net/ruiyiin/article/details/38355667这篇文章中看到下面这句话:
    Nginx 采用的是 master-worker 模型,一个 master 进程管理多个 worker 进程,基本的事件处理都是放在 woker 中,master 负责一些全局初始化,以及对 worker 的管理。
    每个 woker 使用一个 LuaVM,当请求被分配到 woker 时,将在这个 LuaVM 里创建一个 coroutine。协程之间数据隔离,每个协程具有独立的全局变量 _G。
    然后这篇文章下面讲数据存储还有这句:
    _G
    请求级 table 变量,生命周期为本次请求,可存储请求级任意 Lua 数据。
    ngx.ctx
    请求级 table 变量,生命周期为本次请求,可存储请求级任意 Lua 数据。

    但是我实际测试中发现_G的生命周期并不是本次请求。
    m.lua文件主要代码如下:
    local Object = {}
    Object.__index = Object
    function Object:init()
        ngx.say(_G.data)
        _G.data = 1
    end
    return Object

    入口文件index.lua如下
    local m = require('m')
    m:init()

    可以发现除了nginx启动或者重启后第一次是nil,其他请求都是1,生命周期并不是他说的本次请求。请问他说的应该是不对吧。还有这句话,“每个 woker 使用一个 LuaVM,当请求被分配到 woker 时,将在这个 LuaVM 里创建一个 coroutine。协程之间数据隔离,每个协程具有独立的全局变量 _G”, 这是正确的吗?
    展开

    作者回复: openresty迭代很快,很多功能是在变动的,例如lua_code_cache 指令,我猜应该是这篇文章最初写的时候还没有这个指令吧。
    _G是Lua VM提供的,目前默认lua_code_cache 是打开的,你可以尝试lua_code_cache关闭看,这样每个请求都有独立的VM,_G也就独立了。
    默认情况下,Lua VM是被多个请求共用的,因此_G也会互相影响。

    
    
  • gxxc
    2019-01-19
    老师,能划划重点么?像这种原理的知识我觉得是很重要的,但是我因为水平原因不太能分辨出哪些需要加强记忆,很苦恼

    作者回复: 可以尝试从epoll的epoll_wait和epoll_ctl这两个方法的使用,特别是epoll_ctl时添加的可读、可写事件,从这种API的使用方法上去理解网络事件,了解什么叫多路复用。

    
    
  • veyron睿
    2018-11-25
    请问一下,nginx记录的是公网ip,那怎么识别同一个公网下的不同用户的ip,假设他们用的电脑或者手机型号和浏览器都一致。

    作者回复: 我猜你是想问,nginx前有反向代理,所以nginx通过remote_addr变量拿到的只是反向代理的IP,不是用户IP?通过X-Forward-For头部可以,在第3部分课程中会有一堂课介绍realip模块,它会去取真实IP。

    
    
我们在线,来聊聊吧