Nginx中文文档参考资料
一、Nginx的源码安装:
1、解压nginx:tar zxf nginx-1.14.0.tar.gz
2、进入nginx解压包:
vim src/core/nginx.h
修改:#define NGINX_VER "nginx/"(将此行末尾显示nginx版本号的配置删除)
vim auto/cc/gcc
修改:
# debug
#CFLAGS="$CFLAGS -g" (将这2行注释调,关闭debug)
nginx安装包里各个文件参数的理解:
[root@server1 nginx-1.14.0]# cd /root/lnmp/nginx-1.14.0
[root@server1 nginx-1.14.0]# ls
auto CHANGES.ru configure html Makefile objs src
CHANGES conf contrib LICENSE man README
1)auto目录:里面有4个子目录,cc是编译使用的,os是判断操作系统类型的,其他都是辅助configure编译的,也就是操作系统有什么特性供nginx使用
2)CHANGES:各版本的改变,bug修复等信息
CHANGES.ru:nginx作者是俄罗斯人,这是俄罗斯版本3)conf: 为了方便运维配置,conf目录里有示例文件,安装好后会拷贝到安装目录
4)configure:
5)contrib:提供nginx语法检测字体
cp -r contrib/vim/* ~/.vim ##家目录下如果没有.vim目录,手动新建6)html:默认发布目录,50x.html是报500错误时的页面
7) src:源码目录
8) 编译完成后会生成一个中间目录objs,里面有个ngx_modules.c,表示编译进nginx的模块,可以打开看一下
9)make完成后再看objs目录,又有新文件
3、编译安装nginx:
./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio --user=nginx --group=nginx
常用模块以及含义:
--prefix=PATH | 指定nginx的安装目录。默认 /usr/local/nginx |
--conf-path=PATH | 设置nginx.conf配置文件的路径。nginx允许使用不同的配置文件启动,通过命令行中的-c选项。默认为prefix/conf/nginx.conf |
--user=name | 设置nginx工作进程的用户。安装完成后,可以随时在nginx.conf配置文件更改user指令。默认的用户名是nobody。--group=name类似 |
--with-pcre | 设置PCRE库的源码路径,如果已通过yum方式安装,使用--with-pcre自动找到库文件。使用--with-pcre=PATH时,需要从PCRE网站下载pcre库的源码(版本4.4 - 8.30)并解压,剩下的就交给Nginx的./configure和make来完成。perl正则表达式使用在location指令和 ngx_http_rewrite_module模块中。 |
--with-zlib=PATH | 指定 zlib(版本1.1.3 - 1.2.5)的源码解压目录。在默认就启用的网络传输压缩模块ngx_http_gzip_module时需要使用zlib |
--with-http_ssl_module | 使用https协议模块。默认情况下,该模块没有被构建。前提是openssl与openssl-devel已安装 |
--with-http_stub_status_module | 用来监控 Nginx 的当前状态 |
--with-http_realip_module | 通过这个模块允许我们改变客户端请求头中客户端IP地址值(例如X-Real-IP 或 X-Forwarded-For),意义在于能够使得后台服务器记录原始客户端的IP地址 |
--add-module=PATH | 添加第三方外部模块,如nginx-sticky-module-ng或缓存模块。每次添加新的模块都要重新编译(Tengine可以在新加入module时无需重新编译) |
根据提示解决依赖性
##此处应该还需要安装pcre-devel和openssl-devel
4、make && make install
判断是否安装好了,进装路径下找,看是否存在nginx软件。
5、创建nginx用户
我们可以在配置文件里面看到,用户为nobody,但是在系统里面,已经存在nobody这个用户,这个用户是系统为我们预留的,使用nobody用户登录没有错,但是从规范的角度来说,什么样的服务用什么样的用户登录,所以我们需要创建nginx用户和用户组,使用nginx用户登录。
注意:我们在nginx服务器上面建立一个nginx用户,它不可以登录系统,只能运行nginx服务,这样比较安全
vim /usr/local/lnmp/nginx/conf/nginx.conf
进去修改登陆用户(user)和用户组(usergroup)
2 #user nobody;
3 user nginx nginx
[root@server1 lnmp]# groupadd -g 900 nginx
[root@server1 lnmp]# useradd -u 900 -g 900 nginx
[root@server1 lnmp]# id nginx
uid=900(nginx) gid=900(nginx) groups=900(nginx)
5、将nginx启动脚本链接到/usr/local/sbin/
ln -s /usr/local/lnmp/nginx/sbin/nginx /usr/local/sbin/
[root@server1 ~]# nginx -t ##检测语法
[root@server1 ~]# nginx ##开启nginx
6、启动nginx并访问:http://172.25.58.1
此时,nginx基础安装配置完成
二、master 进程 和 worker 进程
ngnix进程启动启动后会有一个master进程和多个worker进程。
master进程的主要作用:
1.读取并验证配置信息;
2.创建,绑定及关闭套接字;
3.启动,终止worker进程以及维护worker进程的个数;
4.无须终止服务而重新配置工作。
5.控制非中断式程序升级,启用新的二进制程序并在需要的时回滚到老版本。
6.重新打开日志文件。
7.编译嵌入式perl脚本。
worker主要作用:
1.接收,传入并处理来自客户端的连接;
2.提供反向代理及过滤功能;
3.nginx任何能完成的其他任务
master 进程 和 worker 进程。其中 master 进程只有一个,worker 进程可以有多个。
worker 进程才是真正 working 的进程,才是真正处理请求的进程。worker 进程全部都是 master 进程的子进程相当于进程和线程的关系吧
worker 进程是以普通用户的身份进行运行的,这样就可以极大增加程序的安全性
就算是万一有一个进程被劫持,那也不会有管理员权限
nginx 的热部署和其并发模型有着密不可分的关系。说白了,就是因为 master 进程的关系
当通知 ngnix 重读配置文件的时候,master 进程会进行语法错误的判断
如果存在语法错误的话,返回错误,不进行装载;如果配置文件没有语法错误,那么 ngnix 也不会将新的配置调整到所有 worker 中
而是,先不改变已经建立连接的 worker,等待 worker 将所有请求结束之后
将原先在旧的配置下启动的 worker 杀死,然后使用新的配置创建新的 worker
worker进程我们可以通过cpu内核来增加减。
在没有特定的设置之前,cpu只有一个内核
我们先在虚拟配置里面将cpu内核的数目改为我们所需要的
我们查看cpu内核的个数,
cat /proc/cpuinfo | grep ‘processor’ | wc -l 我们修改配置文件里面的worker,我们可以用auto,也可以直接写我们所需的cpu内核数,但是,缺陷是,如果我们使用auto的话,是将系统里面的所有cpu内核拿来使用,但是我们做实验的时候可能不需要那么多,会造成资源的浪费。