nginx启动

1.启动

执行/usr/local/nginx/sbin/nginx,默认读取/usr/local/nginx/conf/nginx.conf(实际上在没有显式指定conf,会使用–conf-path=PATH指定的nginx.conf)

2.指定配置文件启动

/usr/local/nginx/sbin/nginx -c /tmp/nginx.conf

3.指定安装目录的启动方式

/usr/local/nginx/sbin/nginx -p /usr/local/nginx

另行指定全局配置项的启动方式

可以通过-g参数临时指定一些全局配置项,使新的配置项生效;
/usr/local/nginx/sbin/nginx -g “pid /var/nginx/test.pid”
-g的约束条件是指定的配置项不能与默认路径下的nginx.conf配置项冲突,否则无法启动;如nginx.conf中 pid logs/nginx.pid是不能存在于默认的nginx.conf中;
另一个约束条件是-g方式启动的Nginx服务执行其他命令也必须带上-g。如停止nginx服务,需要

/usr/local/nginx/sbin/nginx -g “pid /var/nginx/test.pid” -s stop

-V

使用-V参数除了可以显示Nginx版本信息外,还可以显示配置编译阶段的信息,如GCC编译器的版本、操作系统的版本、执行configure时的参数等

块配置项

events{}
http{}…
events/http/server/location/upstream等都是块配置项

配置项的语法

配置项名 配置项1 配置项2

  • 1.首先在行首的是配置项名,这些配置项名必须是Nginx的某一个模块想要处理的,否则Nginx会认为配置项文件出现了非法配置项名。配置项输入结束后,以空格作为分隔符。
  • 2.其次是配置项的值,可以是数字或者字符串
  • server_names_hash_bucket_size

    为了提高快速寻找到相应的server_name的能力,Nginx使用散列表来存储server_name。server_names_hash_bucket_size设置了每个散列桶占用的内存大小;

    server_names_hash_max_size

    server_names_hash_max_size会影响散列表的冲突率。server_names_hash_max_size越大,消耗的内存越多,但散列key的冲突率会降低,检索速度也会更快。

    root

    location /download/ {
    root /opt/web/html;
    }
    在上述配置项中,如果有一个请求的URI是/download/index/test.html,那么web服务器会返回/opt/web/html/download/index/test.html文件的内容

    3.1:如何调用http模块

    worker进程在一个for循环中反复调用事件模块检测网络事件。当事件模块检测到某个客户端发起的TCP请求(接收到SYN包),将会为它建立TCP连接,成功建立连接后根据nginx.conf文件的配置会交由HTTP框架处理。HTTP框架会试图接收完整的HTTP头部,并在接收到完整的HTTP头部后将请求分发到具体的HTTP模块中处理。HTTP模块在处理请求结束时,大多会向客户端发送响应,此时会依次调用所有的HTTP过滤模块,每个过滤模块会根据配置文件决定自己的行为。

    Nginx中数据结构

    3.1整型封装

    typedef intptr_t ngx_int_t;
    typedef uintptr_t ngx_uint_t;

    3.2字符串封装

    typedef struct{
    size_t len;
    u_char *data;
    }ngx_str_t;

    其中data指针指向字符串起始地址,len表示字符串的有效长度,因为指向的不是普通字符串,未必以’\0’结束,所以需要len来指定长度。
    r->method_name就是一个 ngx_str_t类型的变量;
    如if(0==ngx_strncmp(
    r->method_name.data,”PUT”,r->method_name.len))
    {….}
    其实ngx_strncmp就是strcnmp函数,为了跨平台进行封装
    #define ngx_strcnmp(s1,s2,n) strcnmp((const char )s1, (const char )s2, n)
    如GET/test?a=1 http/1.1\r\n存储到内存地址0x1d0b0110,只需要把r->method_name设置为{len=3,data=0x1d0b0110}

    3.3 ngx_list_t数据结构

    ngx_list_t是nginx封装的链表容器,如HTTP头部就是用ngx_list_t来存储的。
    typedef struct ngx_list_part_s ngx_list_part_t

    struct ngx_list_part_s{
    void *elts;
    ngx_uint_t nelts;
    ngx_list_part_t *next;

    }
    typedef struct {
    ngx_list_part_t *last;
    ngx_list_part_t part;
    size_t size;
    ngx_uint_t nalloc;
    ngx_pool_t *pool;
    }ngx_list_t
    ngx_list_t描述整个链表,而ngx_list_part_t只描述链表的一个元素。
    ngx_list_t不是一个单纯的链表;其实一个链表容器,存储的元素又是一个数组。

  • last:指向链表的最后一个数组元素
  • part:指向链表的首个数组元素
  • size:链表中的每一个ngx_list_part_t元素都是一个数组。因为数组存储的是某种类型的数据结构,且ngx_list_t是非常灵活的数据结构,所以它不会限制存储什么样的数据,只是通过size限制每一个数组元素所占的空间大小,用户所要存储的数据所占字节数必须<=size
  • nalloc:链表中的数组元素一旦分配后是不可以更改的。nalloc表示每个ngx_list_part_t数组的容量,即最多存储多少个数据。
  • pool:链表中管理内存分配的内存池对象,用户要存放的数据占用的内存都是由pool分配的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值