本文介绍 Nginx 入门基础知识,让你迅速搭建 Nginx 服务器。主要内容包括 Nginx 安装和简单使用、Nginx的简单原理、Nginx 配置文件的结构、如何使用 Nginx 来提供静态文件服务、如何使用 Nginx 来搭建简单的代理服务器等知识。

一、Nginx 的安装和简单使用

关于 Nginx 的安装、简单使用以及详细的命令行参数介绍请参考 http://blog.lifw.org/post/91978153

二、Nginx 的简单原理

如果使用 Nginx 作为web服务器,那么 Nginx 收到请求后将请求内容响应到客户端。如果使用 Nginx 作为代理服务器,那么
Nginx 收到请求后将请求转发到代理服务器(例如tomcat),代理服务器处理完请求后将响应内容发送给 Nginx ,最后 Nginx
将响应内容发送给客户端。

Nginx 是多进程架构,有一个主进程和若干工作进程。主进程主要用来读取并检测配置文件、管理工作进程。工作进程用来处理客户端请求。Nginx 采用基于事件的模型和独立于操作系统的机制来高效地将请求分发到工作进程。工作进程的个数可以在配置文件中显式指定,也可以由 Nginx 根据 CPU 核心数来自动确定。通常工作进程个数和 CPU 核心数相同。

三、Nginx 配置文件结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
user  nginx;
worker_processes  1;
 
error_log 
/var/log/nginx/error.log warn;
pid       
/var/run/nginx.pid;
 
events {
    worker_connections  1024;
}
 
http {
    include      
/etc/nginx/mime.types;
    default_type  application/octet-stream;
    access_log 
/var/log/nginx/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
 
    keepalive_timeout  65;
 
    server {
      location / {
        root
/data/www;
      }
 
      location
/images/ {
        root
/data;
      }
    }
}

配置文件基本结构就是这样子,由若干指令(directives)构成。指令分为简单指令(siple directives)和块指令(block directives)。

简单指令由指令名和参数构成,指令名和参数以空格分隔,每条指令以分号结尾。例如

user nginx;

这就是一条简单指令,表示以 nginx 这个用户身份运行 nginx 工作进程。指令名为 user ,参数为 nginx,最后分号结束。

块指令由指令名和若干由花括号{}包围起来的一组指令组成。例如

events {

worker_connections 1024;

}

就是一个块指令,指令名为 events,后面紧跟 {} 包围起来的一组指令。

如果一个块指令内有其他指令,那么这个块指令也成为上下文(context),不在任何上下文中的指令被认为是在主上下文中(main
context)。例如 events 和 http 位于主上下文中,server 位于 http 上下文中,location 则位于
server 上下文中。

以井号#开头的行是注释行,不起作用。

四、使用 Nginx 来提供静态文件服务

Nginx 一大经典使用场景就是用来提供静态文件服务,例如图片、html、脚本、样式文件等,这些文件没有必要交给
tomcat、jboss等应用服务器处理,使用 Nginx 直接处理将大大提高性能。用 Nginx 来提供静态文件服务十分简单,只需要添加一个
server 块指令即可。

假设我们的静态文件位于 /srv/www 目录下,有若干图片、html、脚本、样式等文件,在 http 指令中加入一个 server 指令即可,代码如下

1
2
3
4
5
6
7
8
9
#其他配置省略
...
http {
      server {
         location ~* \.(html|css|js|png|jpg|gif|ico)$ {
            root
/srv/www;
         }
      }
}

location指令用来映射请求到本地文件系统,这里我们使用了简单的正则表达式来匹配html、css、js、png、jpg、gif、ico这些为扩展名的请求,注意
location 指令中使用表达式要用 ~ 或者 ~* 符号指明,~表示区分大小写,~* 表示不区分大小写。而 root
指令用来指定文件在服务器上的基路径,这里指定为 /srv/www。

不是太好理解,举个例子,例如客户端发送了一个 GET 请求 http://localhost/images/logo.png,Nginx
接受到该请求后会将该请求分发到匹配的 location 中处理,显然上面我们写的 location 指令可以截获该请求,接下来 nginx 将
request_uri 和 root 拼接成服务器文件系统路径,这里 request_uri 为 /images/logo.png,root 为
/srv/www ,拼接后路径为 /srv/www/images/logo.png
,最后 nginx 将服务器该图片响应给客户端,如果不存在该文件,则返回 404 。

五、使用 Nginx 来搭建简单的代理服务器

Nginx
另外一大经典使用场景就是用来作为代理服务器,通常和上述的静态文件服务器配合使用,来完成静态文件由 nginx
服务器提供,而复杂业务请求则由后面的应用服务器来处理。配置 nginx 为代理服务器也很简单,同样在 http 上下文中添加一个 server
指令即可,这里我们以 tomcat 为例。

1
2
3
4
5
6
7
8
9
10
11
12
13
#其他配置省略
http {
  server {
     #静态文件由nginx处理
     location ~* \.(html|css|js|png|jpg|gif|ico)$ {
         root
/srv/www;
     }
     #其他所有请求由tomcat处理
     location / {
         proxy_pass http://localhost:8080;
     }
  }
}

使用 proxy_pass 指令即可将匹配的请求转发到相应的代理服务器。这里我们同时配置了两个 location,第一个 location
来截获静态文件请求并将请求直接交给 nginx 处理,第二个 location 来截获除了静态文件之外的其他所有请求并将这些请求交给
tomcat 处理。这是 nginx 非常经典的使用方式。

