nginx是C语言开发的,号称并发处理百万级别的TCP连接,稳定,热部署(运行时升级),高度模块化设计,可以用C++开发。

一、安装和目录

1.1 前提

epoll,linux内核版本为2.6或以上

gcc编译器,g++编译器

pcre库:函数库,支持解析正则表达式

zlib库:压缩解压功能

openssl库:ssl功能相关库,用于网站加密通讯

1.2 源码下载及目录结构简单认识

auto/:编译相关的脚本,可执行文件configure会用到这些脚本

cc/:检查编译器的脚本

lib/:检查依赖库的脚本

os/:检查操作系统类型的脚本

type/:检查平台类型的脚本

CHANGES:修复的bug,新增功能说明

CHANGES.ru:俄语版CHANGES

conf/:默认的配置文件

configure:编译ngnix之前必须先执行脚本以生成一些必要的中间文件

contrib/:脚本和工具,典型的是vim高亮工具

html/:欢迎界面和错误界面相关的文件

man/:帮助文件目录

src/:源代码目录

  • core:核心代码
  • event:event(事件)模块相关代码
  • http:http(web服务)模块相关代码
  • mail:邮件模块相关代码
  • os:操作系统相关代码
  • stream:流处理相关代码

1.3 nginx的编译安装

编译的第一步:用configure来进行编译之前的配置工作

下面的命令将会进行默认配置

[root@JD nginx-1.16.1]# ./configure

configure的help命令可以查看configure的选项

  • --prefix:指定最终安装到的目录,默认值 /usr/local/nginx
  • --sbin-path:用来指定可执行文件目录,默认的是 sbin/nginx
  • --conf-path:用来指定配置文件目录,默认的是 conf/nginx.conf
  • --with开头的是默认不会编译到nginx的,可以用该命令包含进去
  • --without则是默认编译进了nginx中的

执行完后,会多出来objs目录

  • ngx_modules.c会决定哪些模块会真正被编译到可执行文件中
  • Makefile:执行了configure脚本产生的编译规则文件,执行make命令时用到

用make编译

[root@JD nginx-1.16.1]# make

ogjs目录中多处了nginx文件

这是nginx的可执行文件

用make命令进行安装

[root@JD nginx-1.16.1]# make install

1.4 启动和简单使用

[root@JD nginx-1.16.1]# whereis nginx
nginx: /usr/local/nginx

进入上面目录的sbin目录

[root@JD nginx-1.16.1]# cd /usr/local/nginx
[root@JD nginx]# ll
total 0
drwx------ 2 nobody root 6 Nov 28 13:00 client_body_temp
drwxr-xr-x 2 root root 333 Nov 28 12:56 conf
drwx------ 2 nobody root 6 Nov 28 13:00 fastcgi_temp
drwxr-xr-x 2 root root 40 Nov 28 12:56 html
drwxr-xr-x 2 root root 58 Nov 28 13:00 logs
drwx------ 2 nobody root 6 Nov 28 13:00 proxy_temp
drwxr-xr-x 2 root root 19 Nov 28 12:56 sbin
drwx------ 2 nobody root 6 Nov 28 13:00 scgi_temp
drwx------ 2 nobody root 6 Nov 28 13:00 uwsgi_temp
[root@JD nginx]# cd sbin

启动

[root@JD sbin]# ./nginx

启动后访问服务器IP地址,网页显示:

上面的内容正是html目录下index.html文件

二、进程模型

nginx启动后查看进程

[root@JD sbin]# ps -ef | grep nginx
root 5789 10021 0 11:57 pts/0 00:00:00 grep --color=auto nginx
root 24193 1 0 Nov28 ? 00:00:00 nginx: master process ./nginx
nobody 24194 24193 0 Nov28 ? 00:00:01 nginx: worker process

两个进程,master进程属于root,worker进程属于nobody,两个进程是父子关系

上面的第三列是父进程ID,可以看到worker进程是被master进程通过fork()创造出来的

进程模型

通过一个master进程,一到多个worker进程这种工作机制对外服务的,这种工作机制保证了nginx稳定灵活运行

master进程是监控进程,不处理具体业务,专门用来管理worker进程

worker进程是用来对用户提供服务的

master进程和worker进程之间通讯,可以用信号,也可以用共享内存

worker进程一旦挂掉,那么master进程会立即fork()一个新的worker进程投入工作中去

调整worker进程数量

worker进程几个合适?多核计算机,让每个worker运行在一个单独的内核上,最大限度减少CPU进程切换成本,提高系统性能

查看processor数量

[root@JD sbin]# grep -c processor /proc/cpuinfo
2

