Nginx服务器的强大之处

Nginx服务器的强大之处

什么是Nginx
一款高性能的HTTP服务器软件
反向代理服务器软件
IMAP/POP3/SMTP代理服务器
可以运行在各类操作系统中(UNIX、GNU/Linux、BSD\Mac OS X、Solaris、Microsoft Windows)

为什么要选择Nginx
功能实现上都采用摸块化结构设计
支持通用的语言接口,PHP、Perl、Python等
支持正向代理、反向代理、虚拟主机、URL重写、压缩传输、SSL加密传输等
处理速度快、占用主机内存资源少
Nginx模块都是支持静态编译
Nginx支持epoll、Fcgi
Nginx安装包仅仅只有几百K

选择Nginx的优势
担任WEB服务器角色:
nginx处理静态文件、索引文件、自动索引的效率非常高。

担任代理服务器角色:
Nginx可以实现无缓存的反向代理加速、提高运行速度。

担任负载均衡服务器角色:
Nginx既可以在内部支持Rails和PHP,也可以支持HTTP代理服务器对外进行服务,同时还支持简单的容错和利用算法进行负载均衡

在性能方面,Nginx是专门为性能优化而开发,在实现上非常注重效率,它采用内核Poll模型,可以支持更多的并发连接,最大可以支持对50000个并发连接数的响应,而且只占用很低的内存资源

在稳定性方面,Nginx采取了分阶段资源分配技术,使得CPU与内存的占用率非常低
Nginx官方表示,Nginx保持10000个没有活动的连接,而这些连接只占用2.5MB内存,因此,类似DOS这样的攻击对Nginx来说基本上是没有任何作用

在高可用性方面,Nginx支持热部署,启动速度特别迅速,因此可以在不间断服务的情况下,对软甲按版本或者配置进行升级,即使运行数月也无需重新启动,几乎可以做到7X24小时不间断地运行。

Nginx的配置:个人选用编译安装方式

第一步:
确保系统已经安装gcc、gcc-c++、openssl-devel、pcre-devel、zlib-devel
我们可以使用光盘自带的安装包,进行yum安装、不过事先需要配置好系统yum源,以下我以前已经安装,所以有以下提示:
[root@frp ~]# yum -y install gcc
已加载插件:langpacks, product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
yum | 4.1 kB 00:00
软件包 gcc-4.8.5-16.el7.x86_64 已安装并且是最新版本
无须任何处理
[root@frp ~]# yum -y install gcc-c++
已加载插件:langpacks, product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
软件包 gcc-c+±4.8.5-16.el7.x86_64 已安装并且是最新版本
无须任何处理
[root@frp ~]# yum -y install openssl-devel
已加载插件:langpacks, product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
软件包 1:openssl-devel-1.0.2k-8.el7.x86_64 已安装并且是最新版本
无须任何处理
[root@frp ~]# yum -y install zlib-devel
已加载插件:langpacks, product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
软件包 zlib-devel-1.2.7-17.el7.x86_64 已安装并且是最新版本
无须任何处理
[root@frp ~]# yum -y install pcre-devel
已加载插件:langpacks, product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
软件包 pcre-devel-8.32-17.el7.x86_64 已安装并且是最新版本
无须任何处理

温馨提示:安装pcre-devel包目的是为了使Nginx支持HTTP Rewrite模块

第二步:
下载Nginx包:一定要确保系统已经连接网络、安装系统自带的wget下载器

或者:官网进行手动安装
官网地址:http://nginx.org/download/
根据业务需求下载版本:本次演示版本nginx-1.14.2.tar.gz

[root@frp ~]# yum -y install wget
已加载插件:langpacks, product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
软件包 wget-1.14-15.el7.x86_64 已安装并且是最新版本
无须任何处理
[root@frp ~]# wget http://nginx.org/download/nginx-1.14.2.tar.gz

第三步:
解压安装包:
tar -xf nginx-1.14.2.tar.gz

进入nginx主目录:
cd nginx-1.14.2

开始编译安装:
[root@frp nginx-1.14.2]# ./configure --prefix=/usr/local --with-http_stub_status_module
提示:–prefix= 表示编译安装到那个目录下面
–with-http_stub_status_module 安装的模块以监控Nginx的当前的状态

进行到这一步安装无报错基本配置已经完成了:
[root@frp nginx-1.14.2]# make && make install

调试Nginx

Nginx安装完毕,会产生响应的的安装目录,根据前面的安装路径,Nginx的配置文件路径为/usr/local/nginx/为nginx的主目录

主目录下conf目录中nginx.conf为Nginx的主配置文件

nginx.conf主配置文件中主要分为4个部分:
main (全局设置)
server (主机设置)
upstream (负载均衡服务器设置)
location (URL匹配特定位置的设置)

在这里插入图片描述
main部分设置的指令将影响其它所有设置
server部分的指令主要用于指定主机和端口
upstream指令主要用于负载均衡,设置一系列的后端服务器
location部分用于匹配网页位置

