Nginx详解
一、为啥需要 nginx?
nginx 是一个 web 服务器,能做反向代理、负载均衡这些功能; 另外一个原因就是 nginx 免费呀。
二、什么是正方向代理?
正向代理,就是需要一个服务给你代理你才能访问上目标服务器,像是 vpn。 反向代理,就是你没有感觉,你访问目标服务器,但是你不知道目标服务器具体是走的那个地址的服务。
三、Nginx 配置文件详解
nginx 的配置文件一般都是在/etc/nginx/nginx.conf 里面,mac 的话是放到/usr/local/etc/nginx/nginx.conf 里面。
nginx 里面#代表注释。
1、全局块
work_process 1;
从配置文件开始到 events 块之间的内容,主要设置一些影响 nginx 服务器整体运行的配置指令,主要包括:配置运行 nginx 服务器的用户(组)、允许生成的 worker process 数、进程 PID 存放路径、日志存放路径和类型以及配置文件的引入等。 上面配置 worker_processes,这是 nginx 服务器并发处理服务的关键配置,该值越大,可以支持的并发处理量就越多,但是会受硬件制约。
2、event 块
events{
worker_connections 1024;
}
event 块设计的指令主要影响 nginx 服务器与用户的网络连接,常用的设置包括:是否开启多个 work process 下的网络连接进行序列化,是否运行同时接受多个网络连接,选取那种驱动模型来处理连接请求,每个 work process 可以同时支持的最大连接数等。 上面设置 worker_processes 支持的最大连接数为 1024。
http 块
http{
include ..;
server{
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 /50x.html;
location = /50x.html {
root html;
}
}
}
这部分是 nginx 服务器配置中最频繁的部分,代理缓存和日志定义等绝多数功能和第三方模块的配置都在这里。需要注意的是:http 块也可以包括 http 全局块、server 块。下面的反向代理、动静分离、负载均衡都是在这部分里面配置。
① http 全局块
http 全局块配置的指令包括:文件引入、mime-type 定义、日志自定义、连接超时时间、单链接请求数上线等。
② server 块
这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。 每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。而每个 server 块也分全局 server 块,以及可以同时包含多个 location 块
全局 server 块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称和 IP 配置。
location 块
一个 server 块里面可以配置多个 location 块。 这块主要作用是基于 nginx 服务器接受到的请求字符串,例如 server_name/uri_string, 对虚拟主机名称之外的字符串/uri_string 进行配置, 对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
四、反向代理
1、反向代理实例一
server{
listen 80;
server_name 192.168.31.134;
location / {
root html;
index index.html index.htm;
proxy_pass http://127.0.0.1: 8081;
}
}
这个配置的意思就是:nginx 反向代理服务监听 192.168.31.134:80,如果有请求过来,则转到 proxy_pass 配置的对应服务器上,仅此而已。
2、反向代理实例二
server{
listen 9001;
server_name 192.168.31.134;
location ~ /edu/ {
proxy_pass http://127.0.0.1:8080;
}
location ~ /vod/ {
proxy_pass http://127.0.0.1:8081;
}
}
访问 192.168.31.134:9001/edu/ 直接跳转到 127.0.0.1::8081 访问 192.168.31.134:9001/vod/ 直接跳转到 127.0.0.1::8082
补充: location 指令说明 该指令用于匹配 url,语法如下:
location [ = | ~ | ~* | ^~ ] url {
}
- = 用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理改请求。
- ~ 用于表示 uri 包含正则表达式,并区分大小写
- ~* 用于表示 uri 包含正则表达式,并且不区分大小写
- ^~ 用于不含正则表达式的 uri 前,要求 nginx 服务器找到标识 uri 和请求
重点知识点
1、加/与不加/的区别
加/
在配置 proxy_pass 代理转发的时候,如果后面的 url 加/,表示绝对根路径;如果没有/,表示相对路径,例如:
server{
server_name wiki.dengcong.com.cn;
location /data/ {
proxy_pass http://127.0.0.1/;
}
}
访问 wiki.dengcong.com.cn/data/index.html 会转发到http://127.0.0.1/index.html
不加/
server{
server_name wiki.dengcong.com.cn;
location /data/ {
proxy_pass http://127.0.0.1;
}
}
访问 wiki.dengcong.com.cn/data/index.html 会转发到http://127.0.0.1/data/index.html;