即是两核的,我们所说的多少核实际是有多少processor,一般是多少逻辑核

基础概念

CPU(Central Processing Unit):中央处理单元,CPU != 物理核,更 != 逻辑核。
物理核(physical core/processor):可以看的到的,真实的cpu核,有独立的电路元件以及L1,L2缓存,可以独立地执行指令。
逻辑核(logical core/processor):在同一个物理核内,逻辑层面的核。(比喻,像动画片一样,我们看到的“动画”,其实是一帧一帧静态的画面,24帧/s连起来就骗过了人类的眼睛,看起来像动起来一样。逻辑核也一样,物理核通过高速运算,让应用程序以为有两个cpu在运算)。
超线程(Hyper-threading, HT):超线程可以在一个逻辑核等待指令执行的间隔(等待从cache或内存中获取下一条指令),把时间片分配到另一个逻辑核。高速在这两个逻辑核之间切换,让应用程序感知不到这个间隔,误认为自己是独占了一个核。
关系:一个CPU可以有多个物理核。如果开启了超线程,一个物理核可以分成n个逻辑核,n为超线程的数量。

Linux查看cpu信息

cat /proc/cpuinfo

...
processor : 23 // 逻辑核编号
cpu MHz : 2299.863 // CPU主频
cache size : 15360 KB // L2 cache大小
physical id : 1 // CPU编号
siblings : 12 // 一颗CPU中有多少逻辑核
core id : 5 // CPU的物理核编号
cpu cores : 6 // 一颗CPU中有多少物理核
...

针对于上边的这个服务器,我们说,它有2颗CPU,每颗CPU中有6个物理核,CPU开启了超线程,每颗CPU中有12个逻辑核。所以,这台服务器共有12个物理核,24个逻辑核。我们通常意义上说的24核,是指逻辑核是24个。

作者:rockops
链接:https://www.jianshu.com/p/4233b080048c
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

修改nginx的worker数量

[root@JD nginx]# cd conf
[root@JD conf]# pwd
/usr/local/nginx/conf
[root@JD conf]# ll
total
-rw-r--r-- root root Nov : fastcgi.conf
-rw-r--r-- root root Nov : fastcgi.conf.default
-rw-r--r-- root root Nov : fastcgi_params
-rw-r--r-- root root Nov : fastcgi_params.default
-rw-r--r-- root root Nov : koi-utf
-rw-r--r-- root root Nov : koi-win
-rw-r--r-- root root Nov : mime.types
-rw-r--r-- root root Nov : mime.types.default
-rw-r--r-- root root Nov : nginx.conf
-rw-r--r-- root root Nov : nginx.conf.default
-rw-r--r-- root root Nov : scgi_params
-rw-r--r-- root root Nov : scgi_params.default
-rw-r--r-- root root Nov : uwsgi_params
-rw-r--r-- root root Nov : uwsgi_params.default
-rw-r--r-- root root Nov : win-utf
[root@JD conf]# vi nginx.conf

把默认的1改为processor的数量

重新启动

[root@JD sbin]# ./nginx -s stop
[root@JD sbin]# ./nginx
[root@JD sbin]# ps -ef | grep -v grep | grep nginx
root : ? :: nginx: master process ./nginx
nobody : ? :: nginx: worker process
nobody : ? :: nginx: worker process

已经有两个 worker 进程了

nginx重载配置文件

查看帮助命令

[root@JD sbin]# ./nginx -?
nginx version: nginx/1.16.
Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives] Options:
-?,-h : this help
-v : show version and exit
-V : show version and configure options then exit
-t : test configuration and exit
-T : test configuration, dump it and exit
-q : suppress non-error messages during configuration testing
-s signal : send signal to a master process: stop, quit, reopen, reload
-p prefix : set prefix path (default: /usr/local/nginx/)
-c filename : set configuration file (default: conf/nginx.conf)
-g directives : set global directives out of configuration file

重载配置文件

修改配置文件后可重载

[root@JD sbin]# ./nginx -s reload

nginx 可以热升级,热回滚

