nginx是什么

作者: 问题_解决_分享_讨论_最优 | 来源:发表于2019-11-15 22:33 被阅读0次

一、Nginx是什么?

Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。是一个开源的项目。后来淘宝在Nginx基础上针对大访问量做出了修改,做出了Tengine。

二、Nginx哪里好

​ 1、占有内存少,并发能力强,Nginx的并发能力在同类型的网页服务器中表现较好。

​ 2、Nginx相较于Apache\lighttpd具有占有内存少

​ 3、稳定性高等优势,并且依靠并发能力强

​ 4、有丰富的模块库以及友好灵活的配置

​ 5、支持热部署。即可以在7×24小时不间断服务的前提下,升级Nginx的可执行文件。当然,它也支持不停止服务就更新配置项、更换日志文件等功能。

​ 6、可以做反向代理,并且可以支持七层负载均衡

三、Nginx 为什么好?

Nginx为什么比apache快?

虽然Nginx与Apache都用到了多路复用IO模式,但是两个不同的是,Nginx用的是epoll,而Apache用的是select。(select具有O(n)的无差别轮询复杂度,同时处理的流越多,无差别轮询时间就越长;不同于忙轮询和无差别轮询,epoll会把哪个流发生了怎样的I/O事件通知我们。时间复杂度是O(1)。举个通俗易懂的例子:

​ 同是在很乱的抽屉找东西,select版本是一个一个找。而epoll版本是先收拾好分类,以后找就很快可以找到了。如果要找10000次东西,就效率很明白了。)二者最核心的区别在于 Apache 是同步多进程模型,一个连接对应一个进程;Nginx 是异步的,多个连接(万级别)可以对应一个进程 。

Nginx 并发性比较好,CPU 内存占用低

Nginx配置文件简单,支持正则。而且可以用-t验证配置文件是否正确。

Nginx社区比较活跃。各种高性能模块出品快。

但是也有他的缺点:

对动态请求支持不好

Rewrite功能不如Apache

模块不如Apache多

Bug较Apache多

Nginx 使用的情景?

1、Nginx适用于高并发的情况。但是在并发不高的时候,Nginx的性能并不能体现出来

2、Nginx可以做代理服务器。

说到代理。可以引申出正向和反向代理。

​ 正向代理,架设在客户机与目标主机之间,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。我们平时用的VPN就是一个典型的正向代理。

如下图:

​ 反向代理服务器架设在服务器端,通过缓冲经常被请求的页面来缓解服务器的工作量,将客户机请求转发给内部网络上的目标服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器与目标主机一起对外表现为一个服务器。

如下图:

反向代理可以防止外网对内网服务器的攻击、缓存、减少服务器压力以及负载均衡。

3、Nginx可以做负载均衡器

负载均衡器就是图中的Nginx1,通过反向代理,以及一些均衡算法。把client分发给不同的web server。

四、Nginx 如何配置?

默认的配置文件在/etc/nginx。叫nginx.conf或者是在conf.d下。

日志文件的配置

默认格式

  log_format  main  '$remote_addr - $remote_user [$time_local]          "$request" '

                      '$status $body_bytes_sent "$http_referer" '

                      '"$http_user_agent" "$http_x_forwarded_for"';

默认存放位置

    access_log  /var/log/nginx/access.log  main;

错误日志

默认:

error_log /var/log/nginx/error.log;

nginx的error_log类型如下(从左到右:debug最详细 crit最少):

[ debug | info | notice | warn | error | crit ]

例如:error_log logs/nginx_error.log  crit;

字段说明

字段名称         含义

remoteaddr     表示客户端IP地址。

remote_user   表示客户端用户名称。

request           表示请求的URL和HTTP协议。

status             表示请求状态。

bodybytessent   表示发送给客户端的字节数,不包括响应头的大小;该变量与Apache模块modlogconfig里的bytes_sent发送给客户端的总字节数相同。

connection      表示连接的序列号。

connection_requests 表示当前通过一个连接获得的请求数量。

msec            表示日志写入的时间。单位为秒,精度是毫秒。

pipe            表示请求是否通过HTTP流水线(pipelined)发送。通过HTTP流水线发送则pipe值为“p”,否则为“.”。

httpreferer   表示从哪个页面链接访问过来的。

“http_user_agent” 表示客户端浏览器相关信息,前后必须加上双引号。

requestlength 表示请求的长度。包括请求行,请求头和请求正文。

request_time 表示请求处理时间,单位为秒,精度为毫秒。从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。

[$time_local] 表示通用日志格式下的本地时间,前后必须加上中括号

配置工作进程数目

worker_processes 4;

工作进程:数目。根据硬件调整,通常等于CPU数量或者2倍于CPU。

配置keepalive超时时间

keepalive_timeout 60;

配置负载均衡

location ~* \.(mp3|mp4)$ {

对以“mp3或mp4”结尾的地址进行负载均衡

proxy_pass http://img_relay$request_uri;

设置被代理服务器的端口或套接字,以及URL

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

以上三行,目的是将代理服务器收到的用户的信息传到真实服务器上

}

负载均衡的几种分配方式:

轮询(默认)、weight、ip_hash、url_hash等

轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

weight:

upstream bakend {

server 192.168.0.14 weight=10;

server 192.168.0.15 weight=10;

}

ip_hash:

upstream bakend {

ip_hash;

server 192.168.0.14:88;

server 192.168.0.15:80;

}

url_hash:

upstream backend {

server squid1:3128;

server squid2:3128;

hash $request_uri;

hash_method crc32;

}


打个广告,本人博客地址是:风吟个人博客

相关文章

  • 2020-03-21 Nginx介绍

    1. Nginx介绍 1.1 Nginx是什么 Nginx与Apache软件类似,Nginx(“engine x”...

  • nginx基础

    第一章 Nginx介绍 Nginx是什么? 我们为什么选择 Nginx 服务 Nginx重要特性 Nginx应用场...

  • nginx 总结

    nginx Fundamentals: High Performance Servers nginx 是什么就不必...

  • 2019-03-19 (转的别人的文章)

    Nginx 相关介绍(Nginx是什么?能干嘛?) Nginx的产生 没有听过Nginx?那么一定听过它的"同行"...

  • iOS直播技术学习笔记-iOS中实现推流(八)

    推流演示 搭建本地服务器 安装Nginx Nginx介绍Nginx是什么? * 简言之,Nginx本身是一个非...

  • Nginx入门

    1. Nginx的安装与启动1.1 为什么需要Nginx?1.2 Ngxin是什么?1.3 Nginx在Linux...

  • Nginx

    一、Nginx简介 1. Nginx是什么? ? Nginx (engine x) 是一个高性能的HTTP[htt...

  • Nginx必备知识

      Nginx那么神,我想去看看,走起~ Nginx 是什么?   Nginx (engine x) 是一款由俄罗...

  • Mac 下初探nginx

    首先,nginx是什么? 然后,nginx的作用? Mac下如何使用nginx? 1.打开终端执行 安装好后的主要...

  • nginx知识介绍

    1.nginx基本介绍 2.nginx是什么,可以干什么 3.nginx 安装,常用命令和配置文件 4.nginx...

网友评论

    本文标题:nginx是什么

    本文链接:https://www.haomeiwen.com/subject/vlleictx.html