Nginx配置指南

欢迎光临我的博客拓跋的前端客栈,这个是原文地址。如果您发现我文章中存在错误,请尽情向我吐槽,大家一起学习一起进步φ(>ω<*)

什么是Nginx?


没有什么文档比直接从Nginx官网来的更准确清晰了。

Nginx [engine x] is an HTTP and reverse proxy server, a mail proxy server, and a generic TCP/UDP proxy server, originally written by Igor Sysoev. For a long time, it has been running on many heavily loaded Russian sites including Yandex, Mail.Ru, VK, and Rambler. According to Netcraft, Nginx served or proxied 29.43% busiest sites in October 2017. Here are some of the success stories: Dropbox, Netflix, Wordpress.com, FastMail.FM.

Nginx [engine x]是最初由Igor Sysoev编写的HTTP和反向代理服务器,邮件代理服务器和通用TCP/UDP代理服务器。很长时间以来,它一直在许多重负荷的俄罗斯网站上运行,包括Yandex,Mail.Ru,VK和Rambler。根据Netcraft,2017年10月,Nginx服务或代理了 29.43%最繁忙的站点。下面是一些成功案例: Dropbox, Netflix, Wordpress.com, FastMail.FM。

Nginx的主要特性:

  • Basic HTTP server features(基本的HTTP服务器功能)
  • Other HTTP server features(其他HTTP服务器功能)
  • Mail proxy server features(邮件代理服务器功能)
  • TCP/UDP proxy server features(TCP/UDP代理服务器功能)
  • Architecture and scalability(架构和可扩展性)

为什么要使用Nginx,跟以前用的tomcat有什么区别?


虽然大家都叫web server,但是Nginx和tomcat有本质的不同。

Nginx常用来做静态内容服务器和代理服务器,用来放置静态资源或者转发请求给后面的应用服务;而tomcat常用来做应用容器,让java app在其中运行。

因此,严格来说,Nginx应该叫<span style="color:red">HTTP Server</span>,而tomcat则是一个<span style="color:red">Application Server</span>

一个 HTTP Server关心的是HTTP协议层面的传输和访问控制,所以在Nginx上你可以看到代理、负载均衡等功能。客户端通过HTTP Server 访问服务器上存储的资源(HTML 文件、图片文件等等)。通过CGI技术,也可以将处理过的内容通过HTTP Server分发,但是一个HTTP Server始终只是把服务器上的文件如实的通过HTTP协议传输给客户端。

而应用服务器,则是一个应用执行的容器。它首先需要支持开发语言的 Runtime(对于 Tomcat 来说,就是 Java),保证应用能够在应用服务器上正常运行。其次,需要支持应用相关的规范,例如类库、安全方面的特性。对于 Tomcat 来说,就是需要提供 JSP/Sevlet 运行需要的标准类库、Interface 等。为了方便,应用服务器往往也会集成 HTTP Server 的功能,但是不如专业的 HTTP Server 那么强大,所以应用服务器往往是运行在 HTTP Server 的背后,执行应用,将动态的内容转化为静态的内容之后,通过 HTTP Server 分发到客户端。

于我个人来说,选择Nginx主要是因为其占用资源低的优点,比起tomcat,选择Nginx能给我释放大量的系统内存,供我其他IDE和chrome使用。

nginx.conf配置文件指南


Nginx的安装,启动,关闭等步骤的教程在这里我们就不做赘述了,我们来主要谈一谈nginx.conf文件应该如何配置,这是nginx的灵魂所在。

Nginx配置文件结构

nginx包含由配置文件中指定的指令控制的模块。指令分为简单指令块指令

一个简单的指令由名称参数组成,以空格分隔,并以分号(;)结束:

    root /data/www;

一个block指令和一个简单的指令有相同的结构,但是不是以分号结尾,而是用一系列由大括号({和})包围的附加指令来结束。如果一个block指令在大括号内可以有其他的指令,它就被称为一个context(上下文,例如:events,http,server和location):

    http {
        server {
            #location / {
                 proxy_pass   http://127.0.0.1:8090/;
                 proxy_redirect  http://127.0.0.1:8090/ /;
                 proxy_connect_timeout 600s;
                 proxy_read_timeout 600s;
                 proxy_send_timeout 600s;
            }
        }
    }

置于任何context之外的配置文件中的指令被认为是在main context中。在eventshttp指令驻留在main content中,server是在http中,location则在server中。

