nginx简介(参考百度)

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:)开发的,第一个公开版本0.1.0公布于2004年10月4日。

其将源代码以类BSD许可证的模式公布,因它的稳定性、丰盛的功能集、示例配置文件和低系统资源的耗费而闻名。2011年6月1日,nginx 1.0.4公布。

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协定下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中体现较好,中国大陆应用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝
等。

nginx装置

  • 1.装置编译工具及库文件
yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel
  • 2.装置 PCRE
cd /usr/local/src/wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
  • 3.装置Nginx
cd /usr/local/src/wget http://nginx.org/download/nginx-1.6.2.tar.gz

参考(https://www.runoob.com/linux/...)

nginx根本构造

高度模块化的设计是 Nginx 的架构根底。Nginx 服务器被合成为多个模块,每个模块就是一个功能模块,只负责本身的性能,模块之间严格遵循“高内聚,低耦合”的准则

  • 外围模块

外围模块是 Nginx 服务器失常运行必不可少的模块,提供谬误日志记录、配置文件解析、事件驱动机制、过程治理等外围性能。

  • 规范 HTTP 模块

规范 HTTP 模块提供 HTTP 协定解析相干的性能,如:端口配置、网页编码设置、HTTP 响应头设置等。

  • 可选 HTTP 模块

可选 HTTP 模块次要用于扩大规范的 HTTP 性能,让 Nginx 能解决一些非凡的服务,如:Flash 多媒体传输、解析 GeoIP 申请、SSL 反对等。

  • 邮件服务模块

邮件服务模块次要用于反对 Nginx 的邮件服务,包含对 POP3 协定、IMAP 协定和 SMTP 协定的反对。

  • 第三方模块

第三方模块是为了扩大 Nginx 服务器利用,实现开发者自定义性能,如:Json 反对、Lua 反对等。
参考(https://www.sohu.com/a/230364...)

nginx基本功能

  • web服务器、反向代理服务器
  • 负载平衡
  • 动静拆散

nginx长处

  • 1.能够高并发连贯

官网测试Nginx可能撑持5万并发连贯,理论生产环境中能够撑持2~4万并发连接数。

起因,次要是Nginx应用了最新的epoll(Linux2.6内核)和kqueue(freeBSD)网路I/O模型,而Apache应用的是传统的Select模型,其比较稳定的Prefork模式为多过程模式,须要常常派生子过程,所以耗费的CPU等服务器资源,要比Nginx高很多。
  • 2.内存耗费少

Nginx+PHP(FastCGI)服务器,在3万并发连贯下,开启10个Nginx过程耗费150MB内存,15MB*10=150MB,开启的64个PHP-CGI过程耗费1280内存,20MB*64=1280MB,加上零碎本身耗费的内存,总共耗费不到2GB的内存。

如果服务器的内存比拟小,齐全能够只开启25个PHP-CGI过程,这样PHP-CGI耗费的总内存数才500MB。

+3.老本低廉
购买F5BIG-IP、NetScaler等硬件负载平衡交换机,须要十多万到几十万人民币,而Nginx为开源软件,采纳的是2-clause BSD-like协定,能够收费试用,并且可用于商业用途。

BSD开源协定是一个给使用者很大自在的协定,协定指出能够自在应用、批改源代码、也能够将批改后的代码作为开源或专用软件再公布。
  • 4.配置文件非常简单

网络和程序一样通俗易懂,即便,非专用系统管理员也能看懂。

  • 5.反对Rewrite重写

可能依据域名、URL的不同,将http申请分到不同的后端服务器群组。

  • 6.内置的健康检查性能

如果NginxProxy后端的某台Web服务器宕机了,不会影响前端的拜访。

  • 7.节俭带宽

反对GZIP压缩,能够增加浏览器本地缓存的Header头。

  • 8.稳定性高

用于反向代理,宕机的概率微不足道。

  • 9.反对热部署

Nginx反对热部署,它的主动特地容易,并且,简直能够7天*24小时不间断的运行,即便,运行数个月也不须要重新启动,还可能在不间断服务的状况下,对软件版本进行降级。

nginx毛病

  • 1.动静解决差:nginx解决动态文件好,消耗内存少,然而解决动静页面则很鸡肋,当初个别前端用nginx作为反向代理抗住压力,apache作为后端解决动静申请。
  • 2.rewrite弱:尽管nginx反对rewrite性能,然而相比于Apache来说,Apache比nginx 的rewrite 弱小。
  • 3.Nginx仅能反对http、https和Email协定,这样就在适用范围下面小些,这个是它的毛病
  • 4.对后端服务器的健康检查,只反对通过端口来检测,不反对通过url来检测不反对Session的间接放弃,但能通过ip_hash来解决

nginx配置

  • 全局
#Nginx的worker过程运行用户以及用户组#user  nobody nobody;#Nginx开启的过程数worker_processes  1;#worker_processes auto;#以下参数指定了哪个cpu调配给哪个过程,一般来说不必非凡指定。如果肯定要设的话,用0和1指定调配形式.#这样设就是给1-4个过程调配独自的核来运行,呈现第5个过程是就是随机调配了。eg:#worker_processes 4     #4核CPU #worker_cpu_affinity 0001 0010 0100 1000;nets    #定义全局谬误日志定义类型,[debug|info|notice|warn|crit]#error_log  logs/error.log  info;#指定过程ID存储文件地位#pid        logs/nginx.pid;#一个nginx过程关上的最多文件描述符数目,理论值应该是最多关上文件数(ulimit -n)与nginx过程数相除,然而nginx调配申请并不是那么平均,所以最好与ulimit -n的值保持一致。#vim /etc/security/limits.conf#  *                soft    nproc          65535#  *                hard    nproc          65535#  *                soft    nofile         65535#  *                hard    nofile         65535worker_rlimit_nofile 65535;
  • events 事件配置
events {    #use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD下面,就用kqueue模型。    use epoll;    #每个过程能够解决的最大连接数,实践上每台nginx服务器的最大连接数为worker_processes*worker_connections。理论值:worker_rlimit_nofile/worker_processes    #留神:最大客户数也由零碎的可用socket连接数限度(~ 64K),所以设置不切实际的高没什么益处    worker_connections  65535;        #worker工作形式:串行(肯定水平升高负载,但服务器吞吐量大时,敞开应用并行形式)    #multi_accept on; }
  • http参数
   #文件扩展名与文件类型映射表    include mime.types;    #默认文件类型    default_type application/octet-stream; #日志相干定义    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '    #                  '$status $body_bytes_sent "$http_referer" '    #                  '"$http_user_agent" "$http_x_forwarded_for"';    #定义日志的格局。前面定义要输入的内容。    #1.$remote_addr 与$http_x_forwarded_for 用以记录客户端的ip地址;    #2.$remote_user :用来记录客户端用户名称;    #3.$time_local :用来记录拜访工夫与时区;    #4.$request  :用来记录申请的url与http协定;    #5.$status :用来记录申请状态;     #6.$body_bytes_sent :记录发送给客户端文件主体内容大小;    #7.$http_referer :用来记录从那个页面链接拜访过去的;    #8.$http_user_agent :记录客户端浏览器的相干信息    #连贯日志的门路,指定的日志格局放在最初。    #access_log  logs/access.log  main;    #只记录更为严重的谬误日志,缩小IO压力    error_log logs/error.log crit;    #敞开日志    #access_log  off;     #默认编码    #charset utf-8;    #服务器名字的hash表大小    server_names_hash_bucket_size 128;    #客户端申请单个文件的最大字节数    client_max_body_size 8m;    #指定来自客户端申请头的hearerbuffer大小    client_header_buffer_size 32k;    #指定客户端申请中较大的音讯头的缓存最大数量和大小。    large_client_header_buffers 4 64k;    #开启高效传输模式。    sendfile on;    #防止网络阻塞    tcp_nopush on;    tcp_nodelay on;        #客户端连贯超时工夫,单位是秒    keepalive_timeout 60;    #客户端申请头读取超时工夫    client_header_timeout 10;    #设置客户端申请主体读取超时工夫    client_body_timeout 10;    #响应客户端超时工夫    send_timeout 10; #FastCGI相干参数是为了改善网站的性能:缩小资源占用,进步访问速度。    fastcgi_connect_timeout 300;    fastcgi_send_timeout 300;    fastcgi_read_timeout 300;    fastcgi_buffer_size 64k;    fastcgi_buffers 4 64k;    fastcgi_busy_buffers_size 128k;    fastcgi_temp_file_write_size 128k; #gzip模块设置    #开启gzip压缩输入    gzip on;     #最小压缩文件大小    gzip_min_length 1k;     #压缩缓冲区    gzip_buffers 4 16k;    #压缩版本(默认1.1,前端如果是squid2.5请应用1.0)    gzip_http_version 1.0;    #压缩等级 1-9 等级越高,压缩成果越好,节约宽带,但CPU耗费大    gzip_comp_level 2;    #压缩类型,默认就曾经蕴含text/html,所以上面就不必再写了,写上去也不会有问题,然而会有一个warn。    gzip_types text/plain application/x-javascript text/css application/xml;    #前端缓存服务器缓存通过压缩的页面    gzip_vary on;
  • server(虚拟主机根底设置)
#虚拟主机定义    server {        #监听端口        listen       80;        #拜访域名        server_name  localhost;        #编码格局,若网页格局与此不同,将被主动转码        #charset koi8-r;        #虚拟主机拜访日志定义        #access_log  logs/host.access.log  main;        #对URL进行匹配        location / {            #拜访门路,可绝对也可绝对路径            root   html;            #首页文件。以下按程序匹配            index  index.html index.htm;        } 
  • 负载平衡
#负载平衡服务器池upstream my_server_pool {    #调度算法    #1.轮循(默认)(weight轮循权值)    #2.ip_hash:依据每个申请拜访IP的hash后果调配。(会话放弃)    #3.fair:依据后端服务器响应工夫最短申请。(upstream_fair模块)    #4.url_hash:依据拜访的url的hash后果调配。(需hash软件包)    #参数:    #down:示意不参加负载平衡    #backup:备份服务器    #max_fails:容许最大申请谬误次数    #fail_timeout:申请失败后暂停服务工夫。    server 192.168.1.109:80 weight=1 max_fails=2 fail_timeout=30;    server 192.168.1.108:80 weight=2 max_fails=2 fail_timeout=30;}#负载平衡调用server {    ...    location / {    proxy_pass http://my_server_pool;    }}
  • location定位
#依据不同的浏览器URL重写if($http_user_agent ~ Firefox){rewrite ^(.*)$  /firefox/$1 break; }if($http_user_agent ~ MSIE){rewrite ^(.*)$  /msie/$1 break; } #实现域名跳转location / {    rewrite ^/(.*)$ https://web8.example.com$1 permanent;}
  • IP限度
#限度IP拜访location / {    deny 192.168.0.2;    allow 192.168.0.0/24;    allow 192.168.1.1;    deny all;}

nginx内置变量


nginx常用命令

  • 启动进入sbin ./nginx
  • 查看ngix语法测试是否通过 ./nginx -t
  • 重启 ./nginx -s reload
  • 查看nginx是否启动 ps -ef | grep nginx
  • 敞开nginx ./nginx -s stop
  • 关联配置 ./nginx -c xx.conf

nginx注意事项

1.Nginx在上传文件时呈现413 Request Entity Too Large,怎么办?
因为Nginx默认反对上传1MB的文件,所以超过1MB则会报错。#nginx上传文件大小限度配置语法  Syntax: client\_max\_body\_size size;  Default: client\_max\_body\_size 1m;  Context: http, server, location  容许该server能反对上传200m的文件,也能够其配置放入http层,所有server都失效。  server {  ...   client\_max\_body\_size 200m;  ...  }
2.Nginx指定门路时,root与alias区别在哪?

root与alias门路匹配次要区别在于nginx如何解释location前面的uri,这会使两者别离以不同的形式将申请映射到服务器文件上,alias是一个目录别名的定义,root则是最上层目录的定义。

root的处理结果是:root门路+location门路
alias的处理结果是:应用alias门路替换location门路

1.root门路配置实例: 用户拜访www.xuliangwei.com/image/test.gif,实际上Nginx会上/code/image/目录下找去找test.gif文件server {   listen 80;   server\_name www.xuliangwei.com;   location /image/ {   root /code;   }  }
3.400 bad request

个别起因:申请的Header过大。 解决办法:配置nginx.conf相干设置

`client_header_buffer_size 16k;``large_client_header_buffers 4 64k;`
4.403 forbiden
个别是拜访文件权限不够

5.413 Request Entity Too Large

个别起因:个别呈现在上传文件。 解决办法:配置nginx.conf相干设置,配置php.ini如下(必须和nginx.conf配置统一)

client_max_body_size 10m;post_max_size=10Mupload_max_filesize=2M 499 Client Closed Request

个别起因:客户端在为等到服务器相应返回前就敞开了客户端描述符。个别呈现在客户端设置超时后,被动敞开socket.

解决办法:依据理论Nginx后端服务器的解决工夫批改客户端超时工夫。

 > 6.500 Internal Server Rrror

个别起因:脚本谬误,(php语法错误、lua语法错误)

拜访量过大,系统资源限度,不能关上过多文件
磁盘空间有余。(access log开启可能导致磁盘满溢 敞开)

 > 7.502 Bad Gateway、503 Serveice Unavailable

个别起因:后端服务无奈解决,业务中断。
解决办法:从后端日志获取谬误起因,解决后端服务器问题。

 > 8.504 Gateway Timeout

个别起因:后端服务器在超时工夫内,未响应Nginx代理申请
解决办法:依据后端服务器理论解决状况,调正后端申请超时工夫。
proxy_read_timeout 90;
proxy_send_timeout 90;

参考(https://www.cnblogs.com/johnn...)
参考(https://blog.csdn.net/lzghxjt...)