欢迎来到阿里云授权服务中心典名科技有限公司!咨询电话:023-66887777 18623333330

微信
手机版
网站地图

nginx安装配置你都了解吗

2021-10-15 11:23:14 投稿人 : admin 围观 : 66 次 0 评论

  Nginx多用于配置Web服务器。抽象来说,将Nginx配置为Web服务器就是定义处理哪些 URLS 和如何处理这些URLS 对应的请求,定义一些虚拟服务器,控制具有特定 IP 和域名的请求。Nginx 通过定义一系列 locations 来控制对 URIS 的选择。每一个 location 定义了对映射到自己的请求的处理场景,返回一个文件或者代理请求,或者根据不同的错误代码返回不同的错误页面。另外,根据 URI 的不同,请求也可以被重定向到其它。下面就由和大家讲一讲nginx安装配置。

  一、设置虚拟服务器

  listen:

  Nginx 配置文件至少包含一个 server 命令 ,用来定义虚拟服务器。当请求到来时, Nginx 会首先选择一个虚拟服务器来处理该请求。

  虚拟服务器定义在 http 上下文中的 server 中:

  http{

  server{

  #Serverconfiguration

  }

  }

  注意: http 中可以定义多个 server

  server 配置块使用 listen 命令监听本机 IP 和端口号(包括 Unix domain socket and path),支持 IPv4、IPv6,IPv6地址需要用方括号括起来:

  server{

  listen127.0.0.1:8080;#IPv4地址,8080端口

  #listen[2001:3CA1:10F:1A:121B:0:0:10]:80;#IPv6地址,80端口

  #listen[::]:80;#听本机的所有IPv4与IPv6地址,80端口

  #Therestofserverconfiguration

  }

  上述配置,如果不写端口号,默认使用80端口,如果不写 IP ,则监听本机所有 IP。

  server_name:

  如果多个 server 的 listen IP 和端口号一模一样, Nginx 通过请求头中的 Host

  与 server_name 定义的主机名进行比较,来选择合适的虚拟服务器处理请求:

  server{

  listen80;

  server_namelufficc.comwww.lufficc.com;

  ...

  }

  server_name 的参数可以为:

  1、完整的主机名,如:api.lufficc.com 。

  2、含有通配符(含有 *),如:*.lufficc.com 或 api.* 。

  3、正则表达式,以 ~ 开头。

  通配符只能在开头或结尾,而且只能与一个 . 相邻。www.*.example.org 和 w*.example.org均无效。 但是,可以使用正则表达式匹配这些名称,例如 ~^www\..+\.example\.org$ 和~^w.*\.example\.org$ 。 而且 * 可以匹配多个部分。 名称 * .example.org 不仅匹配www.example.org,还匹配www.sub.example.org。

  对于正则表达式:Nginx 使用的正则表达式与 Perl 编程语言(PCRE)使用的正则表达式兼容。 要使用正则表达式,且必须以 ~ 开头。

  命名的正则表达式可以捕获变量,然后使用:

  server{

  server_name~^(www\.)?(?.+)$;

  location/{

  root/sites/$domain;

  }

  }

  小括号 () 之间匹配的内容,也可以在后面通过 $1 来引用,$2 表示的是前面第二个 () 里的内容。因此上述内容也可写为:

  server{

  server_name~^(www\.)?(.+)$;

  location/{

  root/sites/$2;

  }

  }

  一个 server_name 示例:

  server{

  listen80;

  server_nameapi.lufficc.com*.lufficc.com;

  ...

  }

  同样,如果多个名称匹配 Host 头部, Nginx 采用下列顺序选择:

  1、完整的主机名,如 api.lufficc.com。

  2、最长的,且以 * 开头的通配名,如:*.lufficc.com。

  3、最长的,且以 * 结尾的通配名,如:api.* 。

  4、第一个匹配的正则表达式。(按照配置文件中的顺序)

  即优先级:api.lufficc.com > *.lufficc.com > api.* > 正则。

  如果 Host 头部不匹配任何一个 server_name ,Nginx 将请求路由到默认虚拟服务器。默认虚拟服务器是指:nginx.conf 文件中第一个 server 或者 显式用 default_server 声明:

  server{

  listen80default_server;

  ...

  }

  二、配置 location

  URI 与 location 参数的匹配

  当选择好 server 之后,Nginx 会根据 URIs 选择合适的 location 来决定代理请求或者返回文件。

  location 指令接受两种类型的参数:

  1、前缀字符串(路径名称)

  2、正则表达式

  对于前缀字符串参数, URIs 必须严格的以它开头。例如对于 /some/path/ 参数,可以匹配/some/path/document.html ,但是不匹配 /my-site/some/path,因为 /my-site/some/path 不以/some/path/ 开头。

  server{

  listen80default_server;

  ...

  }

  对于正则表达式,以 ~ 开头表示大小写敏感,以 ~* 开头表示大小写不敏感。注意路径中的 . 要写成 \. 。例如一个匹配以 .html 或者 .htm 结尾的 URI 的 location:

  location~\.html?{

  ...

  }

  正则表达式的优先级大于前缀字符串。如果找到匹配的前缀字符串,仍继续搜索正则表达式,但如果前缀字符串以 ^~ 开头,则不再检查正则表达式。

  三、具体的搜索匹配流程如下:

  1、将 URI 与所有的前缀字符串进行比较。

  2、= 修饰符表明 URI 必须与前缀字符串相等(不是开始,而是相等),如果找到,则搜索停止。

  3、如果找到的最长前缀匹配字符串以 ^~ 开头,则不再搜索正则表达式是否匹配。

  4、存储匹配的最长前缀字符串。

  5、测试对比 URI 与正则表达式。

  6、找到第一个匹配的正则表达式后停止。

  7、如果没有正则表达式匹配,使用 4 存储的前缀字符串对应的 location。

  = 修饰符拥有最高的优先级。如网站首页访问频繁,我们可以专门定义一个 location 来减少搜索匹配次数(因为搜索到 = 修饰的匹配的 location 将停止搜索),提高速度:

  location=/{

  ...

  }

  四、静态文件和代理

  location 也定义了如何处理匹配的请求:返回静态文件 或者 交给代理服务器处理。下面的例子中,第一个 location 返回 /data 目录中的静态文件,第二个 location 则将请求传递给https://lufficc.com 域名的服务器处理:

  server{

  location/images/{

  root/data;

  }

  location/{

  proxy_passhttps://lufficc.com;

  }

  }

  root 指令定义了静态文件的根目录,并且和 URI 拼接形成最终的本地文件路径。如请求/images/example.png,则拼接后返回本地服务器文件 /data/images/example.png 。

  proxy_pass 指令将请求传递到 URL 指向的代理服务器。让后将来自代理服务器的响应转发给客户端。 在上面的示例中,所有不以 /images / 开头的 URI 的请求都将传递给代理服务器处理。

  比如我把 proxy_pass 设置为 https://www.baidu.com/,那么访问 http://search.lufficc.com/ 将得到百度首页一样的响应(页面)(感兴趣的童鞋可以自己试一试搜索功能,和百度没差别呢):

  server{

  listen80;

  server_namesearch.lufficc.com;

  location/{

  proxy_passhttps://www.baidu.com;

  }

  }

  五、使用变量(Variables)

  你可以使用变量来使 Nginx 在不同的请求下采用不同的处理方式。变量是在运行时计算的,用作指令的参数。 变量由 $ 开头的符号表示。 变量基于 Nginx 的状态定义信息,例如当前处理的请求的属性。

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

  一些常用的变量如下:


  一个简单的应用就是从 http 重定向到 https 时带上路径信息:

  server{

  ...

  return301https://lufficc.com$request_uri;

  ...

  }

  六、返回特定状态码

  如果你的网站上的一些资源永久移除了,最快最简洁的方法就是使用 return 指令直接返回:

  location/wrong/url{

  return404;

  }

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

  location/permanently/moved/url{

  return301http://www.example.com/moved/here;}

  return 指令可以包含在 location 和 server 上下文中:

  server{

  location/{

  return404;

  }

  }

  或者:

  server{

  ...

  return404;

  location/{

  ...

  }

  }

  七、错误处理

  error_page 命令可以配置特定错误码的错误页面,或者重定向到其他的页面。下面的示例将在 404 错误发生时返回 /404.html 页面。

  error_page404/404.html;

  error_page 命令定义了如何处理错误,因此不会直接返回,而 return 确实会立即返回。当代理服务器或者 Nginx 处理时产生相应的错误的代码,均会返回相应的错误页面。

  在下面的示例中,当 Nginx 找不到页面时,它将使用代码301替换代码404,并将客户端重定向到http://example.com/new/path.html 。 此配置很有用,比如当客户端仍尝试用旧的 URI 访问页面时,301代码通知浏览器页面已永久移除,并且需要自动替换为返回的新地址。

  location/old/path.html{

  error_page404=301http:/example.com/new/path.html;

  }

  八、重写 URIs

  rewrite 指令可以多次修改请求的 URI。rewrite 的第一个参数是 URI需要匹配的正则表达式,第二个参数是将要替换的 URI。第三个参数可选,指示是否继续可以重写或者返回重定向代码(301或302)。例如:

  location/users/{

  rewrite^/users/(.*)$/show?user=$1break;

  }

  您可以在 server 和 location 上下文中包括多个 rewrite 指令。 Nginx 按照它们发生的顺序一个一个地执行指令。 当选择 server 时,server 中的 rewrite 指令将执行一次。

未标题-1.jpg


  在 Nginx 处理一组 rewrite 指令之后,它根据新的 URI 选择 location 。 如果所选 location 仍旧包含 rewrite 指令,它们将依次执行。 如果 URI 匹配所有,则在处理完所有定义的 rewrite 指令后,搜索新的 location 。

  以下示例将 rewrite 指令与 return 指令结合使用:

  server{

  ...

  rewrite^(/download/.*)/media/(.*)\..*$$1/mp3/$2.mp3last;

  rewrite^(/download/.*)/audio/(.*)\..*$$1/mp3/$2.ralast;

  return403;

  ...

  }

  诸如 /download/some/media/file 的 URI 被改为 /download/some/mp3/file.mp3 。 由于 last 标志,后续指令(第二个 rewrite 指令和 return 指令)被跳过,但 Nginx 继续以更改后的 URI 处理请求。 类似地,诸如 /download/some/audio/file 的 URI 被替换为/download/some/mp3/file.ra。 如果 URI 不匹配 rewrite 指令,Nginx 将403 错误代码返回给客户端。

  last 与 break的区别是:

版权声明:本站部分文章内容、图片来源于网友推荐、互联网收集整理而来,仅供大家学习参考,不代表本站立场,如有侵权,请联系站长,我们会第一时间处理!本站原创内容未经允许不得转载,或转载时需注明出处:典名科技资讯门户

相关文章

  • 怎样弄linux查看进程的线程数?
    怎样弄linux查看进程的线程数?

      Linux系统的进程是由线程组成的,当然Linux进程下的线程数是不固定的,可以是一个进程,也可以是多个进程。下面就由和大家讲一讲linux查看进程。进程是一个其中运行着一个或多个线程的地址空间和这些线程所需要的系统资源。一般来说,Li...

    2021-11-17 11:35:33
  • 云服务器的优势
    云服务器的优势

      基于云主机平台构建的一款新型云主机产品,其性能是云主机的性能,同时具备虚拟主机的全部功能。在主机控制面板上还具有服务器重启,CPU、内存、使用空间大小监控等功能。用户独享整个驰云服务器的软硬件资源,通过控制面板进行维护和管理,同时关闭远...

    2021-11-17 11:27:34
  • 微系统架构的特点
    微系统架构的特点

      微系统架构是一项在云中部署应用和服务的新技术。大部分围绕微服务的争论都集中在容器或其他技术是否能很好的实施微服务,而红帽说API应该是重点。微服务可以在“自己的程序”中运行,并通过“轻量级设备与HTTP型API进行沟通”。关键在于该服务...

    2021-11-17 11:20:34
  • 云建站有什么特点?
    云建站有什么特点?

      云建站是最近几年互联网领域兴起的全新的一种互联网基础应用模式,以前存放网站所有的服务器都是单击存在,各种服务之间没有明确的区分,来到云技术时代,随着虚拟化技术的进步,大规模集成式服务开始出现,由之前的单点式服务变为了集群式云服务,人们可...

    2021-11-17 11:13:35
  • 如何使用linux搭建vpn服务器?
    如何使用linux搭建vpn服务器?

      Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹于1991年10月5日首次发布,它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线...

    2021-11-17 11:09:36
  • 可靠云主机的优点和缺点
    可靠云主机的优点和缺点

      云主机是云计算在基础设施应用上的重要组成部分,位于云计算产业链金字塔底层,产品源自云计算平台。该平台整合了互联网应用三大核心要素:计算、存储、网络,面向用户提供公用化的互联网基础设施服务。云主机是一种类似VPS主机的虚拟化技术, VPS...

    2021-11-17 11:03:36
  • linux查看端口占用情况的步骤
    linux查看端口占用情况的步骤

      准备使用python写一个端口探测的小程序,以检测一些特定的服务端口有没有被占用,突然发现自己居然不知道在linux中如何查询端口被占用的情况,在项目的部署的时候,会遇到端口被占用的情况,需要我们先停下占用端口的进程,然后才能开启新的服...

    2021-11-17 11:01:36
  • tftp服务器软件特点有哪些?tftp服务器软件如何使用?
    tftp服务器软件特点有哪些?tftp服务器软件如何使用?

      tftp是一个传输文件的简单协议,而tftp服务器则可以用于IOS的升级和备份的工作,同时还可以用于文件的传输,现在有一种tftp服务器软件,很多朋友不知道它的情况,下面就来说说tftp服务器软件特点有哪些?tftp服务器软件如何使用。...

    2021-11-17 11:01:35
  • 传真服务器软件角色的步骤
    传真服务器软件角色的步骤

      Windows Server 2008 中的传真服务管理器提供了一个用于配置和管理传真资源的集中管理点。传真服务管理器是在服务器管理器中安装传真服务器角色时安装的。可以使用传真服务管理器为传入和传出传真流量配置传真设备、指定可以使用传真...

    2021-11-17 11:01:35
  • 什么服务器好用?选择服务器要注意什么问题?
    什么服务器好用?选择服务器要注意什么问题?

      什么服务器好用?选择服务器要注意什么问题?很多人在选择服务器产品时一味的看重内存大小,不关注品牌和售后服务问题,其实这个想法有失偏颇。建议大家在选择服务器时还要考虑到宽带以及机房等问题。   一、服务器是什么?   服务器是计算机的一种...

    2021-11-17 11:01:33
发表评论