Nginx (Engine X)是一个轻量级的Web服务器 、反向代理服务器及电子邮件(IMAP/POP3)代理服务器、高性能的HTTP服务器,它以高稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器,在做HTTP反向代理和负载均衡时,特意要注意开启HTTP长连接的支持。

Apache应该为大家所熟知,而Nginx就是类似Apache的提供静态网页的Web服务器,相比于Apache的多进程多线程的并发模型,而Nginx是基于事件的异步IO的并发模型,性能更好,而且Nginx是一个轻量级的服务器。
针对于Nginx的介绍我们就不过多赘述了,现在开始针对于Nginx的配置进行相关的介绍说明。
Nginx有一个主进程(Master)和几个工作进程(Worker),采用了基于事件模型和依赖于操作系统的机制来有效地在工作进程之间分配请求。
Nginx是模块化的系统,整个系统是分成一个个模块的,每个模块负责不同的功能。在上面的configure指令中带了很多参数,就是在这里编译之前可以加入某些模块或去掉某些模块的。我们会把要用的模块再源码编译的时候就编译进入到Nginx了,那要怎么用这些模块呢?那就得通过配置文件来实现。接下来我们就开始使用入门配置实践指南阶段,进行学习。
配置文件决定了Nginx及其模块的工作方式。默认情况下,配置文件名为 nginx.conf,默认安装目录为 /usr/local/nginx/conf,/etc/nginx 或 /usr/local/etc/nginx 中,整个配置文件都是由指令来控制的。nginx也有自己内置的指令,比如events, http, server, 和 location等,下面会提到的。
首先,我们先不考虑复杂的配置,仅仅是完成一个http反向代理,Nginx.conf配置文件如下:
注:conf/nginx.conf 是 nginx 的默认配置文件,你也可以使用 nginx -c 指定你的配置文件。
Nginx是由配置文件中指定的指令控制模块组成。指令可分为简单指令和块指令。
一个简单的指令是由空格分隔的名称和参数组成,并以分号 ; 结尾。
块指令具有与简单指令相同的结构,但不是以分号结尾,而是以大括号{}包围的一组附加指令结尾。
如果块指令的大括号内部可以有其它指令,则称这个块指令为上下文(例如:events,http,server 和 location)。
配置文件中被放置在任何上下文之外的指令都被认为是主上下文 main。events 和 http 指令在主 main 上下文中,server 在 http 中,location 又在 server 中。
井号 # 之后的行的内容被视为注释。
在这个文件中,在这个文件中,主要由三个部分组成:events,http、mail。
events {
}
http {
}
mail {
}
和块之间还可以嵌套的。例如http下面可以放server。
http {
server {
}
}
首先根据请求,将提供来自不同的本地目录的文件: /data/htmls(可能包含 HTML 文件)和 /data/images(包含图片)。
创建 /data/htmls目录并且将包含index.html文件放入。之后,创建 /data/images目录然后放一些图片进去。
打开这个nginx.conf这个配置文件,我们首先通过http块指令嵌入一个块指令server。
http {
server {
}
}
包含几个由监听listen端口和服务器域名server names区分的server块指令。
当Nginx决定由哪个server来处理请求,它会根据 server 块中定义的 location 指令的参数来检验请求头中指定的URI。
添加如下 location 块指令到 server 块指令中:
location / {
root /data/htmls;
}
对于匹配的请求,URI 将被添加到根指令 root 中指定的路径,即 /data/htmls,以形成本地文件系统上所请求文件的路径。
如果有几个匹配上的 location 块指令,Nginx将选择具有最长前缀的 location 块。上面的位置块提供最短的前缀,长度为 1,因此只有当所有其它 location 块不能匹配时,才会使用该块。
接下来,添加第二个 location 指令快:
location /images/ {
root /data;
}
以 /images/ 为开头的请求将会被匹配上(虽然 location / 也能匹配上此请求,但是它的前缀更短)
server {
location / {
root /data/htmls;
}
location /images/ {
root /data;
}
}
结论:监听标准 80 端口并且可以在本地机器上通过 http://localhost/ 地址来访问的有效配置。响应以 /images/ 开头的URI请求,服务器将从 /data/images 目录发送文件,由于使用了标准 80 端口,所以没有指定 listen 指令
例如,响应http://localhost/images/example.png 请求,nginx 将发送 /data/images/example.png 文件。如果此文件不存在,nginx 将发送一个404错误响应。不以 / images/ 开头的 URI 的请求将映射到 /data/htmls 目录。例如,响应 http://localhost/some/example.html 请求,nginx 将发送 /data/www/some/example.html 文件。
要让新配置立刻生效,如果nginx尚未启动可以启动它,否则通过执行以下命令将重新加载配置信号发送到 nginx 的主进程:
nginx -s reload
如果运行的效果没有在预期之中,您可以尝试从 /usr/local/nginx/logs 或 /var/log/ nginx 中的 access.log 和 error.log 日志文件中查找原因。
Nginx的一个常见用途是作为一个代理服务器,作用是接收请求并转发给被代理的服务器,从中取得响应,并将其发送回客户端,我们会将图片请求提供的文件来自本地目录,并将所有其它请求发送给代理的服务器。
首先,通过向 nginx 的配置文件添加一个 server 块来定义代理服务器,其中包含以下内容:
server {
listen 8080;
root /data/up1;
location / {
}
}
listen:监听8080端口的简单服务器,并将所有请求映射到本地文件系统上的 /data/up1 目录。
root:代表着全局默认点,当location中没有配置root,则会选用/data/up1这个path。
创建此目录并将 index.html 文件放入其中。
注意,root 指令位于 server 上下文中。当选择用于处理请求的location块自身不包含root指令时,将使用此 root 指令。
在之前的服务器配置基础上进行修改,使其成为代理服务器配置。在第一个 location 块中,使用参数指定的代理服务器的协议,域名和端口( http://localhost:8080)放置在proxy_pass 指令处:
server {
location / {
proxy_pass http://localhost:8080;
}
location /images/ {
root /data;
}
}
修改使用了/images/前缀将请求映射到/data/images目录下的文件的第二个location块,使其与图片文件扩展名的请求相匹配。修改后的 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;
}
}
此 server 将过滤以 .gif,.jpg 或 .png 结尾的请求,并将它们映射到 /data/images 目录(通过向 root 指令的参数添加 URI),并将所有其它请求传递到上面配置的代理服务器。
Nginx首先要决定哪个服务器应该处理请求。让我们从一个简单的配置开始,三个虚拟服务器都监听在端口*:80:
server {
listen 80;
server_name example.org www.example.org;
...
}
server {
listen 80;
server_name example.net www.example.net;
...
}
server {
listen 80;
server_name example.com www.example.com;
...
}
在这个配置中,Nginx仅仅检验请求header中的”Host”域来决定请求应该路由到哪个服务器。
如果它的值不能匹配任何服务器,或者请求完全没有包含这个header域,那么nginx将把这个请求路由到这个端口的默认服务器。在上面的配置中,默认服务器是第一个 - 这是nginx标准的默认行为。也可以通过listen指令的default_server属性来显式的设置默认服务器,例如下面配置:
server {
listen 80 default_server;
server_name example.net www.example.net;
...
}
default_server 参数从版本0.8.21开始可用,在更早的版本中要使用default参数。
如果容许请求没有”Host” header 域,放弃这些请求的服务器可以定义为:
server {
listen 80;
server_name "";
return 444;
}
服务器名称被设置为空字符串,这样将匹配没有”Host”header域的请求, 并返回一个特殊的nginx的非标准码404,然后关闭连接。
让我们看一下更复杂的配置,有一些虚拟服务器监听在不同的地址:
server {
listen 192.168.1.1:80;
server_name example.org www.example.org;
...
}
server {
listen 192.168.1.1:80;
server_name example.net www.example.net;
...
}
server {
listen 192.168.1.2:80;
server_name example.com www.example.com;
...
}
在这个配置中,nginx首先通过server块的listen指令检验请求的IP地址和端口。然后在通过server块的server_name入口检验请求的”Host”header域。如果服务器名称没有找到,请求将被默认服务器处理。
例如,在端口192.168.1.1:80接收到的去www.example.com的请求将被端口192.168.1.1:80的默认服务器处理。。
默认服务器是监听端口的属性,并且不同的端口可以定义不同的默认服务器:
server {
listen 192.168.1.1:80;
server_name example.org www.example.org;
...
}
server {
listen 192.168.1.1:80 default_server;
server_name example.net www.example.net;
...
}
server {
listen 192.168.1.2:80 default_server;
server_name example.com www.example.com;
...
}
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru
在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo
您如何在Rails中的实时服务器上进行有效调试,无论是在测试版/生产服务器上?我试过直接在服务器上修改文件,然后重启应用,但是修改好像没有生效,或者需要很长时间(缓存?)我也试过在本地做“脚本/服务器生产”,但是那很慢另一种选择是编码和部署,但效率很低。有人对他们如何有效地做到这一点有任何见解吗? 最佳答案 我会回答你的问题,即使我不同意这种热修补服务器代码的方式:)首先,你真的确定你已经重启了服务器吗?您可以通过跟踪日志文件来检查它。您更改的代码显示的View可能会被缓存。缓存页面位于tmp/cache文件夹下。您可以尝试手动删除
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总
深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal
项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU