Nginx实战入门教程

Nginx 简介

Nginx是一个高性能的http和反向代理服务器,它看起来好像不太符合英文单词的拼写习惯,因为Nginx是由名为 伊戈尔·赛索耶夫 的俄罗斯人开发的。Nginx主要特点为占用内存小,处理并发能力强悍,在国内被广泛采用。目前像阿里,京东,腾讯,百度,新浪,网页等国内的互联网巨头公司都在使用。
下面我们来介绍Nginx的简单使用,笔者认为学会一个工具最快的方式为先使用,然后明白为什么。就像小时候你先学会骑自行车,然后在知道自行车如果坏了怎么去修理它。

Nginx的下载和安装

Nginx的下载和安装非常简单,直接在http://nginx.org/en/download.html下载对应的平台版本即可,笔者的实验是在Windows下进行的(事实上对于Nginx的安装和简单配置来说,Windows和Linux并没有太大异同),下载的Nginx版本为nginx/Windows-1.14.0。Nginx的压缩包非常小,只有约1.5M,而且无需FQ,数秒即可下载完成。
下载完成之后直接将压缩包解压即可,笔者将其解压到D盘的根目录下,此时文件目录内容如下:

启动,停止,和重新加载配置文件命令

Nginx解压完毕之后,直接双击nginx.exe 即可启动,当Nginx启动之后,通过nginx -s 命令可以实现停止nginx和重新加载配置文件。

nginx -s stop # 立即停止
nginx -s quit # 停止,在Nginx停止前会等待当前正在进行的任务
nginx -s reload # 重新加载配置文件

Nginx作为普通HttpServer

简单来说,任何可以通过Http请求的方式访问IO资源(文件是对磁盘IO的一种抽象)服务都可以称为HttpServer。你可以自己写一个程序监听一个端口,当使用浏览器输入ip:port/path 访问,程序获取浏览器获取到Http请求报文,然后对URI部分(也就是path部分)进行解析,在本地文件系统或者其他IO资源中找到对应的资源,通过封装一个Http响应报文,将资源内容放入响应体中写回给浏览器,浏览器就会对其进行解析并展示(或者下载),这就完成了最简单的Http服务器。但我们平时应用的Http服务器需要处理的细节是很多的,如IO复用,安全性等,在此不再赘述。

首先复制conf/nginx.confconf/nginx_bak.conf 备份原有的配置文件文件,在nginx的根目录下创建www 目录,并使用echo 01 > index.html 命令,在www目录下创建index.html,作为HttpServer的静态资源。

删除nginx.conf 的内容并写入如下配置:

worker_processes 1;
events {
    worker_connections 1024;
}
error_log D:/nginx-1.14.0/error.log;
http {
    access_log D:/nginx-1.14.0/access.log;
    server {
        location / {
            root D:/nginx-1.14.0/www;
            }
    }
}

打开浏览器输入http://localhost/ 结果如下图:

至此, 配置Nginx最基本的功能已经成功运行

注意:这里有个细节, Windows下的路径D:/nginx-1.14.0/www 在Nginx的配置文件中要写为正斜线/事实上从Windows资源管理器中直接复制路径为D:\nginx-1.14.0\www,分隔符为反斜线在某些情况下也是可以的,但是这里出现的\n连在一次会被nginx认为是一个换行符,从而请求会出现服务器500错误,所以这里推荐所有的分隔符都使用正斜线/,在Linux上由于路径分隔符本身就是/,因此不存在此问题

Nginx配置文件

前面我们已经对Nginx进行了简单配置并成功的访问,这里对Nginx的配置文件进行简单介绍,nginx的配置文件中配置项有两种结构

  • 简单指令(simple directive),形如key value;
  • 块指令(block directive), 形如key {simple_key simple_value;} 块指令中包含有简单指令。

没错,像是json,但又不是json

worker_processes 1;
events {
    worker_connections 1024;
}

worker_processes 为工作进程的数量,这里如果不填的话默认为CPU核心数,事实上数量为CPU核心数也是最优配置,因为此时,理论上操作系统发生进程切换的的代价最小。
events.worker_connections 每个工作进程的最大连接数,events有很多复杂的配置,详情点击这里
error_log 为发生错误时的日志输出路径

http {
    access_log  D:/nginx-1.14.0/access.log;
    server {
        location / {
            root D:/nginx-1.14.0/www;
        }
    }
}

这一部分算是映射的主体了,整体包含在一个块级指令http {}中,access_log指定该http的日志路径(此项也可以配置在server{}内),放到http{}内,其中所有的server访问日志都会输出到此。server{}内有location / {}项,nginx会根据location后面的路径和ip:port/path中的path做匹配,如果匹配到,则从里面配置的D:/nginx-1.14.0/www本地目录下寻找请求的资源。

注意:一个server{} 下也可以有多个location配置,而且location配置也可以跟正则表达式,如下:

server {
    location / {
        root D:/nginx-1.14.0/www;
    }
    location /static/ {
        root D:/nginx-1.14.0/static;
    }
    location ~ \.(gif|jpg|png)$ {
        root D:/nginx-1.14.0/images;
    }
}

