初识 Nginx

作者 : 开心源码 本文共3952个字,预计阅读时间需要10分钟 发布时间: 2022-05-11 共90人阅读

Nginx 是一个免费的,开源的,高性可以的HTTP服务器和反向代理商,以及IMAP / POP3代理商服务器。 Nginx 以其高性可以,稳固性,丰富的功可以,简单的配置和低资源耗费而闻名。很多高知名度的网站都用 Nginx,如:Netflix,GitHub,SoundCloud,MaxCDN 等。

初识 Nginx

Nginx 有一个主线程( master process)和几个工作线程(worker process)。主线程的目的是加载验证配置文件、维护工作线程。

工作线程解决实际的请求,Nginx 采使用基于事件的模型和依赖操作系统的机制在工作线程之间高效地分发请求。工作线程的数量可配置,也可自动调整为服务器CPU的数量。

Nginx 及其板块的工作方式由配置文件确定。 默认情况下,配置文件名为 nginx.conf,放在 /usr/local/nginx/conf/etc/nginx 或者者 /usr/local/etc/nginx 文件夹中。

基本命令

Nginx 启动之后,能用以下命令控制:

nginx -s

其中-s意思是向主进程发送信号,signal能为以下四个中的一个:

  1. stop — 快速关闭

  2. quit — 优雅关闭

  3. reload — 重新加载配置文件

  4. reopen — 重新打开日志文件

当运行nginx -s quit时,Nginx 会等待工作进程解决完成当前请求,而后将其关闭。当你修改配置文件后,并不会立即生效,而是等待重启或者者收到nginx -s reload信号。

当 Nginx 收到 nginx -s reload 信号后,首先检查配置文件的语法。语法正确后,主线程会开启新的工作线程并向旧的工作线程发送关闭信号,假如语法不正确,则主线程回滚变化并继续用旧的配置。当工作进程收到主进程的关闭信号后,会在解决完当前请求之后退出。

配置文件

Nginx 配置的核心是定义要解决的 URL 以及如何响应这些 URL 请求,即定义一系列的虚拟服务器(Virtual Servers)控制对来自特定域名或者者 IP 的请求的解决。

每一个虚拟服务器定义一系列的 location 控制解决特定的 URI 集合。每一个location定义了对映射到自己的请求的解决场景,能返回一个文件或者者代理商此请求。

Nginx 由不同的板块组成,这些板块由配置文件中指定的指令控制。 指令分为简单指令块指令

一个简单指令包含指令名称指令参数,以空格分隔,以分号(;)结尾。 块指令与简单指令相似,但是由大括号({})包围。 假如块指令大括号中包含其余指令,则称该指令为上下文(如: events, http, serverlocation)。

配置文件中的放在上下文之外的指令默认放在主配置文件中(相似继承主配置文件)。 eventshttp 放置在主配置文件中,server 放置在http块指令中,location放置在server块指令中。

配置文件的注释以 # 开始。

静态内容

Web 服务器一个重要的功可以是服务静态文件(图像或者静态HTML页面)。例如,Nginx 能很方便的让服务器从/data/www 获取 html 文件,从/data/images获取图片来返回给用户端,这只要要在http块指令中的server块指令中设置两个location块指令。

首先,创立 /data/www 目录,并放入 index.html,创立 /data/images 目录并在其中放置少量图片。

接下来,打开配置文件。 创立一个 server 块:

http { server {

}

}

通常,配置文件能包括多个 server 块,它们以端口服务器名称来区分。当 Nginx 决定某一个 server 解决请求后,它将请求头中的 URIserver 块中的 location 块进行比照。

加入 location 块指令到 server 中:

将以下位置块增加到服务器块:

location / { root /data/www;

}

上面的 location 块指定 / 前缀与请求中的 URI 比照。对于匹配的请求,URI 将被增加到 root 指令中指定的路径,即 /data/www,以此形成本地文件系统的路径,如访问http://localhost/bog/welcome.html,对应服务器文件路径为/data/www/bog/welcome.html。 假如 URI 匹配多个 location 块,Nginx 采使用最长前缀匹配准则(相似计算机网络里面的IP匹配), 上面的 location 块前缀长度为 1,因而只有当所有其余 location 块匹配时,才用该块。

