Nginx的定时事件的实现(timer)

在前面的文章里面就说到了在事件循环中除了要处理所有的从epoll中获取的事件之外,还要处理一些timer事件,这篇文章就讲讲Nginx的timer是如何实现的。

在讲Nginx的实现之前,我们可以先回顾一下linux的定时器的实现。在linux中通过每次系统定时器时钟的中断的中断处理程序来设置相应的软中断位,该软中断的中断处理程序目的就是为了扫描系统中所有挂起的定时器,如果他们已经超时的话,那么就调用他们相应的函数,这样说白了就是利用中断来实现定时器。

而在Nginx中,timer是自己实现的,而且实现的方法完全不同,而是通过红黑树来维护所有的timer节点,在worker进程的每一次循环中都会调用ngx_process_events_and_timers函数,在该函数中就会调用处理定时器的函数ngx_event_expire_timers,每次该函数都不断的从红黑树中取出时间值最小的,查看他们是否已经超时,然后执行他们的函数,直到取出的节点的时间没有超时为止。其实在Nginx的运行环境中,这种实现方式可能比linux本身的实现方式更为高效。

首先我们来看Nginx的定时器的初始化,在ngx_event_process_init函数中( Ngx_event.c):

	/*初始化计时器,此处将会创建起一颗红黑色,来维护计时器。*/	
    if (ngx_event_timer_init(cycle->log) == NGX_ERROR) {
        return NGX_ERROR;
    }
嗯,就是这个函数,那么接下来我们来看这个函数吧,
//timer的初始化
ngx_int_t
ngx_event_timer_init(ngx_log_t *log)
{
//初始化红黑树
    ngx_rbtree_init(&ngx_event_timer_rbtree, &ngx_event_timer_sentinel,
                    ngx_rbtree_insert_timer_value);

#if (NGX_THREADS)

    if (ngx_event_timer_mutex) {
        ngx_even
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
nginx反向代理可以实现将客户端的请求转发后端服务器,并且可以通过配置实现https输出。具体实现步骤如下: 1. 安装nginx:首先需要在服务器上安装nginx,可以通过包管理工具(如apt、yum等)进行安装。 2. 配置反向代理:在nginx的配置文件中,通过配置`proxy_pass`指令将客户端的请求转发到后端服务器。例如,可以将所有请求都转发到后端服务器的80端口: ``` location / { proxy_pass http://backend_server_ip:80; } ``` 3. 配置SSL证书:为了实现https输出,需要在nginx配置文件中配置SSL证书。可以通过以下步骤来生成和配置SSL证书: - 生成私钥文件和证书签名请求(CSR)文件: ``` openssl genrsa -out private.key 2048 openssl req -new -key private.key -out csr.csr ``` - 使用CSR文件向证书颁发机构(CA)申请证书,或者自签名生成证书。 - 将生成的证书文件和私钥文件放置在指定的目录下,例如`/etc/nginx/ssl/`。 4. 配置HTTPS监听:在nginx的配置文件中,配置HTTPS监听,并指定SSL证书的路径和密码(如果有)。例如: ``` server { listen 443 ssl; server_name your_domain; ssl_certificate /etc/nginx/ssl/your_certificate.crt; ssl_certificate_key /etc/nginx/ssl/private.key; ssl_password_file /etc/nginx/ssl/password.txt; # 如果有密码的话 location / { proxy_pass http://backend_server_ip:80; } } ``` 5. 重启nginx:完成以上配置后,需要重启nginx使配置生效。 至此,nginx反向代理就实现了https输出。当客户端发送https请求时,nginx会将请求转发到后端服务器,并通过SSL加密与客户端进行通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值