guide

Nginx详解

About 1191 wordsAbout 4 min

nginx

2024-01-31

一、为啥需要 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;