接下来,增加第二个位置块:

location /images/ { root /data;

}

它将匹配以/images// 也匹配这样的请求,但具备较短的前缀)开始的请求。

server 块的最终配置如下:

server { location / { root /data/www;

} location /images/ { root /data;

}

}

到目前为止,这已经是一个能正常运行的服务器,它监听端口80,并且能在本地计算机上访问 http://localhost/。 对于 /images/ 开头的请求,服务器将从 /data/images 目录发送文件。 如,对于 http://localhost/images/example.png 请求,nginx 将响应 /data/images/example.png文件。 假如不存在,nginx 将返回404。URI 不以 /images/ 开头的请求将映射到 /data/www 目录。 例如,对于 http://localhost/some/example.html 请求,nginx 将响应 /data/www/some/example.html 文件。

代理商服务器

Nginx 的一个常见应使用是将其设置为代理商服务器(Proxy Server),即接受用户端的请求并将其转发给代理商服务器,再接受代理商服务器发来的响应,将它们发送到用户端。

比方我们能使用一个 Nginx 实例实现对图片文件的请求用本地文件系统,而其余请求转发到代理商服务器。

首先,向 Nginx 的配置文件中增加一个 server 块来定义代理商服务器:

server { listen 8080; root /data/up1; location / {

}

}

此服务器侦听端口8080,并将所有请求映射到本地文件系统上的 /data/up1 目录。 创立此目录并将 index.html 放入其中。 注意,root 指令放在 server 上下文中,这样 当 location 块中不含 root 指令时将用所属 serverroot 指令。

接下来,用上一节中的服务器配置,并将其修改为代理商服务器配置。 在第一个位置块中,加上proxy_pass指令:

server { location / { # proxy_pass指令的参数为:协议+主机名+端口号

proxy_pass http://localhost:8080;

} location /images/ { root /data;

}

}

修改第二个 匹配 /images/ 前缀的 location 块,使其与请求图像文件的扩展名相匹配:

location ~ \.(gif|jpg|png)$ { root /data/images;

}

该参数是一个正则表达式,匹配以.gif,.jpg或者.png结尾的所有URI。 正则表达式应该以 ~ 开头。 相应的请求将映射到 /data/images 目录。

当 Nginx 选择一个 location 块来解决请求时,它首先检查指定 location 块的前缀,记住具备最长前缀的 location 块,而后检查正则表达式。 假如与正则表达式匹配, Nginx 选择此 location 块,否则,选择先前记住的 location 块。

代理商服务器的最终配置如下:

server { location / { proxy_pass http://localhost:8080/;

} location ~ \.(gif|jpg|png)$ { root /data/images;

}

}

此服务器将过滤以.gif,.jpg或者.png结尾的请求,并将它们映射到 /data/images 目录(通过向 root 指令的参数增加请求的URI),并将所有其余请求发送给上面配置的代理商服务器。

这样,图片和其余请求即可以用不同的服务器来解决。

FastCGI代理商

Nginx 可使用于将请求路由到 FastCGI 服务器。快速通使用网关接口(Fast Common Gateway Interface/FastCGI)是一种让交互程序与Web服务器通信的协议。因而 Nginx 能将请求路由到 FastCGI 运行的应使用程序,如 PHP 程序。

用 FastCGI 服务器的最基本的 Nginx 配置包括用 fastcgi_pass 指令而不是 proxy_pass 指令,以及用 fastcgi_param 指令来设置传递给 FastCGI 服务器的参数。 假设FastCGI服务器可在 localhost:9000 上访问。 以上一节中的代理商服务器配置为基础,用fastcgi_pass指令替换proxy_pass指令,并将参数更改为 localhost:9000 。 在 PHP 中, SCRIPT_FILENAME 参数使用于确定脚本名称,而 QUERY_STRING 参数使用于传递请求参数。 生成的配置将是:

server { location / { fastcgi_pass localhost:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string;

} location ~ \.(gif|jpg|png)$ { root /data/images;

}

}

这将设置一个服务器,将路由除静态图像以外的所有请求到运行在 localhost:9000 的 FastCGI 服务器。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 初识 Nginx

发表回复