后面的部分是注释:

    # 这是一段注释

Nginx作为静态服务器使用

作为一个Web服务器,其最主要的任务是作为静态服务器使用。

你需要将静态网页和文件放到一个目录(例如/data/www),将图片等文件放到另一个目录(例如/data/images),然后在nginx.conf中进行配置。这需要在http模块下的server模块内新建两个location模块:

    http {
        server {
            location / {
                root /data/www;
            }
            location /images/ {
                root /data;
            }
        }
    }

看起来很好理解吧~也可以直接把文件放到一块,直接location配置绝对路径:

    location / {
        root   F:\webapp\portal;
    }

Nginx在未配置监听端口的情况下默认监听80端口,因此,你可以通过在本地访问 http://localhost/ 或者 http://127.0.0.1/ 来访问你的网站。

怎么样?赶紧启动一下Nginx吧,你的静态网站已经可以在本地运行了!修改配置后重启Nginx的命令是:

    nginx -s reload

如果您的Nginx无法启动或者出现其他错误,您可以尝试在 /usr/local/nginx/logs 或者 /var/log/nginx 中的 access.log 以及 error.log 中查找原因

搭建简单的代理服务器

Nginx经常作为反向代理服务器来使用,这意味着Nginx服务器接收请求,将其传递给被代理服务器,从中检索响应并将其发送给客户端。

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。通过在网络各处放置反向代理节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。

下面,我们将配置一个基本的代理服务器,它会处理本地图片文件的请求并返回其他的请求给被代理的服务器。在这个例子中,两个服务器将在一个Nginx实例上定义。

首先,在nginx的配置文件中增加一个server块来定义代理服务器,其中包含以下内容:

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

这将是一个简单的服务器,它监听8080端口。(如果不定义listen值的话,默认监听80端口)并将所有请求映射到本地文件系统上的目录/data/up1。创建这个目录并把index.html文件放进去。请注意,该root指令放置在server context中。当响应请求的 location 区块中,没有自己的 root 指令,上述的 root 指令才会被使用。

接下来,使用上一节中的服务器配置并对其进行修改,使其成为代理服务器配置。在第一个location块中,设置proxy_pass 指令,并在参数中配置指定的代理服务器的协议、名称和端口号(在我们的例子中是这样 http://localhost:8080):

    server {
        location / {
            proxy_pass http://localhost:8080;
        }
        location /images/ {
            root /data;
        }
    }

我们将修改第二个location块,它将当前带有/images/前缀的请求映射到/data/images目录下,使其与具有典型文件扩展名的图像请求匹配。修改的location块如下所示:

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

该参数是一个正则表达式,它会匹配所有以.gif、.jpg 或者.png结尾的URI。一个正则表达式需要以~开头。匹配到的请求会被映射到/data/images目录下。

当Nginx通过location去响应一个请求时,它会先检测带有前缀的location指令,兽先是检测带有最长前缀的 location,其次检测正则表达式。如果被正则的匹配的规则匹配成功,Nginx会选择使用该location的规则,否则,会选择之前缓存的规则。

最终,一个代理服务器的配置结果如下:

    server {
        location / {
            proxy_pass http://localhost:8080/;
        }
        location ~ \.(gif|jpg|png)$ {
            root /data/images;
        }
    }

该服务器将过滤以.gif、.jpg或者.png结尾的请求,并将它们映射到/data/images目录(通过添加URI到root指令的参数),并将所有其他请求传递给上述代理服务器。

要应用新配置,请保存修改后的配置文件,并nginx -s reload一下。

更多Nginx代理配置指令,尽在ngx_http_proxy_module

参考文献


Nginx官方网站
Nginx官方入门文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,644评论 18 139
  • 上一篇《WEB请求处理一:浏览器请求发起处理》,我们讲述了浏览器端请求发起过程,通过DNS域名解析服务器IP,并建...
    七寸知架构阅读 80,957评论 21 356
  • 配置运行Nginx服务器用户(组) 用于配置运行Nginx服务器用户(组)的指令是user,其语法格式为: use...
    吃瓜的东阅读 4,489评论 0 41
  • 很多时候,你自以为自己的事情很重要,你貌似很小声却也很急切的处理,然而这件对于你来说及其严重的事情在别人眼中或许根...
    仓皇出逃x阅读 320评论 0 0
  • 海棠花溪
    喵了个咪_ddbc阅读 135评论 0 0