这是一篇关于nginx使用与配置的入门指南,但不包括nginx的编译与安装。我假定你知晓如何安装nginx。对大多数Linux系统来说,nginx都已经存在于它们的软件包里,直接使用系统提供的软件管理工具安装即可。

nginx根据配置文件决定如何工作。配置文件的目录一般可能在以下几个位置:/usr/local/nginx/conf, /etc/nginx, /usr/local/etc/nginx。

启动,停止和重读配置文件

直接运行执行文件就可以启动nginx了。启动后,可通过-s参数控制它:

nginx -s signal

这个signal和Linux系统里的signal不是一回事。它可取以下几个值:

  • stop - 快速关闭
  • quit - 妥善关闭
  • reload - 重读配置文件
  • reopen - 重新打开日志文件

stop和quit的区别在于,quit会等待当前正在进行的所有服务完成后才退出。

如果你修改了配置文件,可以通过下面的命令让nginx重读配置:

nginx -s reload

在这条命令之后,对每一个新的请求,都将使用新的配置文件,而该命令前未完成的请求仍使用已有配置。

静态内容服务配置

nginx安装好后,已经提供了默认的配置文件。观察默认的配置文件我们可以发现,它是由嵌套的配置块组成,每个配置块都由一对大括号标记。最醒目的就是server块,用于标记一个服务器:

server {
    listen 80;                             # 监听端口。一行以分号结尾;注释标记与bash一样
    server www.example.com;  # 网站名称
}

现在nginx知道对于服务器www.example.com:80要使用上面的server块,但还不知道如何解析URI。我们在server块内部添加location块:

server {
    listen 80;                             # 监听端口。一行以分号结尾;注释标记与bash一样
    server www.example.com;  # 网站名称
    location / {
        root /data/www
    }
}

nginx比较location后面的内容(“/”)和http请求中的URI。如果匹配,那么就将URI附加到root字符串的后面,作为所请求的资源在本地文件系统中的位置。例如对于http请求www.example.com/abc/index.html,对应本地文件系统的位置在/data/www/abc/index.html。

如果一个server块内有多个location,那么将匹配最长的那个。我们可以利用这点,将不同的资源防止不同的位置。例如,我们将所有图片放在了/data/images,并且希望当浏览器送出http://www.example.com/images时从该目录读取文件,那么location块就是下面这个样子:

location /images/ {
    root /data
}
这里要注意的是,匹配过程只进行一次(最长匹配),如果在本地文件系统中没有找到请求的资源,那么将响应喜闻乐见的404,而不会尝试较短的匹配。

作为代理服务器

nginx的常用方式之一是将其作为代理服务器:接收请求,将请求传递给被代理的服务器,接收响应,将响应发送给客户端。

下面我们来配置一个基本的代理服务器:它使用本地文件系统来服务图片请求,将其它请求转发到后端服务器。

首先我们新增一个server块:

server {
    listen 8080;
    root /data/upl;
    location / {
    }
}

这个服务器使用端口8080。我们将root小节写在了sever块中而不是location块,对于没有root段的location,将使用server块里的root。

现在让我们回到上一个server。我们需要识别所有的图像文件(我们假定图像文件只有三种:gif,jpg,png)。修改后的location如下:

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

我们看到了熟悉的正则表达式:这个location匹配任何以gif或jpg或png结尾的URI。正则表达式必须以“~”符号作为前缀。

nginx首先检查最长匹配的location块并记住,然后检查正则表达式。如果正则表达式匹配,则使用其中的locaiton;否则就使用刚记住的最长匹配location块。

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

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

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

