本文介绍 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. LeetCode:18. 4Sum(Medium)

    1. 原题链接 https://leetcode.com/problems/4sum/description/ 2. 题目要求 给出整数数组S[n],在数组S中是否存在a,b,c,d四个整数,使得四个 ...

  2. Hibernate-ORM:15.Hibernate中的Criteria查询

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客讲师Hibernate中的Criteria查询! 一,Criteria简介: 刚接触Hibernate ...

  3. 一次和别人争吵一个按钮,点击后显示导航;再点击不显示的效果,是否一定以及必须用js?

    事情经过是这样的,我们组一个说话很喜欢用一定,肯定的哥们,吃午饭的时候拿了自己做的一个UI库,头部有一个按钮 点击展开,再次点击收缩,他意思说一个按钮无法记录点击状态,必须使用js.然后我看了一眼,心 ...

  4. dispaly:-webkit-box 布局中的坑

    dispaly:-webkit-box 具体用法 这里大家可以网上查, 这里说下里面的坑 里面的子对象设置-webkit-box-flex: 1 -webkit-box-flex: 2 时:一般两个子 ...

  5. (原) MatEditor部- UmateriaEditor中Texture使用过程(1)

    @author: 白袍小道 转载说明原处 插件同步在GITHUB: DaoZhang_XDZ     最后YY需求(手滑)(开黑前弄下,充数,见谅) 1.在理清楚基础套路和细节后,自定义纹理资源,并加 ...

  6. 剑指offer-调整数组顺序使奇数位于偶数前面13

    题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. class Solu ...

  7. PAT——乙级1036:跟奥巴马一起编程 &乙级1027:打印沙漏 (有坑)

    乙级1036 1036 跟奥巴马一起编程 (15 point(s)) 美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统.2014 年底,为庆祝“计算 ...

  8. 预研报告——MyBatis持久层的demo

    一.预研任务介绍和预研目标 任务介绍: 与 Hibernate 相比, MyBatis 是一个半自动化的持久层框架,以轻量级.效率高.原生代而好评如潮.虽然有在分享会上大致讲解,但是还是重新梳理成文字 ...

  9. Daily Scrum02 12.03

    Daily Scrum03 12.03 一天过去了,新的一天即将到来,我们组仍旧干劲十足呢~ Member Today's Task Tomorrow's Task 李孟 孟神有点累了呢 task85 ...

  10. LaTex标准article文件框架解析

    新建一个LaTex-Article文件 生成的文件框架代码 % ---------------------------------------------------------------- % A ...