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...)