nginx使用与配置入门指南的更多相关文章

  1. Webstorm10.0.3破解程序及汉化包下载、Webstorm配置入门指南

    核心提示: WebStorm 是jetbrains公司旗下一款JavaScript 开发工具.被广大中国JS开发者誉为“Web前端开发神器”.“最强大的HTML5编辑器”.“最智能的JavaSscri ...

  2. Nginx 的安装配置入门(mac)

    1.安装Nginx服务器: 执行命令 brew install nginx 安装完以后,可以在终端输出的信息里看到一些配置路径: /usr/local/etc/nginx/nginx.conf (配置 ...

  3. Vue.js 入门指南之“前传”(含sublime text 3 配置)

    题记:关注Vue.js 很久了,但就是没有动手写过一行代码,今天准备入手,却发现自己比菜鸟还菜,于是四方寻找大牛指点,才终于找到了入门的“入门”,就算是“入门指南”的“前传”吧.此文献给跟我一样“白痴 ...

  4. nginx配置入门

    谢谢作者的分享精神,原文地址:http://www.nginx.cn/591.html nginx配置入门 之前的nginx配置是对nginx配置文件的具体含义进行讲解,不过对于nginx的新手可能一 ...

  5. nginx 配置入门

    之前的nginx配置是对nginx配置文件的具体含义进行讲解,不过对于nginx的新手可能一头雾水. 今天看到个文档不错,翻译过来分享给大家,可以让新手更详细地了解nginx配置,可以说是nginx配 ...

  6. Redis入门指南之二(安装及配置)

    本节主要内容 1. 前言2. redis安装3. 启动和停止Redis 1. 前言 安装Redis需要知道自己需要哪个版本,有针对性的安装,比如如果需要redis GEO这个地理集合的特性,那么red ...

  7. 干货|给小白的 Nginx 10分钟入门指南

    一个执着于技术的公众号 前言 今天主要对Nginx Web服务软件进行介绍,作为HTTP服务软件的后起之秀,Nginx与它的老大哥Apache相比有很多改进之处,比如,在性能上,Nginx占用的系统资 ...

  8. nginx入门篇----nginx服务器基础配置

    1.nginx.conf文件结构...                         #全局块  events{  ...  }  http                      #http块{ ...

  9. 使用SSL配置Nginx反向代理的简单指南

    反向代理是一个服务器,它接收通过Web发出的请求,即http和https,然后将它们发送到后端服务器(或服务器).后端服务器可以是单个或一组应用服务器,如Tomcat,wildfly或Jenkins等 ...

随机推荐

  1. python笔记43-加解密AES/CBC/pkcs7padding

    前言 有些公司对接口的安全要求比较高,传参数的时候,不会明文的传输,先对接口加密,返回的数据也加密返回. 目前比较常见的加密方式是AES/CBC/pkcs7padding. AES五种加密模式 在AE ...

  2. 学习:费马小定理 & 欧拉定理

    费马小定理 描述 若\(p\)为素数,\(a\in Z\),则有\(a^p\equiv a\pmod p\).如果\(p\nmid a\),则有\(a^{p-1}\equiv 1\pmod p\). ...

  3. log4j2 配置文件解读

    1.日志相关介绍 日志接口(slf4j):slf4j是对所有日志框架制定的一种规范.标准.接口,并不是一个框架的具体的实现,因为接口并不能独立使用,需要和具体的日志框架实现配合使用,比如log4j.l ...

  4. 在Maven项目中,jsp不解析el表达式

    我的这个项目是用Maven-archetype-webapp项目创建的,如下图所示: 有这种方式创建有一个坑,就是它使用的servlet版本是2.3,而servlet2.4以下的版本是不会自动解析el ...

  5. 小程序开发二三事--数据请求head的设置

    wx.request(OBJECT) 发起请求的方法有很多,默认为 GET,有效值:OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT: 一般在 ...

  6. java 调度框架quartz

    核心代码如下: public class SchedulerTest { public static void main(String[] args) { //创建schedulerFactory类 ...

  7. 分享一个Centos8的国内yum源

    使用的是清华大学开源镜像站,文件地址: https://github.com/hackyoMa/docker-centos/blob/8/CentOS-Base.repo 使用方法: cd /etc/ ...

  8. 洛谷p1967货车运输(kruskal重构树)

    题面 题解中有很多说最优解是kruskal重构树 所以 抽了个早自习看了看这方面的内容 我看的博客 感觉真的挺好使的 首先对于kruskal算法来说 是基于贪心的思想把边权排序用并查集维护是否是在同一 ...

  9. ffmpeg结合SDL编写播放器(三)

    接下来是解析影片的帧 /*** project.c ***/ #include<stdio.h> #include<libavcodec/avcodec.h> #include ...

  10. 使用Lua脚本通过原子减防止超卖

    需求 双十二要搞一个一分钱门票抢购的活动. 分析 性能分析,抢购时会发生高并发,如果仅仅依靠Mysql数据库,有可能因为大量的请求频繁访问数据库造成服务器雪崩,所以考虑通过Redis减库存,最终的数据 ...