简述
今日关键共享如何将NGINX配备做为Web服务器,并包含下列一部分:
在高层级上,将NGINX配备做为Web服务器有1些难题必须掌握,界定它解决哪些URL和怎样解决这些URL上的資源的HTTP恳求。 在较低层级上,配备界定了1组操纵对特殊域或IP详细地址的恳求的解决的虚似服务器。
用于HTTP总流量的每一个虚似服务器界定了称为部位的独特配备案例,它们操纵特殊URI结合的解决。 每一个部位界定了自身的投射到此部位的恳求产生的状况。 NGINX能够彻底操纵这个全过程。 每一个部位都可以以代理商恳求或回到1个文档。 另外,能够改动URI,便于将恳求重定项到另外一个部位或虚似服务器。 另外,能够回到特殊的不正确编码,还可以配备特殊的网页页面以对应于每一个不正确编码。
1. 设定虚似服务器
NGINX配备文档务必最少包括1个服务器命令来界定虚似服务器。 当NGINX解决恳求时,它最先挑选出示恳求的虚似服务器。
虚似服务器由http左右文中的服务器命令界定,比如:
- http {
- server {
- # Server configuration
- }
- }
能够将好几个server命令加上到http左右文中以界定好几个虚似服务器。
server配备块一般包含1个listen命令,用于特定服务器侦听恳求的IP详细地址和端口号(或Unix域套接字和相对路径)。IPv4和IPv6详细地址均被接纳; 将方括号(。
下面的示例显示信息了监视IP详细地址127.0.0.1和端口号8080的服务器的配备:
- server {
- listen 127.0.0.1:8080;
- # The rest of server configuration
- }
假如省略端口号,则应用规范端口号。 一样地,假如省略1个详细地址,服务器将侦听全部详细地址。 假如沒有包括listen命令,则“规范”端口号为80/tcp,“default”端口号为8000/tcp,实际取决于非常客户管理权限。
假如有好几个服务器与恳求的IP详细地址和端口号相配对,则NGINX将依据服务器块中的server_name命令检测恳求的主机头域。 server_name的主要参数能够是详细(精准)名字,通配符或正则表达式表述式。 通配符是1个标识符串,其开始,末尾或二者都包括星号(*); 星号配对任何标识符编码序列。 NGINX将Perl英语的语法用于正则表达式表述式; 在它们以前应用波浪纹号()。 此示例表明了1个准确的名字。
- server {
- listen 80;
- server_name example.org www.example.org;
- ...
- }
2. 配备部位
NGINX能够依据恳求URI向不一样的代理商推送总流量或出示不一样的文档。 这些块是应用置放在server命令中的location命令来界定的。
比如,您能够界定3个location块,以标示虚似服务器向1个代理商服务器推送1些恳求,将别的恳求推送到不一样的代理商服务器,并根据从当地文档系统软件传送文档来出示其余恳求。
NGINX检测依据全部location命令的主要参数恳求URI,并运用配对location中界定的命令。 在每一个location块内,一般将会(除1些列外)置放更多的location命令以进1步细化特殊组恳求的解决。
留意:在本实例教程文章内容中,单词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左右文能够包括界定怎样分析恳求的命令 - 出示静态数据文档或将恳求传送给代理商的服务器。 在下列示例中,配对第1个location左右文的恳求将从/data/images文件目录中出示文档,并将配对第2个部位的恳求传送给承载 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过程的恳求依据界定的状况而有一定的不一样。 自变量是在运作时测算的取名值,用作命令的主要参数。 1个自变量由它的姓名开始的$(美元)标记表明。 自变量依据NGINX的情况界定信息内容,比如正在解决的恳求的特性。
有很多预订义的自变量,如关键HTTP自变量,您可使用set,map和geo命令界定自定自变量。 大多数数自变量在运作时测算的,并包括与特殊恳求有关的信息内容。 比如,$remote_addr包括顾客端IP详细地址,$uri储存当今的URI值。
4. 回到特殊情况码
1些网站URI必须马上回到具备特殊不正确或重定项编码的回应,比如当网页页面被临时挪动或永久性挪动时。 最简易的方式是应用return命令。 比如回到未寻找的404情况码:
- location /wrong/url {
- return 404;
- }
回到的第1个主要参数是回应编码。可选的第2个主要参数能够是重定项的URL(编码301,302,303和307)或在回应体中回到文字。 比如:
- location /permanently/moved/url {
- return 301 http://www.example.com/moved/here;
- }
回到命令能够包括在 location 和 server 左右文中。
5. 重新写过HTTP回应
有时必须重新写过或变更HTTP回应中的內容,将1个标识符串更换为另外一个标识符串。 可使用sub_filter命令来界定要运用的重新写过。 该命令适用自变量和取代链,使更繁杂的变更变成将会。
比如,能够变更引入除代理商服务器以外的肯定连接:
- location / {
- sub_filter /blog/ /blog-staging/;
- sub_filter_once off;
- }
另外一个示例将方式从http://变更为http://,并从恳求头域更换当地主机详细地址到主机名。 sub_filter_once命令告知NGINX在1个部位(location)内持续运用sub_filter伪命令:
请留意,假如产生另外一个sub_filter配对,则应用sub_filter改动的回应一部分将已不被更换。