Nginx ("engine x") 是一个高性能HTTP和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。
其特点是占有内存少,并发能力强,能够支持高达50000个并发连接响应。这归功于它选择了epoll and kqueue作为开发模型(socket数量不限制)(Apache采用的select开发模型)。它处理请求是异步非阻塞,在高并发下保持低资源低消耗高性能。非常稳定,bug极少。Apache使用处理每个连接都需要一个进程,其并发性能不是很好。而Nginx使用多路复用的技术,让一个进程处理多个连接,所以并发性能比较好。可以说构建大型网站无一例外都是使用nginx,如:新浪、网易、腾讯、京东、淘宝等。
(1)Nginx是一个高性能的HTTP和方向代理服务器
(2)采用C语言编写
(3)支持的操作系统众多,windows、linux、MacOS X
(4)安全性高,外界只能访问nginx所在服务器,nginx将请求转发内部服务器。调用后,返回调用的结果
(5)可实现负载均衡
(6)Rewrite功能强大
电商、互联网架构大部分都采用Nginx+Tomcat的架构。
官网下载地址:http://nginx.org/en/download.html
中文文档路径:http://www.nginx.cn/doc/
conf/nginx.conf
系统配置:server,可以配置多个server
转发规则:location路径、root目录、index欢迎页面
反向代理规则:location拦截路径、proxy_pass转向地址、index
我写了3个bat脚本,方便一键操作。
启动: start nginx.exe (不能双击,双击后进程无法关掉)
停止: nginx.exe –s stop
重新加载:nginx.exe –s reload
验证安装是否成功: nginx.exe –t
user root;
#对应系统哪个用户,最好专为nginx创建用户和组,并单独设置权限,这样安全。如:user nginx nginx。
worker_processes 1;
#定义了nginx对外提供web服务时的worker进程数,习惯配置和当前服务器的core数(CPU内核数)相同,或者2倍。
worker_connections 1024;
#设置可由一个worker进程同时打开的最大连接数。开启数为实际数量的1/4,浏览器访问时会自动发起2个;反向代理tomcat又是两个。这个数值和操作系统能打开的文件数。理论上并发数=worker_processes * worker_connections。跟物理内存大小也有关系,因为系统打开的文件数和系统的内存成正比。一般1GB内存可也打开大约10W左右。
worker_rlimit_nofile 65535;
#定义了一个nginx进程打开最多的文件数目,配置和Linux下文件打开个数一致。ulimit–n来查看,最大设置为65535。设置为“auto”将尝试自动检测它。
keepalive_timeout 10;
# 给客户端分配keep-alive链接超时时间,服务器将在这个超时时间过后关闭链接。我们将它设置低些可以让ngnix持续工作的时间更长。一般设置65左右。
open_file_cache max=100000 inactive=20s;
#打开缓存的同时也指定了缓存最大数目,以及缓存的时间。我们可以设置一个相对高的最大时间,这样我们可以在它们不活动超过20秒后清除掉。
gzip on;
#告诉nginx采用gzip压缩的形式发送数据,这将会减少我们发送的数据量。
gzip_comp_level 4;
#设置数据的压缩等级。这个等级可以是1-9之间的任意数值,9是最慢但是压缩比最大的。通常设置为3-5,太高会占用CPU。
events { use epoll; }
#设置用于复用客户端线程的轮询方法。Linux推荐使用epoll模型。
access_log off;
#access_log 设置nginx是否将存储访问日志。关闭这个选项可以让读取磁盘IO操作更快(aka,YOLO)。
error_log /var/log/nginx/error.log crit;
#error_log 告诉nginx只能记录严重的错误,Error日志优化,运行期间设置crit,可以减少I/O。
和日常我们上网不同,在公司我们上网时,不是所有电脑直接访问外网,而是访问一个代理服务器,由代理服务器再访问我们要访问的网站,代理服务器获得访问网站的返回信息后,再返回给我们。这种代理我们的电脑的方式叫做正向代理。
而nginx不同,它实现也是代理,但是代理的后台服务器,我们访问nginx,而nginx代理后面的服务器,由它去决定具体访问哪台服务器。这种方式和正向代理刚好反过来,所以把这种方式称作反向代理。
反向代理的好处,它屏蔽了后台具体的服务器,我们访问者根本不知道访问的哪台服务器,这样使访问更加安全。
通过前置机(也叫踏板机)将内网和外网隔离,用户只能访问前置机,其他的机器是无法直接访问内网中其他服务器资源,必须通过前置机中转,请求重定向才可以。这样保证了网络的安全。
首先通过一个nginx进行转发到2个nginx上,然后再通过nginx进行负载到多个tomcat集群上。这样的结构优点是,防止单个节点压力过重。
也可以实现keepalive和HAProxy+nginx集群,实现nginx高可用。
当用户访问 http://localhost:80,nginx 将这个请求什么也不做,只负责转发到 tomcat 的访问地址 http://localhost:8080。
server {
listen 80;
server_name localhost;
location / { #拦截所有的资源
proxy_pass http://127.0.0.1:8080; #转向tomcat的地址
}
}
静态资源:图片、css、js、html(静态资源处理时并发非常高)
动态资源:asp/aspx、php、jsp
nginx默认配置:
location / {
#相对路径,配置了一个html目录,我们可以将网站所用到的所有的静态资源从war中移除,放到这个目录下
root html;
#配置的欢迎页面
index index.html index.htm;
}
传统将项目是把资源一起放到war中,而动静分离是把静态资源从war中剥离出来,单独放在一个目录中。
这样当访问静态资源时,就由nginx直接重定向文件资源。当访问动态资源就由tomcat解析。nginx解析静态比tomcat快很多。
接着上面的例子,首先在C盘目录下找到hosts文件,C:\Windows\System32\drivers\etc\hosts,配置指向路径:
127.0.0.1 www.aaa.com
127.0.0.1 bbb.aaa.com
127.0.0.1 ccc.aaa.com
然后在nginx配置不同服务器:(例如图片服务器)
server {
listen 80;
server_name bbb.aaa.com; #域名地址,修改hosts文件做一个配置 bbb.aaa.com 127.0.0.1
location / {
root d:\\images; #图片文件所在目录,按日期来分目录:yyyy/mm/dd/uuid.jpg 或者当前时间的毫秒数+随机值.jpg
}
}
目录:D:\images\2017\09\08\222.jpg
访问:http://bbb.aaa.com/images/2017/09/08/222.jpg
Nginx是一个web服务器和方向代理服务器,用于HTTP、HTTPS、SMTP、POP3和IMAP协议。
Nginx服务器的特性包括:
(1)反向代理/L7负载均衡器
(2)嵌入式Perl解释器
(3)动态二进制升级
(4)可用于重新编写URL,具有非常好的PCRE支持
(1)nginx是轻量级的。同样起web 服务,比apache 占用更少的内存及资源。
(2)nginx抗并发能力强。nginx 处理请求是异步非阻塞的,在高并发下nginx 能保持低资源低消耗,而apache 则是阻塞型的。
(3)nginx是高性能高度模块化的设计,编写模块相对简单,而apache 的功能模块编写较复杂。
由于没有用过apache,只能百度总结下不同点,网上普遍说法是nginx 适合做静态,简单,效率高,而apache 适合做动态,稳定,功能强。
Server {
listen 80;
server_name "" ;
return 444;
}