`
tmj_159
  • 浏览: 709350 次
  • 性别: Icon_minigender_1
  • 来自: 永州
社区版块
存档分类
最新评论

Nginx 入门手册 (Beginner’s Guide)

 
阅读更多

翻译来自官方文档,首先感谢nginx 的作者,然后感谢官方文档吧。以下是官网地址,英文还可以的直接去看原文吧。

 http://nginx.org/en/docs/beginners_guide.html

------------------------------------------------------------------------------------

这篇手册给出了nginx的基本介绍,并且介绍了一些基本任务的实践。本文假设nginx已经安装到你的机器上了,如果没有请参考nginx安装手册。本手册还介绍了如何启动和停止nginx,reload配置,解析配置文件的结构,以及如何配置nginx去服务静态内容,如何配置nginx作为一个代理服务,如何使用fastcgi连上。

注:CGI是Common Gateway Interface 公共网关接口,Http 服务器与你的或者其他机器上的程序进行‘交谈’ 的一种工具。而 FastCGI 则像是一个常驻的(long-live)CGI。

 

Nginx有一个主进程和几个工作进程,主进程的目的是读取和评估配置,同时维护和管理工作进程。工作进程处理实际的请求。Nginx利用基于事件的模型和系统依赖的机制在工作进程中高效的分发任务。工作进程的数量可以配置成固定的或者是根据可用CPU核的数量来动态调整。

 

Nginx和模块工作的方法由配置文件决定,默认情况下,配置文件的名字为nginx.conf,它被放置在目录/usr/local/nginx/conf,/etc/nginx 或者/usr/local/etc/nginx下。

 

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

 

通过运行nginx可执行程序来启动nginx服务,一旦启动成功,可以通过调用可执行程序后面跟上-s的参数来得到控制。命令如下:

nginx -s signal

 signal 有下面几种选择

    stop, 快速停止

    quit,优雅,柔和的停止 (好难,一个强制停止,一个不强制停止不就得了)

    reload,重新加载配置

    reopen,重新打开日志文件

 

例如,如果想在工作进程完成当前请求之后再停止nginx进程,name下面的命令可以用的上:

nginx -s quit

 上面停止的命令需要和启动的命令是同一个用户。

 

配置的修改需要调用reload命令或者重启才能够被使用。

nginx -s reload

 主进程接收到上面的命令,会检查语法的有效性并且尝试去应用这些配置。如果成功主进程将会启动新的工作进程,并且给之前的工作进程发送消息,告诉他们可以停止了。如果失败了,会回滚配置,工作进程用的仍然是旧的配置。之前的工作进程,接收到停止的命令后,会停止接收新的连接,并且把当前的连接的任务都做完后才会真正的停止。

 

像kill这样的命令调用时也会在unit的工具的帮助下发送一个命令给linux的进程,这种情况下一个信号会直接以之前给定的进程ID发送给进程,这个进程ID是nginx事先已经写好了的,默认情况下,nginx在目录/usr/local/nginx/logs 或者/var/run下。举个例子,如果住进程的ID为1628,发送quit命令最后会转换成执行

kill -s quit 1628

 

想得到正在运行的nginx进程列表,像下面的方式使用PS命令

ps -ax | grep nginx

 

 

配置文件的结构

 

nginx包含有哪些模块,以及模块的控制被制定在配置文件的指令中。这些指令分为简单的指令和成块的指令,简单的指令由名字和参数组成,它们由空格隔开,指令最后由分号表示结束。块指令有着和简单指令一样的结构,与简单指令不一样的是他们的内容是由双花括号括起来的,而不是分号。如果块指令由其他的指令,他们被叫做一个上下文(a context) , 例如events, http, server 和location。

 

在配置文件中但是不在任何context中的指令被认为主上下文(main context),event  和 http 制定在主上下文中,server在http上下文中,location 在server上下文中。

 

剩下以井号表示的表示为注释。

 

 

为静态内容提供服务

 

Web服务的一个重要任务是向客户端提供文件,比如说图片或者静态的html,你可能要实现下面一种情况,根据请求不同,需求提供不同本地目录的文件:/data/www 这里保存html文件,/data/image 这里保存图片,这种情况下需要编辑配置文件,配置http上下文中的server指令块以支持http的服务,以及两个location块。 

 

首先,创建/data/www的目录,然后放入index.html文件,其它的类型的文本文件也可以放入这个文件夹,然后创建另外一个目录/data/images 然后放一些图片入内。

 

接着打开配置文件,默认的配置文件已经包含了一些配置server块例子,大部分的是注释,现在去掉这些注释,开始一个新的server块,如下

http {
    server {
    }
}

 一般情况,配置文件包含了一些server块,这些块以监听的端口(port)和服务名称(server name)来区分。一旦确认用哪一个server 块,需要制定请求头的url,并且在http上下文中的location中添加相应的参数入内。

location / {
    root /data/www;
}

这个location块,指明了处理前缀为‘/’的URI请求,如果到请求,URI将会添加到制定的root指令的指后面,就是说在/data/www 后面以形成本地的路径名称。如果有好几个都匹配到请求的路径了,nginx会选择一个最长的一个。上面的配置一个最最短的,长度为一,所以只有其他的都配置不了的情况下才会被使用。

 

接下来,添加第二个location块。

location /images/ {
    root /data;
}

这个配置会匹配到以/images/开头的请求, / 当然也可以匹配到,但是比这个短,所以会使用这个。

 

最终的server块配置如下

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

    location /images/ {
        root /data;
    }
}

  这已经是一个可用的服务配置,它监听80端口,接收本机的请求htt://localhost/。当请求中的路径包含/images/,将从/data/imags/ 获取文件响应给调用端, 比如说,http://localhost/images/example.png这样路径的请求,nginx或范松/data/imags/example.png文件给调用端,如果文件不存在,则响应404表示没有找到此类文件,请求如果不以/images开头,则会被路由到/data/www目录,即 http://localhost/some/example.html将会发送/data/www/some/example.html文件.

 

为了应用新的配置,如果没有启动的话,可以调用start命令,如果启动了可以使用reload指令来告诉nginx主进程重新加载配置。

nginx -s reload

 如果启动的结果和设想的不一致,你可以在access.log和error.log来查看原因,这些文件在/usr/local/nginx或者/var/log/nginx目录中。

 

 

设置一个简单的代理服务器

 

使用nginx一个比较常用情况是作为一个代理服务器。就是说一个nginx的server可以接收请求,解析他们到一个代理服务,并且获取返回值,并且返回给客户端。

 

接下来我们配置一个代理服务器,它会提供一个本地目录的图片文件服务和发送其它的请求到一个被代理的服务商,在这个例子中,每个nginx实例只有一个server 模块。

 

首先,添加一个server模块在被代理的nginx配置中,如下

server {
    listen 8080;
    root /data/up1;

    location / {
    }
}

  这个配置将会是一个监听8080端口的简单服务,所有的请求都会被映射在本地目录的/data/up1下(之前的配置没有添加端口,所以会使用默认端口80),创建这个目录,然后放入index.html文件,注意root指令配置在server上下文中,这样只要location中没有root,任何与location 匹配的请求都会到server下root中去。

.

接下来,使用之前的配置,修改它使之成为一个代理服务器,在第一个location块中,添加proxy_pass指令,同时制定被代理服务的协议,名字和端口,目前来说是http://localhost:8080。

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

    location /images/ {
        root /data;
    }
}

我们将修改第二个location上下文,目前来说会映射含有/images/的请求到/data/image 目录下,为了让映射匹配典型的文件扩展名的请求,修改成如下内容。

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

参数为一个正则表达式,它匹配了所有的url中后缀为.gif,.jpg,.png的请求,将他们映射到/data/images下。其它的请求将被映射到上面的location中。

这样当nginx选择一个location 提供服务是,会先检查前缀,然后检查正则表达式,记住nginx将会找最长的一个前缀,所以如果是通过正则表达式来匹配成功的,将会使用正则表达式匹配的location中的地址,否则会选择之前的一个。

 

最终的配置如下

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

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

   这个服务会过滤以.gif ,.jpg,.png结尾的请求,将它们映射到/data/imags本地目录下,其它的请求会发送到之前配置的被代理的服务器上。

   同样为了是这些配置可用,需要使用前面提到的命令reload。

 

 

配置FastCGI 代理

 

Nginx可以被用来路由请求到FastCGI服务上去,这些服务有建好的不同的框架和编程语言比如说,PHP。

 

与FastCGI服务工作的最基本的nginx配置包括用fastcgi_pass代理proxy_pass指令,和使用fastcgi_param指令同时设置指向FastCGI服务。假设FastCGI服务localhost:9000是可用的,拿走之前配置中的代理部分作为一个基础,然后将proxy_pass换成factcgi_pass指令同时将参数修改为localhost:9000。在PHP中,SCRIPT_FILENAM参数被用来确定脚本名称,QUERY_STRING参数备用来解析请求的参数,所以最终的配置如下:

server {
    location / {
        fastcgi_pass  localhost:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param QUERY_STRING    $query_string;
    }

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

这个服务将把除了带有后缀.gif,.jpg,.png的请求路由到/data/imags下之外,其它所有的请求都会被映射到fastcgi服务localhost:9000上。

 

----------------------------------------------------------------------------------------------------------------------------- 

后记,看这篇文章大概10分钟,写这篇文章却花了整整四个小时。

 

 

 

 

 

分享到:
评论

相关推荐

    基于忆阻神经网络的图像边缘检测的FPGA硬件实现.pdf

    基于忆阻神经网络的图像边缘检测的FPGA硬件实现.pdf

    MASTG Mobile Application Security Testing Guide 中文版本 | 移动应用安全性与逆向工程技术的全面指南:深入探讨OWASP MASTG v1.7.0

    内容概要:本文深入解读了OWASP MASTG v1.7.0的移动应用安全测试指南,涵盖应用源代码完整性检查、文件存储完整性检查、反编译与逆向工程、权限管理和证书固定等多个方面。文章强调移动应用程序面临的常见威胁及应对措施,并详细介绍反汇编、文件完整性检测、调试技术和证书固定的绕过方法。这些主题旨在帮助安全研究人员深入了解并加强移动应用程序的安全防护。适用人群:从事信息安全和移动应用开发的专业人士,尤其是负责安全测试和审计的工程师。 使用场景及目标:该指南主要应用于移动应用安全性评估、开发和渗透测试等领域。帮助企业和团队识别、防范各类安全隐患,确保移动应用程序的安全性和合规性。其他说明:本文还涉及大量实战技巧和技术细节,如ADB命令、逆向工程工具(radare2、IDA Pro等)的具体应用方法、动态与静态分析工具的选择,为移动安全研究人员提供了详尽的实际操作参考资料。 适合人群:具备一定编程基础,工作1-3年的研发人员。对信息安全领域有兴趣的学习者也可从中受益匪浅。 适用场合及目标:适用于移动应用开发、测试、维护等全流程,特别是关注安全性评估、漏洞挖掘、逆向工程及防御对策的企业和个人开发者。 其他说明:文章内容丰富,覆盖广泛的主题,既包含了理论知识又包含了大量的实用技术,能够满足不同类型用户的需求。无论是希望提升自我技术水平的一般技术人员,还是需要进行专业安全测评的专业人士都可以从此份文档中获益。

    基于java+ssm+mysql的图书管理借阅系统 源码+数据库+论文(高分毕设项目).zip

    项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:Tomcat(建议用 7.x 或者 8.x 版本),maven 数据库工具:navicat

    可控电抗器的有限元分析.pdf

    可控电抗器的有限元分析.pdf

    主窗体代码.txt

    主窗体代码

    基于java+ssm+mysql的留守儿童信息管理系统 源码+数据库+论文(高分毕设项目).zip

    项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:Tomcat(建议用 7.x 或者 8.x 版本),maven 数据库工具:navicat

    总变分 L1 保真度盐和胡椒去噪与自适应正则化参数Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    PhotoshopCC2015.zip

    PhotoshopCC2015

    基于RTL-SDR的ADS-B应答信号处理平台的研究与实现.pdf

    基于RTL-SDR的ADS-B应答信号处理平台的研究与实现.pdf

    docker-latest-logrotate-1.13.1-58.git87f2fab.el7.centos.x64-86.rpm.tar.gz

    1、文件内容:docker-latest-logrotate-1.13.1-58.git87f2fab.el7.centos.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/docker-latest-logrotate-1.13.1-58.git87f2fab.el7.centos.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

    docbook-style-dsssl-1.79-18.el7.x64-86.rpm.tar.gz

    1、文件内容:docbook-style-dsssl-1.79-18.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/docbook-style-dsssl-1.79-18.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

    1代码.txt

    1代码

    QR码图像识别的关键技术.pdf

    QR码图像识别的关键技术.pdf

    dpdk-tools-18.11.8-1.el7-8.x64-86.rpm.tar.gz

    1、文件内容:dpdk-tools-18.11.8-1.el7_8.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/dpdk-tools-18.11.8-1.el7_8.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、安装指导:私信博主,全程指导安装

    2025最新网格员知识题库及答案.docx

    2025最新网格员知识题库及答案.docx

    2025最新驾照C1证考试科目一必考题库附含答案.docx

    2025最新驾照C1证考试科目一必考题库附含答案.docx

    按键密码恢复程序源代码ZQ.zip

    按键密码恢复程序源代码ZQ

    sevenzip.19.0.0.nupkg

    sevenzip.19.0.0

    ndp461-devpack-kb3105179-enu.exe

    ndp461-devpack-kb3105179-enu

    NDP472-KB4054530-x86-x64-AllOS-ENU-1.exe

    NDP472-KB4054530-x86-x64-AllOS-ENU-1

Global site tag (gtag.js) - Google Analytics