Nginx(一)——简介及安装

Nginx简介

Nginx是什么

与Apache、Lighttpd、Tomcat、Jetty、IIS相同,Nginx也是Web服务器,或者说是WWW(World Wide Web)服务器。相应的,也具有Web服务器的基本功能:基于REST架构风格,以统一资源描述符(URI)或者统一资源定位符(URL)作为沟通依据,通过HTTP为浏览器等客户端程序提供各种网络服务。

Nginx的优势

  1. 更快
    在正常情况下,单次请求会得到更快的响应;在高峰期(如有数以万计的并发请求),Nginx也能比其他Web服务器更快地响应请求。
  2. 高扩展性
    Nginx是由多个不同功能、不同层次、不同类型且耦合度极低的模块组成。针对其中一个模块进行修改或升级时,其他模块不受影响。
    这种模块化的设计,造就了Nginx庞大的第三方模块数量。又因Nginx的模块都是嵌入到二进制文件中执行的,使得第三方模块能和官方模块一样具备其优秀的性能,充分利用Nginx的高并发特性。
  3. 高可靠性
    Nginx的master进程和worker进程设计,使得master进程能够在某个worker进程出错时可以迅速“拉起”新的worker子进程来提供服务。
  4. 低内存消耗
    一般情况下,10000个非活跃的HTTP Keep-Alive连接在Nginx中仅消耗2.5MB的内存。
  5. 单机支持10万以上的并发连接
    理论上,Nginx支持的并发连接上限取决于内存。(也是由于Nginx的master进程-worker进程架构而达到这样的效果)
  6. 热部署
    master管理进程与worker工作进程的分离设计,使得Nginx能够提供热部署功能,即可以在不间断服务的前提下,升级Nginx的可执行文件。
  7. 最自由的BSD许可协议
    BSD许可协议不仅允许用户免费试用Nginx,还允许用户在自己的项目中直接试用或修改Nginx密码,然后发布。这吸引了无数的开发者继续为Nginx贡献自己的智慧,也是Nginx社区很活跃的重要原因之一。
    Nginx先天的事件驱动型设计、全异步的网络I/O处理机制、极少的进程间切换以及许多优化设计,都使得Nginx天生善于处理高并发压力下的互联网请求,同时Nginx降低了资源消耗,可以把服务器硬件资源发挥到极致。

Nginx安装

系统环境: CentOS7
Nginx目前版本在某些操作系统上已经开始提供二进制安装包了,但是这里还是讨论通过编译源代码安装。

使用Nginx的必备软件

yum install kernel sources -y
yum install kernel-devel -y
  1. GCC编译器
    GCC(GNU Complier Collection)可用来编译C语言程序。

    yum install -y gcc
  2. PCRE库
    PCRE(Perl Compatible Regular Expressions,Perl兼容正则表达式),该库支持正则表达式。如果在配置文件nginx.conf里使用了正则表达式,name在编译Nginx时就必须把PCRE库编译进Nginx,因为Nginx的HTTP模块要靠它来解析正则表达式。

    yum install -y pcre pcre-devel

    或者

    cd /usr/local/
    wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.33/pcre-8.33.tar.gz
    tar -zxvf pcre-8.33.tar.gz
    cd pcre-8.33/
    ./configure
    make && make install
  3. zlib库
    zlib库用于对HTTP包的内容做gzip格式的压缩,如果在nginx.conf里配置了gzip on,并制定对于某些类型(content-type)的HTTP响应使用gzip来进行压缩以减少网络传输量,那么,在编译时就必须把zlib编译进Nginx。

    yum install -y zlib zlib-devel

    或者

    cd /usr/local/
    wget http://zlib.net/zlib-1.2.11.tar.gz
    tar -zxvf zlib-1.2.11.tar.gz
    cd zlib-1.2.11/
    ./configure
    make && make install
  4. OpenSSL开发库
    如果需要使用到SSL协议,那么就需要安装这个库。如果想使用MD5、SHA1等散列函数,那么也需要它。

    yum install -y openssl openssl-devel

    或者

    cd /usr/local/
    wget http://www.openssl.org/source/openssl-1.0.1j.tar.gz
    tar -zxvf openssl-1.0.1j.tar.gz
    cd openssl-1.0.1j
    ./config
    make && make install