linux C++ 通讯架构(一)nginx安装、目录、进程模型的更多相关文章

  1. linux系统下nginx安装目录和nginx.conf配置文件目录

    linux系统下nginx安装目录和nginx.conf配置文件目录 1.查看nginx安装目录 输入命令 # ps  -ef | grep nginx 返回结果包含安装目录 root      26 ...

  2. 第一次项目上Linux服务器(六:Nginx安装及相关命令(转))

    1.下载nginx 方法一 wget http://nginx.org/download/nginx-1.11.6.tar.gz 方法二 http://nginx.org/en/download.ht ...

  3. Nginx安装目录详解

    Nginx安装目录详解 1. 查看有关nginx的所有目录列表,输入命令  rpm -ql nginx 可以查看有关nginx目录信息,但是注意 这种命令只能是在基于yum安装的方式才可以. 2. 下 ...

  4. nginx安装目录文件

    nginx安装目录 conf 存放nginx的配置文件 在修改配置文件nginx.conf之前,一般先备份cp nginx.conf nginx.conf.bak html 存放前端文件的 默认带有首 ...

  5. Nginx的内部(进程)模型

    nginx是以多进程的方式来工作的,当然nginx也是支持多线程的方式的,只是我们主流的方式还是多进程的方式,也是nginx的默认方式.nginx采用多进程的方式有诸多好处. (1)nginx在启动后 ...

  6. Linux下查看Nginx安装目录、版本号信息?

    Linux环境下,怎么确定Nginx是以那个config文件启动的? 输入命令行: ps  -ef | grep nginx 摁回车,将出现如下图片: master process 后面的就是 ngi ...

  7. Linux下怎么确定Nginx安装目录

    linux环境下,怎么确定nginx是以那个config文件启动的? 输入命令行: ps  -ef | grep nginx 摁回车,将出现如下图片: master process 后面的就是 ngi ...

  8. CentOS 6.5玩转自制Linux、远程登录及Nginx安装测试

    前言    系统定制在前面的博文中我们就有谈到过了,不过那个裁减制作有简单了点,只是能让系统跑起来而,没有太多的功能,也没的用户登录入口,而这里我们将详细 和深入的来谈谈Linux系统的详细定制过程和 ...

  9. 二、nginx 安装目录详解

    rpm -ql nginx 路径 类型 介绍 /etc/logrotate.d/nginx  配置文件  Nginx 日志轮转,用于logrotate服务日志切割 /etc/nginx /etc/ng ...

随机推荐

  1. 阶段3 1.Mybatis_09.Mybatis的多表操作_7 mybatis多对多准备角色表的实体类和映射配置

    创建Role表和user_role表 DROP TABLE IF EXISTS `role`; CREATE TABLE `role` ( `ID` int(11) NOT NULL COMMENT ...

  2. C#正则的使用

    c#使用正则表达式要用到System.Text.RegularExprssions命名空间 官方API Regex类是用于匹配表达式: 通常Regex分为静态类和实例化俩种方式.那这俩种有什么区别呢, ...

  3. Python Requests post方法中data与json参数问题

    1.data参数 你想要发送一些编码为表单形式的数据——非常像一个 HTML 表单.要实现这个,只需简单地传递一个字典给 data 参数.你的数据字典在发出请求时会自动编码为表单形式,header默认 ...

  4. win10安装Tensorflow1.9GPU版本

    前言 看到DateWhale出了一篇安装教程(微信公众号DateWhale),决定体验一下Tensorflow1.9的GPU版本..其实一开始装的是2.0,但是tf.Session()就报错了,说是2 ...

  5. 2019第二周总结.Java

    本学期开始学习Java课程了,首先我先说说学习Java的感觉吧,它不像C语言程序设计,但是又有语言开发的共同点.学Java语言重点是面向对象的程序设计,更加的适应生活需要和计算机开发的需要. 总的来讲 ...

  6. 语言I—2019秋作业02

    这个作业属于那个课程 这个作业要求在哪里 我在这个课程的目标是 这个作业在那个具体方面帮助我实现目标 参考文献 C语言程序设计I https://edu.cnblogs.com/campus/zswx ...

  7. [Python3] 004 字符串的基本使用

    目录 1. 字符串简介 1.1 作用 1.2 注意点 2. 使用方式 2.1 用引号括起来 少废话,上例子 2.2 单.双引号可以"轮换交替" 少废话,上例子 3. 转义字符 3. ...

  8. [Python3] 001 "Hello World" 与注释

    目录 1. 致敬 1.1 致敬 "Hello World" 1.2 致敬 Python 之父 Guido van Rossum 2. 注释 2.1 单行注释 2.2 多行注释 3. ...

  9. Vue 2.0 入门系列(14)学习 Vue.js 需要掌握的 es6 (1)

    针对之前学习 Vue 用到的 es6 特性,以及接下来进一步学习 Vue 要用到的 es6 特性,做下简单总结. var.let 与 const var 与 let es6 之前,JavaScript ...

  10. Servlet,HttpServletRequest 和 HttpServletResponse

    今天是周六,老子加班,还可吧, 哈哈哈哈哈哈哈哈哈哈哈哈哈 此次更新的内容是HttpServletRequest 和 HttpServletResponse 昨天复习了一部分内容,今天又把剩下的看完. ...