热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

详解Nginx如何配置Web服务器的示例代码

这篇文章主要介绍了详解Nginx如何配置Web服务器的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

概述

今天主要分享怎么将NGINX配置作为Web服务器,并包括以下部分:

  • 设置虚拟服务器
  • 配置位置
  • 使用变量
  • 返回特定状态码
  • 重写HTTP响应

在高层次上,将NGINX配置作为Web服务器有一些问题需要了解,定义它处理哪些URL以及如何处理这些URL上的资源的HTTP请求。 在较低层次上,配置定义了一组控制对特定域或IP地址的请求的处理的虚拟服务器。

用于HTTP流量的每个虚拟服务器定义了称为位置的特殊配置实例,它们控制特定URI集合的处理。 每个位置定义了自己的映射到此位置的请求发生的情况。 NGINX可以完全控制这个过程。 每个位置都可以代理请求或返回一个文件。 此外,可以修改URI,以便将请求重定向到另一个位置或虚拟服务器。 此外,可以返回特定的错误代码,也可以配置特定的页面以对应于每个错误代码。

1. 设置虚拟服务器

NGINX配置文件必须至少包含一个服务器指令来定义虚拟服务器。 当NGINX处理请求时,它首先选择提供请求的虚拟服务器。

虚拟服务器由http上下文中的服务器指令定义,例如:

http { 
 server { 
 # Server configuration 
 } 
} 

可以将多个server指令添加到http上下文中以定义多个虚拟服务器。