磁盘目录

  1. Nginx源代码存放目录
    用于放置Nginx源码文件,以及第三方或我们自己所写的模块源代码文件
  2. Nginx编译阶段产生的中间文件存放目录
    该目录用于放置在configure命令执行后所生成的源文件及目录,以及make命令执行后所生成的目标文件和最终连接成功的二进制文件。默认情况下,configure命令将该目录命名为objs,并放在Nginx源代码目录下。
  3. 部署目录
    该目录存放Nginx服务运行期间所需要的二进制文件、配置文件等。默认情况下,该目录为/usr/local/nginx
  4. 日志文件存放目录
    如果日志文件特别大时,需要预先分配一个拥有更大磁盘空间的目录。

获取Nginx源码及编译安装

在./configure时,指定了openssl、zlib、pcre的路径,这需要根据自己的情况改变参数

cd /usr/local/
wget http://nginx.org/download/nginx-1.8.0.tar.gz
tar -zxvf nginx-1.8.0.tar.gz 
cd nginx-1.8.0/
./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_ssl_module --with-pcre=/usr/local/pcre-8.33 --with-zlib=/usr/local/zlib-1.2.11 --with-openssl=/usr/local/openssl-1.0.1j
ls /usr/local/nginx/
make
make install

测试是否安装成功

上述操作完成后,在nginx根目录执行nginx文件(./nginx)启动nginx服务,启动成功后在浏览器中访问localhost(需保证nginx启动前80端口未被占用)
这里写图片描述

Linux内核参数的优化

由于默认的Linux内核参数考虑的是最通用的场景,实际生产中需要修改Linux内核参数,使得Nginx可以拥有更高的性能。
通过修改/etc/sysctl.conf来更改内核参数。例如,最常用的配置:

# 这个参数表示进程(比如一个worker进程)可以同时打开的最大句柄数,这个参数直接限制最大并发连接数,需根据实际情况配置
fs.file-max = 999999
# 这个参数这是为1,表示允许将TIME-WAIT状态的socket重新用于新的TCP连接,这对服务器来说很有意义,因为服务器上总会有大量TIME-WAIT状态的连接
net.ipv4.tcp_tw_reuse = 1
# 这个参数是当keepalive启用时,TCP发送keepalive消息的频度。默认是2小时,将其设置小一些可以更快地清理无效的连接
net.ipv4.tcp_keepalive_time = 600
# 这个参数表示当服务器主动关闭连接时,socket保持在FIN-WAIT-2状态的最大时间
net.ipv4.tcp_fin_timeout = 30
# 这个参数表示操作系统允许TIME-WAIT套接字数量的最大值,如果超过这个最大值,TIME-WAIT套接字将立刻被清除并打印警告信息。该参数默认为180000,过多的TIME_WAIT套接>字会使Web服务器变慢
net.ipv4.tcp_max_tw_buckets = 5000
# 这个参数定义了在UDP和TCP连接中(不包括连接的远端)端口的取值范围
net.ipv4.ip_local_port_range = 1024     61000
# 这个参数定义了TCP接收缓存(用于TCP接收滑动窗口)的最小值、默认值、最大值
net.ipv4.tcp_rmem = 4096 32768 262142
# 这个参数定义了TCP发送缓存(用于TCP发送滑动窗口)的最小值、默认值、最大值
net.ipv4.tcp_wmem = 4096 32768 262142
# 当网卡接收数据包的速度大于内核处理的速度时,会有一个队列保存这些数据包。这个参数表示该队列的最大值
net.core.netdev_max_backlog = 8096
# 这个参数表示内核套接字接收缓存区默认的大小
net.core.rmem_default = 262144
# 这个参数表示内核套接字发送缓存区默认的大小
net.core.wmem_default = 262144
# 这个参数表示内核套接字接收缓存区最大大小
net.core.rmem_max = 2097152
# 这个参数表示内核套接字发送缓存区最大大小
net.core.wmem_max = 2097152
# 该参数与性能无关,用于解决TCP的SYN攻击
net.ipv4.tcp_syncookies = 1
# 这个参数表示TCP三次握手建立阶段接收SYN请求队列的最大长度,默认为1024,将其设置得大一些可以使出现Nginx繁忙来不及accept新连接的情况时,Linux不至于丢失客户端发
起的连接请求
net.ipv4.tcp_max_syn_backlog = 1024

然后执行sysctl -p命令,使上述修改生效。
注:滑动窗口的大小与套接字缓存区会在一定程度上影响并发连接的数目。每个TCP连接都会为维护TCP滑动窗口而消耗内存,这个窗口会根据服务器的处理速度收缩或扩张。
rmem_default、wmem_default、rmem_max、wmem_max这4个参数的设置需要根据实际业务的特性及成本来综合考虑。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vi_NSN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值