本文链接:http://blog.lifw.org/post/52092805,博主原创文章,欢迎转载,转载请注明出处和链接。

转:nginx入门指南,快速搭建静态文件服务器和代理服务器的更多相关文章

  1. CentOS 6(64-bit) + Nginx搭建静态文件服务器

    Nginx搭建静态文件服务器 使用命令打开Nginx配置文件: sudo vim /etc/nginx/conf.d/default.conf 将配置改为: server { ...... ..... ...

  2. Ubuntu 14.04TLS Nginx搭建静态文件服务器

    Nginx搭建静态文件服务器 [官方教程]https://www.nginx.com/resources/admin-guide/serving-static-content/ 打开Nginx的配置文 ...

  3. DigitalOcean上使用Tornado+MongoDB+Nginx+Supervisor+DnsPod快速搭建个人博客

    DigitalOcean 之前买了个便宜的VPS并且在上面搭建了我自己写的博客程序,后来VPS里运行MongoDB经常自己挂掉就索性没理了.直到现在VPS已经过期,服务器被强制关掉了.周末在家索性想着 ...

  4. ASP .Net Core 中间件的使用(一):搭建静态文件服务器/访问指定文件

    前言 随着Asp .Net Core的升级迭代,很多开发者都逐渐倾向于.net core开发. .net core是一个跨平台的应用程序,可以在windows.Linux.macOS系统上进行开发和部 ...

  5. 用node搭建静态文件服务器

    占个坑,写个node静态文件服务器

  6. Hexo快速搭建静态博客并实现远程VPS自动部署

    这篇文章将如何搭建hexo,以及如何通过git webhooks实现远程vps的自动部署 这篇文件适合的条件: 简单的用于个人博客.公司博客展示,hexo的定位是静态博客,要实现动态服务器的功能并不适 ...

  7. 1-开发共享版APP(搭建指南)-快速搭建到自己的服务器

    该APP安装包下载链接: http://www.mnif.cn/appapk/IotDevelopmentVersion/20190820/app-debug.apk 或者扫描二维码下载 注:该下载可 ...

  8. Appium入门指南 - 环境搭建和Case编写

    本文档将详细介绍如何搭建 Appium 的运行环境,以及如何编写一个简单的 UI 自动化测试用例.其中,也会穿插讲解一些 Appium 的基本知识.关于 Appium 的更多信息,大家可以查看官方文档 ...

  9. nginx 配一个简单的静态文件服务器 和一个虚似机

    下面是个图片服务器: server { listen ; server_name img.xxx.xxx.com; root /data/site/img.xxx.xxx.com; access_lo ...

随机推荐

  1. ChemDraw Std 14性价比最高版本,即将下架

    虽然ChemDraw Std 14是ChemOffice®14的基础组件,但是基础功能涵盖全面,是教育专供产品.根据官方最新消息ChemDraw系列软件产品线将进行全面的升级,ChemOffice®1 ...

  2. 2.PostgreSQL安装详细步骤(windows)【转】

    感谢 Junn9527 PostgreSQL安装:一.windows下安装过程安装介质:postgresql-9.1.3-1-windows.exe(46M),安装过程非常简单,过程如下:1.开始安装 ...

  3. OrCAD创建原理图符号图

    1. 首先创建一个库 2. 右键新创建的库,添加新的器件New Part 3. 修改器件属性 4. 添加引脚 添加完引脚之后如图,其中双击引脚,即可修改引脚名字和序号 5. 添加符号的外形 添加完外形 ...

  4. LINUX网络相关命令(转)

    网络连通性 Ping:发送一个 ICMP 回声请求消息给主机,一直持续到到你按下 Ctrl+C .Ping 表示一个包通过 ICMP 从你的机器发送出去,然后在IP层得到回应.Ping 可以检测你与另 ...

  5. CentOS Linux release 7.5.1804下安装MySQL5.7.24

    1.环境查看: 2.卸载自带MariaDB数据库: 3.下载MySQL5.7.14安装包: 4.使用wget工具下载需要安装数据库的依赖包: 5.解压缩bundel包: 6.按照顺序进行安装: 7.数 ...

  6. AGV小车典型设计算法及应用

    1. AGV小车的发展背景 在现代化工业的发展中,提倡高效,快速,可靠,提倡将人从简单的工作中解放出来.机器人逐渐替代了人出现在各个工作岗位上.机器人具有可编程.可协调作业和基于传感器控制等特点,自动 ...

  7. NLP系列-中文分词(基于词典)

    中文分词概述 词是最小的能够独立活动的有意义的语言成分,一般分词是自然语言处理的第一项核心技术.英文中每个句子都将词用空格或标点符号分隔开来,而在中文中很难对词的边界进行界定,难以将词划分出来.在汉语 ...

  8. Python 3 学习笔记之——键盘输入和读写文件

    1. 键盘输入 Python提供了 input() 内置函数从标准输入读入一行文本,默认的标准输入是键盘.input 可以接收一个 Python 表达式作为输入,并将运算结果返回. str = inp ...

  9. C++学习---- static关键字用法总结

    static: 作用:存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化.共有两种变量存储在静态存储区:全局变量和static变量. 1.隐藏:(静态全局变量和静态函数)   ...

  10. RDL/RDLC批量单据打印

    使用RDL或RDLC进行单据打印时,单张单据打印比较直观简单,无需说明.下面我们来谈一下批量单据打印的实现方法.以下以RDL的ReportBuilder设计环境为例进行讲解,RDLC.VS设计环境同理 ...