架构师第一天之:Nginx

nginx:

诞生背景:

prefork机制不能支持过大的并发请求,

C10K问题的解决

官方站点:

http://nginx.org

二次开发版:

tengine,openresty

特性:

模块化设计,较好的拓展性

高可靠性:master/worker架构

支持热部署:不停机更新配置文件,更换日至文件,更新服务器版本

低内存消耗:10000个keep-alived连接模式下的非活动链接仅消耗2.5M内存

event-driven机制,支持事件驱动

基本功能:

静态资源的web服务器

作为httd反向代理服务器

pop3/imap4协议反向代理服务器(邮件存取服务)

FastCGI(LNMP),uWSGI等协议

模块化机制(非DSO动态模块拓展机制),著名的模块例如:zip,ssl..

web相关功能:虚拟主机,keepalive,访问日志,url重写,路径别名,基于ip及用户的访问控制,速率限制和并发数限制

##代理和反向代理的概念

正向代理:snat代理本地用户访问互联网

反向代理:dnat代理服务器负责从后端服务器请求数据

程序架构:

架构师第一天之:Nginx

master/worker架构

一个master进程可以生成一个或者多个worker进程

master:加载配置文件,管理worker进程,平滑升级

worker:http服务,http代理,fastcgi代理

模块类型:

核心模块:core modules

标准模块:

standard http modules

optional http modules

mail modules

3rd party modules:第三方模块

用来做什么:

静态资源服务器

http协议反向代理

一、安装nginx

系统环境和软件选择:

centos7

yum源:

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/OS/OSRELEASE/$basearch/
gpgcheck=0
enabled=1

编译选项:

–prefix=/usr/local                                    #安装位置
–sbin-path=/usr/sbin/nginx                    #启动脚本定义位置
–conf-path=/etc/nginx/nginx.conf         #配置文件定义位置
–error-log-path=/var/log/nginx/error.log     #错误日志定义位置
–http-log-path=/var/log/nginx/access.log    #访问日志位置
–pid-path=/var/run/nginx.pid                        #pid文件位置
–lock-path=/var/run/nginx.lock                     #lock文件位置
–http-client-body-temp-path=/var/cache/nginx/client_temp      #客户端缓存位置
–http-proxy-temp-path=/var/cache/nginx/proxy_temp               #代理缓存位置
–http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp           #fastcgi缓存位置
–http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp             #uwsgi缓存位置
–http-scgi-temp-path=/var/cache/nginx/scgi_temp                    #scgi缓存位置
–user=nginx                                                                                  #所属用户
–group=nginx                                                                               #所属组
–with-http_ssl_module                                                                  #安装ssl模块
–with-http_realip_module                                                             #realipmo模块
–with-http_addition_module                                                        #附加模块
–with-http_sub_module                                                                #其他子模块
–with-http_dav_module                                                                 #http_dav模块
–with-http_flv_module                                                                   #flv文件模块
–with-http_mp4_module                                                               #mp4模块
–with-http_gunzip_module                                                           #压缩模块
–with-http_gzip_static_module                                                     #静态压缩模块
–with-http_random_index_module                                               #随机index模块
–with-http_secure_link_module                                                     #安全连接模块
–with-http_stub_status_module                                                      #http状态模块
–with-http_auth_request_module                                                 #http认证请求模块
–with-threads                                                                                #线程模块
–with-stream                                                                                #stream模块
–with-stream_ssl_module                                                             #stream_ssl模块
–with-http_slice_module                                                               #slice模块
–with-mail                                                                                      #邮件模块
–with-mail_ssl_module                                                                   #邮件加密模块
–with-file-aio                                                                                   #aio模块(异步io模块)
–with-http_v2_module                                                                     #http2模块

编译安装nginx:

yum install openssl-devel pcre-devel zlib-devel -y

yum groupinstall "Development Tools" "Server Platform Development" -y      #基本环境安装

useradd -s /sbin/nologin -M nginx

下载好源码编译安装包:

tar xf nginx-1.8.1.tar.gz

cd nginx-1.8.1/

./configure –prefix=/usr/local/nginx –conf-path=/etc/nginx/nginx.conf –user=nginx –group=nginx –error-log-path=/var/log/nginx/error.log –http-log-path=/var/log/nginx/access.log –pid-path=/var/run/nginx/nginx.pid –lock-path=/var/lock/nginx.lock –with-http_ssl_module –with-http_gzip_static_module –with-http_stub_status_module                                       #开始编译

make && make install

cd /usr/local/nginx/                    #去安装路径下

/usr/local/nginx/sbin/nginx -t     #配置文件测试

/usr/local/nginx/sbin/nginx -h     #帮助

/usr/local/nginx/sbin/nginx -s stop, quit, reopen, reload   #四种状态

/usr/local/nginx/sbin/nginx          #启动

/usr/local/nginx/sbin/nginx -s stop   #停止

ps -ef | grep nginx                #查进程

cd /etc/nginx/                     #配置文件目录

cp nginx.conf nginx.conf.bak    #初始文件备份

