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

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

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

基本命令

Nginx 启动之后,可以使用以下命令控制: nginx -s

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

stop — 快速关闭

quit — 优雅关闭

reload — 重新加载配置文件

reopen — 重新打开日志文件

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

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

配置文件

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

首先,创建 /data/www 目录,并放入 index.html,创建 /data/images 目录并在其中放置一些图片。

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

http {
server {
}
}

通常,配置文件可以包括多个 server 块,它们以端口和服务器名称来区分。当 Nginx 决定某一个 server 处理请求后,它将请求头中的 URI 和 server 块中的 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 指令时将使用所属 server 的 root 指令。

接下来,使用上一节中的服务器配置,并将其修改为代理服务器配置。 在第一个位置块中,加上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 服务器。

初识 Nginx服务配置的更多相关文章

  1. nginx服务配置---php服务接入

    前言: 最近要搭建一个内部的wiki系统, 网上搜了一圈, 也从知乎上搜集了一些大神的评价和推荐. 重点找了几个开源的wiki系统, 不过发现他们都是采用php来实现的. 于是乎需要配置php环境, ...

  2. 【Linux】nginx服务配置

    一. 部署LNMP环境 准备工作 Linux系统准备 设置IP 关闭防火墙 yum源配置 安装: 传输软件包 1. tar -zxvf lnmp1.2-full.tar.gz cd lnmp1.2-f ...

  3. day09 samba、nginx服务配置

    samba 1.环境准备 [root@localhost ~]# iptables -F #清除防火墙配置 [root@localhost ~]# systemctl stop firewalld # ...

  4. centos8平台nginx服务配置打开文件限制max open files limits

    一,nginx启动时提示打开文件数,ulimit的配置不起作用: 1, 2020/04/26 14:27:46 [notice] 1553#1553: getrlimit(RLIMIT_NOFILE) ...

  5. 打杂程序员之nginx服务配置

    现在公司要在服务器上多加个网站用同一个nginx服务器,而且都是公用80端口. 因为服务器上跑着好几个网站了,所以配置文件配置完成时候要检测一下能不能用,用nginx -t:最好不要直接杀死nginx ...

  6. Nginx服务的地址重写

    调整Nginx服务器配置,实现: 1.所有访问a.html的请求,重定向到b.html; 2.所有访问Nginx服务器(192.168.4.1)的请求重定向至www.baidu.com: 3.所有访问 ...

  7. Nginx服务配置文件介绍

    LNMP架构应用实战——Nginx服务配置文件介绍 nginx的配置文件比较简单,但功能相当强大,可以自由灵活的进行相关配置,因此,还是了解下其配置文件的一此信息 1.Nginx服务目录结构介绍 安装 ...

  8. (转)Nginx静态服务配置---详解root和alias指令

    Nginx静态服务配置---详解root和alias指令 原文:https://www.jianshu.com/p/4be0d5882ec5 静态文件 Nginx以其高性能著称,常用与做前端反向代理服 ...

  9. Nginx静态服务配置---详解root和alias指令

    Nginx静态服务配置---详解root和alias指令 静态文件 Nginx以其高性能著称,常用与做前端反向代理服务器.同时nginx也是一个高性能的静态文件服务器.通常都会把应用的静态文件使用ng ...

随机推荐

  1. 阿里云Ubuntu配置安装MQTT服务器

    先来说说mqtt协议: MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,它比较适合于在低带宽.不可靠的网络的进行远程 ...

  2. LAMP搭建示例

    lamp介绍 其实就是由Linux+Apache+Mysql/MariaDB+Php/Perl/Python的一组动态网站或者服务器的开源软件,除Linux外其它各部件本身都是各自独立的程序,但是因为 ...

  3. Typecho 主题更换

    Typecho 主题更换 前言 上一篇已经搭建自己的 Typecho 博客,博客搭建完成自带一个默认主题,不是很喜欢默认的主题,想换一个自己喜欢的主题,并在基础上进行修改. 本文就介绍下如何更换和自定 ...

  4. 全网最牛X的!!! MySQL两阶段提交串讲

    目录 一.吹个牛 二.事务及它的特性 三.简单看下两阶段提交的流程 四.两阶段写日志用意? 五.加餐:sync_binlog = 1 问题 六.如何判断binlog和redolog是否达成了一致 七. ...

  5. 通过DNSLOG回显验证漏洞

    通过DNSLOG回显验证漏洞 前言 实际渗透测试中,有些漏洞因为没有回显导致无法准确判断漏洞是否存在,可能导致渗透测试人员浪费大量精力在一个并不存在的漏洞上,因此为了验证一些无回显漏洞,可结合DNSl ...

  6. 科来网络通讯协议图2019版(OSI七层模型)

    来源:http://www.colasoft.com.cn/download/protocols_map.php 自己把它转成了图片,好做查看:https://www.lanzous.com/ib5h ...

  7. 爬虫-urllib模块的使用

    urllib是Python中请求url连接的官方标准库,在Python3中将Python2中的urllib和urllib2整合成了urllib.urllib中一共有四个模块,分别如下: request ...

  8. 【Azure Developer】使用Postman获取Azure AD中注册应用程序的授权Token,及为Azure REST API设置Authorization

    Azure Active Directory (Azure AD) is Microsoft's cloud-based identity and access management service, ...

  9. Java实现PDF和Excel生成和数据动态插入以及导出

    一.序言 Excel.PDF的导出.导入是我们工作中经常遇到的一个问题,刚好今天公司业务遇到了这个问题,顺便记个笔记以防下次遇到相同的问题而束手无策. 公司有这么两个需求: 需求一.给了一个表单,让把 ...

  10. IPC 经典问题:Sleeping Barber Problem

    完整代码实现: #include <stdio.h> #include <unistd.h> #include <time.h> #include <stdl ...