nginx的匹配优先级为,正则,长路径,短路径。关于正则的配置必须以~开头,后面跟要匹配的文件名正则表达式,这里以localhost/01.png为例,nginx会找到符合文件名的第三项配置,然后会从D:/nginx-1.14.0/images中找01.png文件,这里没有任何问题。
如果路径为/static/file.suffix,匹配到location /之后,还会往更深的location /static/配置的root目录下匹配资源,此时会在本地找到D:/nginx-1.14.0/static/file.suffix文件。此时如果删除location /static/的配置,就会从location /的root目录下寻找配置文件,即此时的匹配路径为D:/nginx-1.14.0/www/static/file.suffix。这点符合nginx优先匹配深层次的location配置这一特性。
有意思的是当路径为/static/01.png时,此时符合location ~ \.(gif|jpg|png)$location /static/两项配置,但由于正则优先,会寻找本地文件系统中D:/nginx-1.14.0/images/static/01.png文件

Nginx作为代理服务器

Nginx经常作为代理服务器,作为代理的访问逻辑如下图:

这里将上面配置好的静态文件服务器作为目标WebServer,首先将配置文件的http{}块中追加以下内容

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

然后使用nginx -s reload重新加载配置文件,在浏览器中输入localhost:8080/index.html可以看到浏览器输出如下:

这里对上面的配置进行简单解释:

server{listen 8080;}表明启动一个http-server监听在8080端口(注:此项不填默认为80端口,但前面的静态服务器已经占用了80端口,此处就为其他端口)。
location / {proxy_pass http://localhost:80;} location的匹配规则前文已经讲过,这里当匹配上location /之后,就会从请求proxy_pass的URL,然后在将结果返回给浏览器。此时的localhost:8080/index.html请求相当于在请求localhost:80/index.html

原文地址:https://www.cnblogs.com/nicky-160330/p/9449523.html

时间: 2024-10-10 05:37:14

Nginx实战入门教程的相关文章

吕鑫VC6.0-VS2015 全套C/C++、MFC新手实战入门教程、Linux视频教程 最好的基础入门教程

本课程包括: [1]C语言(1个月) [2]C++语法与数据结构(1个月)) [3]MFC项目开发(1个月) [4]Linux项目开发(1个月) 往届的授课视频都已经上传到百度网盘,请同学们按照视频教程提前掌握课程的进度情况. VS2015系列视频教程包括: <VS2015---0基础C语言视频教程> <VS2015---C++视频教程与数据结构> <VS2015---MFC项目开发视频教程> <VS2015---Linux项目开发视频教程>等完整的C++就

Nginx教程(一) Nginx入门教程

Nginx教程(一) Nginx入门教程 1 Nginx入门教程 Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行.由俄罗斯的程序设计师IgorSysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用.其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好. 1.1 Nginx下载安装 1.Nginx下载:nginx-1.13.0.tar.g

【Nginx】--nginx入门教程

nginx入门教程 一.概述    什么是nginx?   Nginx (engine x) 是一款轻量级的Web 服务器 .反向代理服务器及电子邮件(IMAP/POP3)代理服务器.   什么是反向代理? 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器. 二.常用命令 nginx 的使用比较简单,就是几

Capabilities 入门教程:基础实战篇

该系列文章总共分为三篇: Linux Capabilities 入门教程:概念篇 Linux Capabilities 入门教程:基础实战篇 待续... 上篇文章介绍了 Linux capabilities 的诞生背景和基本原理,本文将会通过具体的示例来展示如何查看和设置文件的 capabilities. Linux 系统中主要提供了两种工具来管理 capabilities:libcap 和 libcap-ng.libcap 提供了 getcap 和 setcap 两个命令来分别查看和设置文件的

nginx入门教程

nginx入门教程 一.概述    什么是nginx?   Nginx (engine x) 是一款轻量级的Web 服务器 .反向代理服务器及电子邮件(IMAP/POP3)代理服务器.   什么是反向代理? 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器. 二.常用命令 nginx 的使用比较简单,就是几

Android基础入门教程——8.3.2 绘图类实战示例

Android基础入门教程--8.3.2 绘图类实战示例 标签(空格分隔): Android基础入门教程 本节引言: 前两节我们学了Bitmap和一些基本的绘图API的属性以及常用的方法,但心里总觉得有点 不踏实,总得写点什么加深下映像是吧,嗯,本节我们就来写两个简单的例子: 1.简单画图板的实现 2.帮美女擦衣服的简单实现 嘿嘿,第二个例子是小猪刚学安卓写的一个小Demo~嘿嘿~ 开始本节内容~ 1.实战示例1:简单画图板的实现: 这个相信大家都不陌生,很多手机都会自带一个给用户涂鸦的画图板,

Systemd 入门教程:实战篇

Systemd 入门教程:实战篇 上一篇文章,介绍了 Systemd 的主要命令,这篇文章主要介绍如何使用 Systemd 来管理我们的服务,以及各项的含义: 一.开机启动 对于那些支持 Systemd 的软件,安装的时候,会自动在/usr/lib/systemd/system目录添加一个配置文件,如果你想让该软件开机启动,就执行下面的命令(以httpd.service为例). $ sudo systemctl enable httpd 上面的命令相当于在/etc/systemd/system目

CMake快速入门教程-实战

http://www.ibm.com/developerworks/cn/linux/l-cn-cmake/ http://blog.csdn.net/dbzhang800/article/details/6314073 http://www.cnblogs.com/coderfenghc/archive/2013/01/20/2846621.html http://blog.sina.com.cn/s/blog_4aa4593d0100q3bt.html http://hahack.com/c

Linux 命令详解(八)Systemd 入门教程:实战篇

Systemd 入门教程:实战篇 http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html