Nginx是什么?
Nginx是由俄罗斯人Igor Sysoev开发的一款开源的,轻量级的Web服务器。
Ngnix功能及特点
Ngnix服务器以其功能丰富著称于世。它既可以作为HTTP服务器,也可以作为反向代理服务器或者邮件服务器能够快速的响应静态页面(HTML)的请求;支持FastCGO、SSL、Virtual Host、URL、Rewrite、HTTP Basic Auth、Gzip等大量功能;并且支持更多的第三方功能模块的扩展。
Nginx提供的的基本功能服务可大致归纳为以下三大类:
-
Nginx提供基本的HTTP服务,可以作为HTTP代理服务器和反向代理服务器,支持通过缓存加速访问,可以王城简单的负载剧本和容错,自持过滤功能,支持SSL等。
-
Nginx提供高级的HTTP服务,可以进行自定义配置,支持虚拟主机,支URL从定向,支持网络监控,自持流媒体传输等。
-
Nginx作为邮件代理服务器是最早开发这个产品的目的之一,它支持IMAP/POP3代理服务器功能,支持内部SMTP代理服务功能。
Ngnix配置文件配置
默认配置文件(已去掉注释部分)
#全局部分
#
worker_processes 1;
#全局部分结束
#events模块
events {
worker_connections 1024;
}
#events模块结束
#http模块
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#sever模块
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
#sever模块结束
}
#http模块结束
全局模块
全局模块是配置文件从开始到events模块之间的内容,主要设置一些影响Ngnix服务器整体运行的配置指令,因此这些指令的作用哦关于是Nginx服务器全局。
通常包括配置运行Nginx服务器的哟过户(组)、允许生成的 worker process 数、Nginx进程PID存放路径、日志的存放路径和类型以及配置文件引入等。
events模块
events模块涉及的指令主要影响Ngnix服务器与用户的网络连接。常用到的设置包括是否开启对多 worker process 下的网络连接进行序列化,是否允许同时几首多个网络连接,选取那种事件驱动模型处理连接请求,每个worker process 可以透光石支持的最大连接数等。
这一部分的指令对Nginx服务器的性能影响较大,在实际配置中应该根据实际情况灵活配置调整。
http模块
http模块是Nginx服务器配置中的重要部分,代理、缓存和日志等绝大多数的功能和第三方模块的配置都可以在这个模块中进行配置。
http模块可以包含自己的全局模块,即http模块中不包括在server模块中的部分,也可以包含server模块,server模块又可以进一步包含location模块。
server模块
server块和“虚拟主机”的概念有密切联系,主要用于配置虚拟主机。包含loaction模块。
loaction模块
每个server模块可以包含多个loaction模块。location模块的主要作用是基于Nginx服务器接收到的请求字符串,对虚拟主机名称(也可以使是IP)之外的字符串进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制功能都是在这部分实现。许多第三方模块的配置也是在location提供功能。
详细配置介绍
配置运行Nginx服务器用户(组)
user user [group];
-
user,指定可以运行Nginx服务器的用户。
-
group,可选项,指定可以运行Nginx服务器的用户组。
配置允许生成的 worker process 数
worker process 是Ngnix 服务器实现并发处理服务的关键所在。从理论上来说 worker process 的值越大,可以支持的并发处理量也越多,但是实际上它还要受到来自软件本身、操作系统本身资源和能力、硬件设备的卓越。
worker_processes number | auto ;
定义MIME-TYPE
MIME Type是网络资源的媒体类型。Ngnix服务器作为Web服务器,必须能够识别前端请求的资源类型。
在默认的配置文件中,可以看见有以下两行配置
include mime.types;
default_type application/octet-stream;
mime.types内容
types {
text/html html htm shtml;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
application/javascript js;
...
image/png png;
image/tiff tif tiff;
image/vnd.wap.wbmp wbmp;
image/x-icon ico;
image/x-jng jng;
image/x-ms-bmp bmp;
image/svg+xml svg svgz;
image/webp webp;
...
audio/mpeg mp3;
audio/ogg ogg;
audio/x-m4a m4a;
audio/x-realaudio ra;
video/3gpp 3gpp 3gp;
video/mp2t ts;
video/mp4 mp4;
video/mpeg mpeg mpg;
video/quicktime mov;
video/webm webm;
video/x-flv flv;
video/x-m4v m4v;
video/x-mng mng;
video/x-ms-asf asx asf;
video/x-ms-wmv wmv;
video/x-msvideo avi;
}
从mime.types中我们可以看到其中定义了一个types结构,结构中包含了浏览器能够势必的MIME类型以及对应类型的文件后缀名。因此types也是一个配置模块。
第二行中default_type配置类用于处理前端请求的MIME类型,语法结构如下:
default_type mime-type;
- mime-type为types中定义的类型,如果不见这条指令,默认值为Text/plain。这条指令可以在http、server、loaction模块中使用。
还有许多配置这里就不一一列举了,如果要深入学习,请查阅《Nginx高性能Web服务器详解》一书第 2.4 节,下面只列举常用的配置。
配置请求根目录
web服务器接受发哦网络请求后,首相要在服务器端指定目录中寻找请求资源,root就是用来配置这个根目录的,语法结构如下:
root path
- path 为Nginx服务器接收到请求后找找资源的根目录路径,path变量可以包含Nginx服务器预设的大多数变量。
该指令可以在loaction、server、http模块中使用。
loaction /data/ {
root /html;
}
注意
/data/index.html请求 会匹配到路径 /html/data/index.html文件,注意路径的拼接规则。
同IP不同端口代理(server配置)
## 域名一
server_name hel.h-five.com;
location / {
proxy_pass http://127.0.0.1:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
## 域名二
server_name icloud.h-five.com;
location / {
proxy_pass http://127.0.0.1:8082;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}