server 继承main
location 继承server
upstream 即不会继承其它设置也不会被继承

Nginx全局属性配置,代码展示:

user nobody nobody;
worker_processes 4;
error_log logs/error.log notice;
pid logs/nginx.pid;
worker_rlimit_nofile 65535;
events{
			use epoll;
			worker_connections  65536;
}

以上代码配置含义:
user是个主模块指令,指定Nginx Worker进程运行用户以及用户组,
默认nobody账号运行。

worker_processes是个主模块指令,指定了Nginx要开启的进程数。
每个Nginx进程平均耗费10MB~12MB内存。
根据经验,一般指定一个进程足够了,如果是多核CPU,建议指定和CPU的数量一样多的进程数即可。

error_log是个主模块指令,用来定义全局错误日志文件。
日志输出级别有debug、info、notice、warn、error、crit可供选择。
其中,debug输出日志最为详细,而crit输出日志最少。

pid是个主模块指令,用来指定进程id的存储文件位置。

worker_rlimit_nofile 用于绑定worker进程和CPU,Linux内核2.4以上可用。

events指令用来设定Nginx的工作模式及连接数上限。

use是个事件模块指令,用来指定Nginx的工作模式。
Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。
其中select和poll 都是标准的工作模式,
kqueue和epoll是高效的工作模式,
不同的是epoll用在Linux平台上,
kqueue用在BSD系统中。
Linux系统中,epoll工作模式是首选。

worker_connections也是个事件模块指令,用于定义Nginx每个进程的最大连接数,
默认是1024.

最大客户端连接数由worker_processes和worker_connections决定,
即max_client=worker_processesworker_connections,
在作为反向代理时,变为
max_clients=worker_processes
worker_connections/4.

进程的最大连接数受Linux系统进程的最大打开文件数限制,在执行操作系统命令:
ulimit -n 65536 后worker_connections的设置才能生效。

Nginx中HTTP服务器配置
Nginx相关配置代码如下:

http{
include				conf/mime.type;
default_type	application/octet-stream;
log_format	main	' $remote_addr - $remote_user	[$time_local] '
' "%request" $status $bytes_sent '
' "$http_referer" "$http_user_agent" '
' "$gzip_ratio" ';
log_format doload ' $remote_addr - $remote_user [$time_local] '
' "$request" $status $bytes_sent '
' "$http_referer"' "$http_user_agent" '
' "$http_range" "$sent_http_connent_range" ';
client_max_body_size 20m;
client_header_buffer_size	32k;
large_client_header_buffers	4	32k;
sendfile	on;
tcp_nopush	on;
tcp_nodelay		on;
keepalive_timeout	60;
client_header_timeout		10;
client_body_timeout		10;
send_timeout					10;
}

以上代码解释:
include是个主模块指令,实现对配置文件所包含的文件设定,可减少著配置文件的复杂度。类似于Apache中的include方法。

default_type属于HTTP核心模块指令,这里设定默认类型为二进制流,也就是当文件类型未定义时使用这种方式,
例如,在没有配置PHP环境时,Nginx是不予解析的,此时,用浏览器访问PHP文件就会出现下载窗口。

client_max_body_size 用来设置允许客户端请求的最大的单个文件字节数。

client_header_buffer_size用于指定客户端 请求头的headerbuffer大小。
对于大多数请求,1KB的缓冲区大小已经足够,如果自定义消息头或有更大的cookies,可增加缓冲区大小,这里设置为32KB.

large_client_header_buffers用来指定客户端请求中较大的消息头的缓存最大数量和大小,"4"为个数,“128K”为大小,最大缓存为4个128KB.

sendfile参数用于开启高效文件传输模式,将tcp_nopush和tcp_nodely两个指令设置为on,用于防止网络阻塞。

keepalive_timeout用于设置客户端连接保持活动的超时时间 ,在超过这个时间之后,服务器会关闭该连接。

client_header_timeout用于设置客户端请求头读取超时时间,如果超过这个时间,客户端还没有发送任何数据,Nginx将返回 "Request time out (408)"错误 。

client_body_timeout用于设置客户端请求主体读取超时时间,默认值为60,如果超过这个时间,客户端还没有发送任何数据,Nginx将返回 “Request time out(408)”错误。

send_timeout用于指定响应客户端的超时时间。这个超时仅限于两个连接活动之间 的时间,如果超过这个时间,客户端没有任何活动,Nginx将会自动关闭连接。

下面的代码实现对日志格式的设定:

log_format	main	' $remote_addr - $remote_user	[$time_local] '
' "%request" $status $bytes_sent '
' "$http_referer" "$http_user_agent" '
' "$gzip_ratio" ';
log_format doload ' $remote_addr - $remote_user [$time_local] '
' "$request" $status $bytes_sent '
' "$http_referer"' "$http_user_agent" '
' "$http_range" "$sent_http_connent_range" ';

log_format是Nginx的HttpLog模块指令,用于指定nginx日志的输出格式。
main为此日志输出格式的名称,可以在下面的access_log指令中引用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值