server配置块通常包括一个listen指令,用于指定服务器侦听请求的IP地址和端口(或Unix域套接字和路径)。IPv4和IPv6地址均被接受; 将方括号(。

下面的示例显示了监听IP地址127.0.0.1和端口8080的服务器的配置:

server { 
 listen 127.0.0.1:8080; 
 # The rest of server configuration 
} 

如果省略端口,则使用标准端口。 同样地,如果省略一个地址,服务器将侦听所有地址。 如果没有包含listen指令,则“标准”端口为80/tcp,“default”端口为8000/tcp,具体取决于超级用户权限。

如果有多个服务器与请求的IP地址和端口相匹配,则NGINX将根据服务器块中的server_name指令测试请求的主机头域。 server_name的参数可以是完整(精确)名称,通配符或正则表达式。 通配符是一个字符串,其开头,结尾或两者都包含星号(*); 星号匹配任何字符序列。 NGINX将Perl语法用于正则表达式; 在它们之前使用波浪号()。 此示例说明了一个确切的名称。

server { 
 listen 80; 
 server_name example.org www.example.org; 
 ... 
} 

2. 配置位置

NGINX可以根据请求URI向不同的代理发送流量或提供不同的文件。 这些块是使用放置在server指令中的location指令来定义的。

例如,您可以定义三个location块,以指示虚拟服务器向一个代理服务器发送一些请求,将其他请求发送到不同的代理服务器,并通过从本地文件系统传递文件来提供其余请求。

NGINX测试根据所有location指令的参数请求URI,并应用匹配location中定义的指令。 在每个location块内,通常可能(除了一些例外)放置更多的location指令以进一步细化特定组请求的处理。

注意:在本教程文章中,单词location是指单个location上下文。

location指令有两种类型的参数:前缀字符串(路径名)和正则表达式。 对于要匹配前缀字符串的请求URI,必须以前缀字符串开头。

具有pathname参数的以下示例位置匹配以/some/path/开头的请求URI,例如/some/path/document.html,它不匹配/my-site/some/path,因为/some/path不在该URI的开头出现。

location /some/path/ { 
 ... 
} 

正则表达式之前是区分大小写匹配的波形符号(~),或者不区分大小写匹配的波形符号(~*)。 以下示例将包含字符串.html或.html的URI与任何位置相匹配。

location ~ \.html? { 
 ... 
} 

要找到最符合URI的位置,NGINX首先将URI与前缀字符串的位置进行比较。然后用正则表达式搜索位置。

location上下文可以包含定义如何解析请求的指令 - 提供静态文件或将请求传递给代理的服务器。 在以下示例中,匹配第一个location上下文的请求将从/data/images目录中提供文件,并将匹配第二个位置的请求传递给承载 www.example.com 域内容的代理服务器。

server { 
 location /images/ { 
 root /data; 
 } 
 location / { 
 proxy_pass http://www.example.com; 
 } 
} 

root指令指定要在其中搜索要提供的静态文件的文件系统路径。 与该位置相关联的请求URI将附加到路径,以获取要提供的静态文件的全名。 在上面的示例中,要响应/images/logo.png的请求,NGINX提供服务器本地实际对应文件是:/data/images/logo.png。

proxy_pass指令将请求传递给使用配置的URL访问代理服务器。然后将代理服务器的响应传回客户端。在上面的示例中,所有不以/images/开头的URI的请求都将被传递给代理的服务器(也就是:www.example.com)。

3. 使用变量

可以使用配置文件中的变量,使NGINX进程的请求根据定义的情况而有所不同。 变量是在运行时计算的命名值,用作指令的参数。 一个变量由它的名字开头的$(美元)符号表示。 变量根据NGINX的状态定义信息,例如正在处理的请求的属性。

有许多预定义的变量,如核心HTTP变量,您可以使用set,map和geo指令定义自定义变量。 大多数变量在运行时计算的,并包含与特定请求相关的信息。 例如,$remote_addr包含客户端IP地址,$uri保存当前的URI值。

4. 返回特定状态码

一些网站URI需要立即返回具有特定错误或重定向代码的响应,例如当页面被暂时移动或永久移动时。 最简单的方法是使用return指令。 例如返回未找到的404状态码:

location /wrong/url { 
 return 404; 
} 

返回的第一个参数是响应代码。可选的第二个参数可以是重定向的URL(代码301,302,303和307)或在响应体中返回文本。 例如:

location /permanently/moved/url { 
 return 301 http://www.example.com/moved/here; 
} 

返回指令可以包含在 location 和 server 上下文中。

5. 重写HTTP响应

有时需要重写或更改HTTP响应中的内容,将一个字符串替换为另一个字符串。 可以使用sub_filter指令来定义要应用的重写。 该指令支持变量和替代链,使更复杂的更改成为可能。

例如,可以更改引用除代理服务器之外的绝对链接:

location / { 
 sub_filter /blog/ /blog-staging/; 
 sub_filter_once off; 
} 

另一个示例将方法从http://更改为http://,并从请求头域替换本地主机地址到主机名。 sub_filter_once指令告诉NGINX在一个位置(location)内连续应用sub_filter伪指令:

location / { 
 sub_filter 'href="http://127.0.0.1:8080/' 'href="http://$host/'; 
 sub_filter 'img src="http://127.0.0.1:8080/' 'img src="http://$host/'; 
 sub_filter_once on; 
} 

请注意,如果发生另一个sub_filter匹配,则使用sub_filter修改的响应部分将不再被替换。

到此这篇关于详解Nginx如何配置Web服务器的示例代码的文章就介绍到这了,更多相关Nginx 配置Web服务器内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!


推荐阅读
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 构建LNMP架构平台
    LNMP架构的组成:Linux、Nginx、MySQL、PHP关于NginxNginx与apache的作用一样,都是为了搭建网站服务器,由俄罗斯人lgorsysoev开发,其特点是 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • Linux下部署Symfoy2对app/cache和app/logs目录的权限设置,symfoy2logs
    php教程|php手册xml文件php教程-php手册Linux下部署Symfoy2对appcache和applogs目录的权限设置,symfoy2logs黑色记事本源码,vsco ... [详细]
  • Nginx Buffer 机制引发的下载故障
    Nginx ... [详细]
  • LVS-DR直接路由实现负载均衡示例
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • CentOS 7配置SSH远程访问及控制
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • Docker安装Nginx 反向代理服务器
    前端代码扔在服务器上怎么运行,首先安装Nginx,这里我用Docker安装Nginx文章目录一、安装nginxdocker镜像1、获取nginx官方镜像 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
author-avatar
W_庆祥
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有