1. 首页 > 快讯

深入解析Nginx Web 服务器配置实例:WebSocket

大家好,如果您还对深入解析Nginx Web 服务器配置实例:WebSocket不太了解,没有关系,今天就由本站为大家分享深入解析Nginx Web 服务器配置实例:WebSocket的知识,包括的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

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

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

[[322348]]

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

 

 

1. 设置虚拟服务器

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

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

  1. http { 
  2.  server { 
  3.  # Server configuration 
  4.  } 

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

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

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

  1. server { 
  2.  listen 127.0.0.1:8080; 
  3.  # The rest of server configuration 

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

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

  1. server { 
  2.  listen 80; 
  3.  server_name example.org www.example.org; 
  4.  ... 

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的开头出现。

  1. location /some/path/ { 
  2.  ... 

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

  1. location ~ \.html? { 
  2.  ... 

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

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

  1. server { 
  2.  location /images/ { 
  3.  root /data; 
  4.  } 
  5.  location / { 
  6.  proxy_pass http://www.example.com; 
  7.  } 

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状态码:

  1. location /wrong/url { 
  2.  return 404; 

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

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

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

5. 重写HTTP响应

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

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

  1. location / { 
  2.  sub_filter /blog/ /blog-staging/; 
  3.  sub_filter_once off

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

  1. location / { 
  2.  sub_filter 'href="http://127.0.0.1:8080/' 'href="http://$host/'
  3.  sub_filter 'img src="http://127.0.0.1:8080/' 'img src="http://$host/'
  4.  sub_filter_once on

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

用户评论

良人凉人

终于找到了关于Nginx配置WebSocket的教程!一直想学习一下。

    有13位网友表示赞同!

命运不堪浮华

我正在尝试搭建一个实时聊天应用,这个教程看起来很实用。

    有12位网友表示赞同!

昂贵的背影

希望这篇文章能详细解释步骤,包括一些常见错误解决方法。

    有12位网友表示赞同!

君临臣

我对 WebSocket 有一定的了解,但还是希望能更深入地学习 Nginx 的配置方式。

    有19位网友表示赞同!

蝶恋花╮

最近在用 Nginx 搭建服务器,这个教程很 Timely!

    有17位网友表示赞同!

一笑抵千言

之前使用 Apache 建立了 WebSocket,想尝试一下 Nginx 更灵活的配置方案。

    有16位网友表示赞同!

肆忌

分享一下你的经验,如何选择合适的配置参数是关键吧?

    有11位网友表示赞同!

一点一点把你清空

我比较好奇关于安全方面的配置,这个教程会涉及吗?

    有5位网友表示赞同!

优雅的叶子

看了标题,这篇文章应该是针对入门级用户的讲解吧?

    有8位网友表示赞同!

服从

最近在学习 Web 开发,WebSocket 听起来很有意思,要好好看看这篇教程。

    有20位网友表示赞同!

遗憾最汹涌

感觉这个主题越来越热门了,Nginx 的配置确实非常强大。

    有9位网友表示赞同!

怪咖

期待看到一些实际的代码示例,更容易理解和应用。

    有5位网友表示赞同!

封锁感觉

希望文章中能包含一些性能调优方面的建议。

    有16位网友表示赞同!

仅有的余温

如果可以加上一份完整的配置文件模板,那就更好了!

    有7位网友表示赞同!

七级床震

有没有人用这个方法搭建过大型 WebSocket 应用?想了解下经验分享。

    有7位网友表示赞同!

怅惘

在实际项目中,如何选择 Nginx 和其他技术协同工作?

    有19位网友表示赞同!

最怕挣扎

对于不同使用场景,Nginx 的配置思路会有什么区别?

    有11位网友表示赞同!

玻璃渣子

这个教程能帮助我解决当前项目中的 WebSocket 问题吗?

    有15位网友表示赞同!

麝香味

能否提供一些额外的学习资源,比如相关的书籍或网站?

    有7位网友表示赞同!

本文采摘于网络,不代表本站立场,转载联系作者并注明出处:https://www.iotsj.com//kuaixun/7782.html

联系我们

在线咨询:点击这里给我发消息

微信号:666666