##配置文件的组成部分:

大型服务的配置文件片段化:

vim /etc/nginx/nginx.conf

include conf.d/*.conf          #片段化配置文件

fastcgi,scgi,uwscgi相关配置

配置指令(必须以分号结尾):

directive value1 [value2];

支持变量使用:

内置变量:由模块引入,可直接调用

自定义变量:set variables_name value;

引用变量:$value_name

##配置文件结构:

main block :对http以及mail模块均有效

event{

}  :事件驱动类型配置

http{

} :http相关配置

mail{

} :邮件相关配置

***http相关配置:

http{

server {

listen     port;

root       path;              #根文件位置

server_name     hostname;       #主机名

alias                   #别名配置

location / {          #location配置

…..

}

}

server{

}

}

###main配置端的解析

main block:

配置指令的类别:

正常运行必备的配置;

优化性能的配置;

用于调试,定位问题的配置

(1)正常运行必备的配置:

user   nginx nginx;              #用户配置

pid     /path/to/PID_FILE;     #指定pid 文件位置

worker_rlimit_nofile number;  #单个worker进程能够打开的最大文件数

(2)性能优化方面的配置 :

worker_processes   auto;      #指明工作进程数能使用auto(1.8以上)cpu核心数-1

worker_cpu_affinity auto; #cpu_mask就是cpu个数的二进制(二核心:0001 0010)cpu亲缘性绑定

worker_priority nice ;     #进程优先级的指定(nice(-20~19对应(100-139)))

(3)调试定位问题的配置:

deamon     on|off;        #是否以守护进程模式运行nginx(on)

master_process off;      #启动master进程(off)

error_log     file   模式;   #错误日志文件的记录方式和级别(debug级别需要编译的时候加载)

#方式:stderr:发送到错误输出

syslog:server=address[,paraameter=value]  #发送给syslog服务器

memory:size      #计入到内存中(性能比较好,降低磁盘io)

#日志级别:debug   依赖于configure的debug模式的开启

原创文章,作者:wanghui,如若转载,请注明出处:http://www.178linux.com/53982

(0)
wanghuiwanghui
上一篇 2016-10-29
下一篇 2016-10-29

相关推荐

  • shell变量的浅谈

    变量本质上是存储数据的一个或多个计算机内存地址,变量的命令规则包括: 1) 不能使用程序中的保留字,如if, for 2) 变量由字母、下划线和数字组成,且不能以数字开头 3) 要求风名知义 4) 统一命名规则:驼峰命名法 变量主要分为本地变量、环境变量、局部变量、位置变量和特殊变量 (1)本地变量:只对当前shell…

    2017-08-05
  • 7.28_Linux_ext数据结构inode的原理浅析、软硬链接的区别

    inode表结构浅析 下图以ext文件系统为参考,以4k块大小分区,简单描述一下ext文件系统的数据结构原理,如果有任何错误,烦请各位指出 inode 索引节点 硬盘上的每个磁道被等分为若干个弧段,这些弧段便是磁盘的扇区。硬盘的读写以扇区为基本单位。 扇区的大小,是2的N次方倍。分区的大小可以有多样,1k、2k、4k…以4k块大小来说明。4k块大…

    Linux干货 2016-08-03
  • N22-妙手-第八周课程练习

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。     网桥:         一种网络设备,负责网络桥接,将网络的多个网段在数据链路层连接起来。     集线器: &…

    Linux干货 2016-11-07
  • 软件包管理

    软件包管理 软件运行和编译 ABI:应用程序二进制接口;直接给编译好的二进制使用; windows与linux不兼容, windows: ELF linux: PE 库级别的虚拟化: linux:WINE windows:Cywin API:定义了和库之间的接口;编写应用程序时调用的函数之类的; 编译程序源代码(.c) –> 预编译(.i)…

    Linux干货 2017-04-21
  • C语言结构体里的成员数组和指针

    单看这文章的标题,你可能会觉得好像没什么意思。你先别下这个结论,相信这篇文章会对你理解C语言有帮助。这篇文章产生的背景是在微博上,看到@Laruence同学出了一个关于C语言的题,微博链接。微博截图如下。我觉得好多人对这段代码的理解还不够深入,所以写下了这篇文章。 为了方便你把代码copy过去编译和调试,我把代码列在下面: final void&n…

    Linux干货 2016-05-29
  • FTP基于PAM和MySQL/MariaDB实现虚拟用户访问控制

    前言 vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序,特点是小巧轻快,安全易用,目前在开源操作系统中常用的FTP套件主要有proftpd、pureftp、ServU和wu-ftpd等。本文将讲解vsftpd的基本功能和如何基于PAM和MySQL/MariaDB实现虚拟用户访问控制。 基础配置介绍 工作原理 状态响应码 1xx:信息码 2xx…

    2015-04-20

评论列表(1条)

  • 马哥教育
    马哥教育 2016-11-02 17:08

    希望能加入一些自己的理解,排版可以在好一些的哈,加油!